From cc08601ae751a4e2eddc532bc010cdec791bfc50 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 14 Jul 2026 00:02:26 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-26):=20func=5F80178D40=20swept=20?= =?UTF-8?q?=C3=97134=20=E2=80=94=20the=20heaviest=20core=20in=20the=20game?= =?UTF-8?q?,=20fleet-wide?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 132/132 siblings banked (0 failures) via jtbl_family_bank --raw + the lazy-isolation chain. Each sibling: isolate -> jtbl carve -> remap from the raw crack -> stage ladder (raw -> scoped §8d -> recovered -> reconciled) -> WHOLE-BINARY byte-gate. - R22 clean-fleet 136/136 BYTE-IDENTICAL from `make clean`; 0 NON_MATCHING (G4). - METRICS: instr-weighted 63.8 -> 64.7%; distinct-code 40.7 -> 42.8% (+2.1 points from ONE core — 890 ins x 133 overlays = ~118K instructions of unique engine code); fn-count 82.43%. - tools/bank_exemplar.py promoted from scratch: bank a cracked EXEMPLAR ×1 through the same stage ladder jtbl_family_bank uses for siblings (carve/lazy-isolate -> raw/scoped/recovered/reconciled -> whole-binary gate). The exemplar path was previously hand-run each time. --- config/overlays.mk | 264 +- config/splat.ov_SC01_001.yaml | 3 + config/splat.ov_SC01_004.yaml | 3 + config/splat.ov_SC01_005.yaml | 3 + config/splat.ov_SC01_006.yaml | 3 + config/splat.ov_SC01_008.yaml | 3 + config/splat.ov_SC01_009.yaml | 3 + config/splat.ov_SC01_074.yaml | 3 + config/splat.ov_SC01_080.yaml | 3 + config/splat.ov_SC01_084.yaml | 3 + config/splat.ov_SC02_000.yaml | 5 +- config/splat.ov_SC02_003.yaml | 5 +- config/splat.ov_SC02_004.yaml | 3 + config/splat.ov_SC02_005.yaml | 3 + config/splat.ov_SC02_011.yaml | 3 + config/splat.ov_SC02_015.yaml | 3 + config/splat.ov_SC02_016.yaml | 3 + config/splat.ov_SC02_017.yaml | 3 + config/splat.ov_SC02_021.yaml | 3 + config/splat.ov_SC02_026.yaml | 3 + config/splat.ov_SC02_027.yaml | 3 + config/splat.ov_SC02_028.yaml | 3 + config/splat.ov_SC02_031.yaml | 3 + config/splat.ov_SC02_035.yaml | 3 + config/splat.ov_SC02_039.yaml | 3 + config/splat.ov_SC02_041.yaml | 3 + config/splat.ov_SC03_001.yaml | 3 + config/splat.ov_SC03_002.yaml | 3 + config/splat.ov_SC03_003.yaml | 3 + config/splat.ov_SC03_006.yaml | 3 + config/splat.ov_SC03_007.yaml | 3 + config/splat.ov_SC03_010.yaml | 3 + config/splat.ov_SC03_011.yaml | 3 + config/splat.ov_SC03_012.yaml | 3 + config/splat.ov_SC03_013.yaml | 3 + config/splat.ov_SC03_014.yaml | 3 + config/splat.ov_SC03_015.yaml | 3 + config/splat.ov_SC03_023.yaml | 3 + config/splat.ov_SC03_024.yaml | 3 + config/splat.ov_SC03_028.yaml | 3 + config/splat.ov_SC03_029.yaml | 3 + config/splat.ov_SC03_030.yaml | 3 + config/splat.ov_SC03_031.yaml | 3 + config/splat.ov_SC03_089.yaml | 3 + config/splat.ov_SC03_090.yaml | 3 + config/splat.ov_SC03_091.yaml | 3 + config/splat.ov_SC03_092.yaml | 3 + config/splat.ov_SC03_093.yaml | 3 + config/splat.ov_SC03_094.yaml | 3 + config/splat.ov_SC03_095.yaml | 3 + config/splat.ov_SC03_096.yaml | 3 + config/splat.ov_SC03_097.yaml | 3 + config/splat.ov_SC03_098.yaml | 3 + config/splat.ov_SC03_099.yaml | 3 + config/splat.ov_SC03_100.yaml | 3 + config/splat.ov_SC03_101.yaml | 3 + config/splat.ov_SC03_102.yaml | 3 + config/splat.ov_SC03_103.yaml | 3 + config/splat.ov_SC03_104.yaml | 3 + config/splat.ov_SC03_105.yaml | 3 + config/splat.ov_SC03_108.yaml | 3 + config/splat.ov_SC03_109.yaml | 3 + config/splat.ov_SC03_110.yaml | 3 + config/splat.ov_SC03_111.yaml | 3 + config/splat.ov_SC03_112.yaml | 3 + config/splat.ov_SC03_113.yaml | 3 + config/splat.ov_SC03_114.yaml | 3 + config/splat.ov_SC03_115.yaml | 3 + config/splat.ov_SC03_116.yaml | 3 + config/splat.ov_SC03_117.yaml | 3 + config/splat.ov_SC03_118.yaml | 3 + config/splat.ov_SC03_119.yaml | 3 + config/splat.ov_SC03_121.yaml | 3 + config/splat.ov_SC03_124.yaml | 3 + config/splat.ov_SC03_125.yaml | 3 + config/splat.ov_SC03_126.yaml | 3 + config/splat.ov_SC04_000.yaml | 3 + config/splat.ov_SC04_002.yaml | 3 + config/splat.ov_SC04_003.yaml | 3 + config/splat.ov_SC04_004.yaml | 3 + config/splat.ov_SC04_005.yaml | 3 + config/splat.ov_SC04_006.yaml | 3 + config/splat.ov_SC04_007.yaml | 3 + config/splat.ov_SC04_008.yaml | 3 + config/splat.ov_SC04_009.yaml | 3 + config/splat.ov_SC04_010.yaml | 3 + config/splat.ov_SC04_011.yaml | 3 + config/splat.ov_SC04_012.yaml | 3 + config/splat.ov_SC04_015.yaml | 3 + config/splat.ov_SC04_016.yaml | 3 + config/splat.ov_SC04_018.yaml | 3 + config/splat.ov_SC04_019.yaml | 3 + config/splat.ov_SC04_020.yaml | 3 + config/splat.ov_SC04_021.yaml | 3 + config/splat.ov_SC05_000.yaml | 3 + config/splat.ov_SC05_001.yaml | 3 + config/splat.ov_SC05_002.yaml | 3 + config/splat.ov_SC05_003.yaml | 3 + config/splat.ov_SC05_004.yaml | 3 + config/splat.ov_SC05_005.yaml | 3 + config/splat.ov_SC05_006.yaml | 3 + config/splat.ov_SC05_007.yaml | 3 + config/splat.ov_SC05_008.yaml | 3 + config/splat.ov_SC05_009.yaml | 3 + config/splat.ov_SC05_010.yaml | 3 + config/splat.ov_SC05_011.yaml | 3 + config/splat.ov_SC05_017.yaml | 3 + config/splat.ov_SC05_018.yaml | 3 + config/splat.ov_SC05_019.yaml | 3 + config/splat.ov_SC06_000.yaml | 3 + config/splat.ov_SC06_006.yaml | 3 + config/splat.ov_SC06_008.yaml | 3 + config/splat.ov_SC06_010.yaml | 3 + config/splat.ov_SC06_011.yaml | 3 + config/splat.ov_SC06_013.yaml | 3 + config/splat.ov_SC06_014.yaml | 3 + config/splat.ov_SC06_015.yaml | 3 + config/splat.ov_SC06_016.yaml | 3 + config/splat.ov_SC06_018.yaml | 3 + config/splat.ov_SC06_020.yaml | 3 + config/splat.ov_SC06_022.yaml | 3 + config/splat.ov_SC06_024.yaml | 3 + config/splat.ov_SC06_025.yaml | 3 + config/splat.ov_SC06_027.yaml | 3 + config/splat.ov_SC06_029.yaml | 3 + config/splat.ov_SC06_030.yaml | 3 + config/splat.ov_SC06_032.yaml | 3 + config/splat.ov_SC06_033.yaml | 3 + config/splat.ov_SC07_000.yaml | 3 + config/splat.ov_SC07_001.yaml | 3 + config/splat.ov_SC07_002.yaml | 3 + config/splat.ov_SC07_008.yaml | 3 + config/splat.ov_SC07_009.yaml | 3 + docs/progress.fleet.md | 278 +- src/ov_SC01_001/ov_SC01_001_jr_801734BC.c | 999 ---- src/ov_SC01_001/ov_SC01_001_jr_80178D40.c | 4469 +++++++++++++++ src/ov_SC01_004/ov_SC01_004_jr_801734BC.c | 899 --- src/ov_SC01_004/ov_SC01_004_jr_80178D40.c | 4369 +++++++++++++++ src/ov_SC01_005/ov_SC01_005_jr_801734BC.c | 1139 ---- src/ov_SC01_005/ov_SC01_005_jr_80178D40.c | 4610 +++++++++++++++ src/ov_SC01_006/ov_SC01_006_jr_801734BC.c | 1138 ---- src/ov_SC01_006/ov_SC01_006_jr_80178D40.c | 4609 +++++++++++++++ src/ov_SC01_008/ov_SC01_008_jr_801734BC.c | 918 --- src/ov_SC01_008/ov_SC01_008_jr_80178D40.c | 4388 +++++++++++++++ src/ov_SC01_009/ov_SC01_009_jr_801734BC.c | 1129 ---- src/ov_SC01_009/ov_SC01_009_jr_80178D40.c | 4599 +++++++++++++++ src/ov_SC01_074/ov_SC01_074_jr_801734BC.c | 944 ---- src/ov_SC01_074/ov_SC01_074_jr_80178D40.c | 4414 +++++++++++++++ src/ov_SC01_080/ov_SC01_080_jr_801734BC.c | 1421 ----- src/ov_SC01_080/ov_SC01_080_jr_80178D40.c | 4891 ++++++++++++++++ src/ov_SC01_084/ov_SC01_084_jr_801734BC.c | 1526 ----- src/ov_SC01_084/ov_SC01_084_jr_80178D40.c | 4997 +++++++++++++++++ src/ov_SC02_000/ov_SC02_000_jr_801734BC.c | 959 ---- src/ov_SC02_000/ov_SC02_000_jr_80178D40.c | 4427 +++++++++++++++ src/ov_SC02_003/ov_SC02_003_jr_801734BC.c | 959 ---- src/ov_SC02_003/ov_SC02_003_jr_80178D40.c | 4427 +++++++++++++++ src/ov_SC02_004/ov_SC02_004_jr_801734BC.c | 876 --- src/ov_SC02_004/ov_SC02_004_jr_80178D40.c | 4346 ++++++++++++++ src/ov_SC02_005/ov_SC02_005_jr_801734BC.c | 2527 --------- src/ov_SC02_005/ov_SC02_005_jr_80178D40.c | 5999 ++++++++++++++++++++ src/ov_SC02_011/ov_SC02_011_jr_801734BC.c | 2628 --------- src/ov_SC02_011/ov_SC02_011_jr_80178D40.c | 6098 ++++++++++++++++++++ src/ov_SC02_015/ov_SC02_015_jr_801734BC.c | 938 ---- src/ov_SC02_015/ov_SC02_015_jr_80178D40.c | 4406 +++++++++++++++ src/ov_SC02_016/ov_SC02_016_jr_801734BC.c | 1453 ----- src/ov_SC02_016/ov_SC02_016_jr_80178D40.c | 4923 ++++++++++++++++ src/ov_SC02_017/ov_SC02_017_jr_801734BC.c | 2157 ------- src/ov_SC02_017/ov_SC02_017_jr_80178D40.c | 5627 +++++++++++++++++++ src/ov_SC02_021/ov_SC02_021_jr_801734BC.c | 1011 ---- src/ov_SC02_021/ov_SC02_021_jr_80178D40.c | 4481 +++++++++++++++ src/ov_SC02_026/ov_SC02_026_jr_801734BC.c | 1369 ----- src/ov_SC02_026/ov_SC02_026_jr_80178D40.c | 4839 ++++++++++++++++ src/ov_SC02_027/ov_SC02_027_jr_801734BC.c | 1754 ------ src/ov_SC02_027/ov_SC02_027_jr_80178D40.c | 5224 +++++++++++++++++ src/ov_SC02_028/ov_SC02_028_jr_801734BC.c | 1779 ------ src/ov_SC02_028/ov_SC02_028_jr_80178D40.c | 5249 +++++++++++++++++ src/ov_SC02_031/ov_SC02_031_jr_801734BC.c | 1379 ----- src/ov_SC02_031/ov_SC02_031_jr_80178D40.c | 4849 ++++++++++++++++ src/ov_SC02_035/ov_SC02_035_jr_801734BC.c | 1213 ---- src/ov_SC02_035/ov_SC02_035_jr_80178D40.c | 4683 ++++++++++++++++ src/ov_SC02_039/ov_SC02_039_jr_801734BC.c | 892 --- src/ov_SC02_039/ov_SC02_039_jr_80178D40.c | 4362 +++++++++++++++ src/ov_SC02_041/ov_SC02_041_jr_801734BC.c | 1401 ----- src/ov_SC02_041/ov_SC02_041_jr_80178D40.c | 4871 ++++++++++++++++ src/ov_SC03_001/ov_SC03_001_jr_801734BC.c | 2756 --------- src/ov_SC03_001/ov_SC03_001_jr_80178D40.c | 6225 +++++++++++++++++++++ src/ov_SC03_002/ov_SC03_002_jr_801734BC.c | 1732 ------ src/ov_SC03_002/ov_SC03_002_jr_80178D40.c | 5202 +++++++++++++++++ src/ov_SC03_003/ov_SC03_003_jr_801734BC.c | 947 ---- src/ov_SC03_003/ov_SC03_003_jr_80178D40.c | 4417 +++++++++++++++ src/ov_SC03_006/ov_SC03_006_jr_801734BC.c | 2057 ------- src/ov_SC03_006/ov_SC03_006_jr_80178D40.c | 5527 ++++++++++++++++++ src/ov_SC03_007/ov_SC03_007_jr_801734BC.c | 1789 ------ src/ov_SC03_007/ov_SC03_007_jr_80178D40.c | 5259 +++++++++++++++++ src/ov_SC03_010/ov_SC03_010_jr_801734BC.c | 1074 ---- src/ov_SC03_010/ov_SC03_010_jr_80178D40.c | 4544 +++++++++++++++ src/ov_SC03_011/ov_SC03_011_jr_801734BC.c | 1238 ---- src/ov_SC03_011/ov_SC03_011_jr_80178D40.c | 4708 ++++++++++++++++ src/ov_SC03_012/ov_SC03_012_jr_801734BC.c | 854 --- src/ov_SC03_012/ov_SC03_012_jr_80178D40.c | 4324 ++++++++++++++ src/ov_SC03_013/ov_SC03_013_jr_801734BC.c | 1129 ---- src/ov_SC03_013/ov_SC03_013_jr_80178D40.c | 4599 +++++++++++++++ src/ov_SC03_014/ov_SC03_014_jr_801734BC.c | 1697 ------ src/ov_SC03_014/ov_SC03_014_jr_80178D40.c | 5167 +++++++++++++++++ src/ov_SC03_015/ov_SC03_015_jr_801734BC.c | 1701 ------ src/ov_SC03_015/ov_SC03_015_jr_80178D40.c | 5171 +++++++++++++++++ src/ov_SC03_023/ov_SC03_023_jr_801734BC.c | 957 ---- src/ov_SC03_023/ov_SC03_023_jr_80178D40.c | 4427 +++++++++++++++ src/ov_SC03_024/ov_SC03_024_jr_801734BC.c | 1633 ------ src/ov_SC03_024/ov_SC03_024_jr_80178D40.c | 5103 +++++++++++++++++ src/ov_SC03_028/ov_SC03_028_jr_801734BC.c | 1635 ------ src/ov_SC03_028/ov_SC03_028_jr_80178D40.c | 5105 +++++++++++++++++ src/ov_SC03_029/ov_SC03_029_jr_801734BC.c | 1611 ------ src/ov_SC03_029/ov_SC03_029_jr_80178D40.c | 5081 +++++++++++++++++ src/ov_SC03_030/ov_SC03_030_jr_801734BC.c | 1218 ---- src/ov_SC03_030/ov_SC03_030_jr_80178D40.c | 4688 ++++++++++++++++ src/ov_SC03_031/ov_SC03_031_jr_801734BC.c | 1181 ---- src/ov_SC03_031/ov_SC03_031_jr_80178D40.c | 4651 +++++++++++++++ src/ov_SC03_089/ov_SC03_089_jr_801734BC.c | 1432 ----- src/ov_SC03_089/ov_SC03_089_jr_80178D40.c | 4902 ++++++++++++++++ src/ov_SC03_090/ov_SC03_090_jr_801734BC.c | 1539 ----- src/ov_SC03_090/ov_SC03_090_jr_80178D40.c | 5009 +++++++++++++++++ src/ov_SC03_091/ov_SC03_091_jr_801734BC.c | 973 ---- src/ov_SC03_091/ov_SC03_091_jr_80178D40.c | 4443 +++++++++++++++ src/ov_SC03_092/ov_SC03_092_jr_801734BC.c | 1522 ----- src/ov_SC03_092/ov_SC03_092_jr_80178D40.c | 4992 +++++++++++++++++ src/ov_SC03_093/ov_SC03_093_jr_801734BC.c | 1332 ----- src/ov_SC03_093/ov_SC03_093_jr_80178D40.c | 4802 ++++++++++++++++ src/ov_SC03_094/ov_SC03_094_jr_801734BC.c | 1341 ----- src/ov_SC03_094/ov_SC03_094_jr_80178D40.c | 4811 ++++++++++++++++ src/ov_SC03_095/ov_SC03_095_jr_801734BC.c | 1065 ---- src/ov_SC03_095/ov_SC03_095_jr_80178D40.c | 4535 +++++++++++++++ src/ov_SC03_096/ov_SC03_096_jr_801734BC.c | 1043 ---- src/ov_SC03_096/ov_SC03_096_jr_80178D40.c | 4513 +++++++++++++++ src/ov_SC03_097/ov_SC03_097_jr_801734BC.c | 1472 ----- src/ov_SC03_097/ov_SC03_097_jr_80178D40.c | 4942 ++++++++++++++++ src/ov_SC03_098/ov_SC03_098_jr_801734BC.c | 1261 ----- src/ov_SC03_098/ov_SC03_098_jr_80178D40.c | 4731 ++++++++++++++++ src/ov_SC03_099/ov_SC03_099_jr_801734BC.c | 1152 ---- src/ov_SC03_099/ov_SC03_099_jr_80178D40.c | 4622 +++++++++++++++ src/ov_SC03_100/ov_SC03_100_jr_801734BC.c | 1265 ----- src/ov_SC03_100/ov_SC03_100_jr_80178D40.c | 4735 ++++++++++++++++ src/ov_SC03_101/ov_SC03_101_jr_801734BC.c | 1241 ---- src/ov_SC03_101/ov_SC03_101_jr_80178D40.c | 4711 ++++++++++++++++ src/ov_SC03_102/ov_SC03_102_jr_801734BC.c | 1135 ---- src/ov_SC03_102/ov_SC03_102_jr_80178D40.c | 4605 +++++++++++++++ src/ov_SC03_103/ov_SC03_103_jr_801734BC.c | 1209 ---- src/ov_SC03_103/ov_SC03_103_jr_80178D40.c | 4679 ++++++++++++++++ src/ov_SC03_104/ov_SC03_104_jr_801734BC.c | 1526 ----- src/ov_SC03_104/ov_SC03_104_jr_80178D40.c | 4996 +++++++++++++++++ src/ov_SC03_105/ov_SC03_105_jr_801734BC.c | 1444 ----- src/ov_SC03_105/ov_SC03_105_jr_80178D40.c | 4914 ++++++++++++++++ src/ov_SC03_108/ov_SC03_108_jr_801734BC.c | 964 ---- src/ov_SC03_108/ov_SC03_108_jr_80178D40.c | 4434 +++++++++++++++ src/ov_SC03_109/ov_SC03_109_jr_801734BC.c | 927 --- src/ov_SC03_109/ov_SC03_109_jr_80178D40.c | 4397 +++++++++++++++ src/ov_SC03_110/ov_SC03_110_jr_801734BC.c | 1048 ---- src/ov_SC03_110/ov_SC03_110_jr_80178D40.c | 4518 +++++++++++++++ src/ov_SC03_111/ov_SC03_111_jr_801734BC.c | 1207 ---- src/ov_SC03_111/ov_SC03_111_jr_80178D40.c | 4677 ++++++++++++++++ src/ov_SC03_112/ov_SC03_112_jr_801734BC.c | 1221 ---- src/ov_SC03_112/ov_SC03_112_jr_80178D40.c | 4670 ++++++++++++++++ src/ov_SC03_113/ov_SC03_113_jr_801734BC.c | 1065 ---- src/ov_SC03_113/ov_SC03_113_jr_80178D40.c | 4514 +++++++++++++++ src/ov_SC03_114/ov_SC03_114_jr_801734BC.c | 888 --- src/ov_SC03_114/ov_SC03_114_jr_80178D40.c | 4337 ++++++++++++++ src/ov_SC03_115/ov_SC03_115_jr_801734BC.c | 1086 ---- src/ov_SC03_115/ov_SC03_115_jr_80178D40.c | 4535 +++++++++++++++ src/ov_SC03_116/ov_SC03_116_jr_801734BC.c | 977 ---- src/ov_SC03_116/ov_SC03_116_jr_80178D40.c | 4426 +++++++++++++++ src/ov_SC03_117/ov_SC03_117_jr_801734BC.c | 1319 ----- src/ov_SC03_117/ov_SC03_117_jr_80178D40.c | 4768 ++++++++++++++++ src/ov_SC03_118/ov_SC03_118_jr_801734BC.c | 1729 ------ src/ov_SC03_118/ov_SC03_118_jr_80178D40.c | 5178 +++++++++++++++++ src/ov_SC03_119/ov_SC03_119_jr_801734BC.c | 1689 ------ src/ov_SC03_119/ov_SC03_119_jr_80178D40.c | 5138 +++++++++++++++++ src/ov_SC03_121/ov_SC03_121_jr_801734BC.c | 1040 ---- src/ov_SC03_121/ov_SC03_121_jr_80178D40.c | 4489 +++++++++++++++ src/ov_SC03_124/ov_SC03_124_jr_801734BC.c | 2185 -------- src/ov_SC03_124/ov_SC03_124_jr_80178D40.c | 5633 +++++++++++++++++++ src/ov_SC03_125/ov_SC03_125_jr_801734BC.c | 1581 ------ src/ov_SC03_125/ov_SC03_125_jr_80178D40.c | 5030 +++++++++++++++++ src/ov_SC03_126/ov_SC03_126_jr_801734BC.c | 947 ---- src/ov_SC03_126/ov_SC03_126_jr_80178D40.c | 4396 +++++++++++++++ src/ov_SC04_000/ov_SC04_000_jr_801734BC.c | 1284 ----- src/ov_SC04_000/ov_SC04_000_jr_80178D40.c | 4732 ++++++++++++++++ src/ov_SC04_002/ov_SC04_002_jr_801734BC.c | 1697 ------ src/ov_SC04_002/ov_SC04_002_jr_80178D40.c | 5146 +++++++++++++++++ src/ov_SC04_003/ov_SC04_003_jr_801734BC.c | 1265 ----- src/ov_SC04_003/ov_SC04_003_jr_80178D40.c | 4714 ++++++++++++++++ src/ov_SC04_004/ov_SC04_004_jr_801734BC.c | 1500 ----- src/ov_SC04_004/ov_SC04_004_jr_80178D40.c | 4949 ++++++++++++++++ src/ov_SC04_005/ov_SC04_005_jr_801734BC.c | 1480 ----- src/ov_SC04_005/ov_SC04_005_jr_80178D40.c | 4929 ++++++++++++++++ src/ov_SC04_006/ov_SC04_006_jr_801734BC.c | 1020 ---- src/ov_SC04_006/ov_SC04_006_jr_80178D40.c | 4469 +++++++++++++++ src/ov_SC04_007/ov_SC04_007_jr_801734BC.c | 1358 ----- src/ov_SC04_007/ov_SC04_007_jr_80178D40.c | 4807 ++++++++++++++++ src/ov_SC04_008/ov_SC04_008_jr_801734BC.c | 912 --- src/ov_SC04_008/ov_SC04_008_jr_80178D40.c | 4361 +++++++++++++++ src/ov_SC04_009/ov_SC04_009_jr_801734BC.c | 1019 ---- src/ov_SC04_009/ov_SC04_009_jr_80178D40.c | 4468 +++++++++++++++ src/ov_SC04_010/ov_SC04_010_jr_801734BC.c | 938 ---- src/ov_SC04_010/ov_SC04_010_jr_80178D40.c | 4387 +++++++++++++++ src/ov_SC04_011/ov_SC04_011_jr_801734BC.c | 1992 ------- src/ov_SC04_011/ov_SC04_011_jr_80178D40.c | 5441 ++++++++++++++++++ src/ov_SC04_012/ov_SC04_012_jr_801734BC.c | 933 --- src/ov_SC04_012/ov_SC04_012_jr_80178D40.c | 4382 +++++++++++++++ src/ov_SC04_015/ov_SC04_015_jr_801734BC.c | 1797 ------ src/ov_SC04_015/ov_SC04_015_jr_80178D40.c | 5246 +++++++++++++++++ src/ov_SC04_016/ov_SC04_016_jr_801734BC.c | 971 ---- src/ov_SC04_016/ov_SC04_016_jr_80178D40.c | 4420 +++++++++++++++ src/ov_SC04_018/ov_SC04_018_jr_801734BC.c | 2351 -------- src/ov_SC04_018/ov_SC04_018_jr_80178D40.c | 5799 +++++++++++++++++++ src/ov_SC04_019/ov_SC04_019_jr_801734BC.c | 2369 -------- src/ov_SC04_019/ov_SC04_019_jr_80178D40.c | 5818 +++++++++++++++++++ src/ov_SC04_020/ov_SC04_020_jr_801734BC.c | 1390 ----- src/ov_SC04_020/ov_SC04_020_jr_80178D40.c | 4839 ++++++++++++++++ src/ov_SC04_021/ov_SC04_021_jr_801734BC.c | 948 ---- src/ov_SC04_021/ov_SC04_021_jr_80178D40.c | 4397 +++++++++++++++ src/ov_SC05_000/ov_SC05_000_jr_801734BC.c | 949 ---- src/ov_SC05_000/ov_SC05_000_jr_80178D40.c | 4396 +++++++++++++++ src/ov_SC05_001/ov_SC05_001_jr_801734BC.c | 1392 ----- src/ov_SC05_001/ov_SC05_001_jr_80178D40.c | 4841 ++++++++++++++++ src/ov_SC05_002/ov_SC05_002_jr_801734BC.c | 1026 ---- src/ov_SC05_002/ov_SC05_002_jr_80178D40.c | 4475 +++++++++++++++ src/ov_SC05_003/ov_SC05_003_jr_801734BC.c | 1107 ---- src/ov_SC05_003/ov_SC05_003_jr_80178D40.c | 4556 +++++++++++++++ src/ov_SC05_004/ov_SC05_004_jr_801734BC.c | 1033 ---- src/ov_SC05_004/ov_SC05_004_jr_80178D40.c | 4482 +++++++++++++++ src/ov_SC05_005/ov_SC05_005_jr_801734BC.c | 1131 ---- src/ov_SC05_005/ov_SC05_005_jr_80178D40.c | 4580 +++++++++++++++ src/ov_SC05_006/ov_SC05_006_jr_801734BC.c | 949 ---- src/ov_SC05_006/ov_SC05_006_jr_80178D40.c | 4398 +++++++++++++++ src/ov_SC05_007/ov_SC05_007_jr_801734BC.c | 1105 ---- src/ov_SC05_007/ov_SC05_007_jr_80178D40.c | 4554 +++++++++++++++ src/ov_SC05_008/ov_SC05_008_jr_801734BC.c | 1307 ----- src/ov_SC05_008/ov_SC05_008_jr_80178D40.c | 4756 ++++++++++++++++ src/ov_SC05_009/ov_SC05_009_jr_801734BC.c | 979 ---- src/ov_SC05_009/ov_SC05_009_jr_80178D40.c | 4428 +++++++++++++++ src/ov_SC05_010/ov_SC05_010_jr_801734BC.c | 1414 ----- src/ov_SC05_010/ov_SC05_010_jr_80178D40.c | 4863 ++++++++++++++++ src/ov_SC05_011/ov_SC05_011_jr_801734BC.c | 921 --- src/ov_SC05_011/ov_SC05_011_jr_80178D40.c | 4370 +++++++++++++++ src/ov_SC05_017/ov_SC05_017_jr_801734BC.c | 2561 --------- src/ov_SC05_017/ov_SC05_017_jr_80178D40.c | 6010 ++++++++++++++++++++ src/ov_SC05_018/ov_SC05_018_jr_801734BC.c | 1826 ------ src/ov_SC05_018/ov_SC05_018_jr_80178D40.c | 5275 +++++++++++++++++ src/ov_SC05_019/ov_SC05_019_jr_801734BC.c | 947 ---- src/ov_SC05_019/ov_SC05_019_jr_80178D40.c | 4396 +++++++++++++++ src/ov_SC06_000/ov_SC06_000_jr_801734BC.c | 1792 ------ src/ov_SC06_000/ov_SC06_000_jr_80178D40.c | 5241 +++++++++++++++++ src/ov_SC06_006/ov_SC06_006_jr_801734BC.c | 1158 ---- src/ov_SC06_006/ov_SC06_006_jr_80178D40.c | 4607 +++++++++++++++ src/ov_SC06_008/ov_SC06_008_jr_801734BC.c | 1344 ----- src/ov_SC06_008/ov_SC06_008_jr_80178D40.c | 4793 ++++++++++++++++ src/ov_SC06_010/ov_SC06_010_jr_801734BC.c | 1207 ---- src/ov_SC06_010/ov_SC06_010_jr_80178D40.c | 4656 +++++++++++++++ src/ov_SC06_011/ov_SC06_011_jr_801734BC.c | 1096 ---- src/ov_SC06_011/ov_SC06_011_jr_80178D40.c | 4545 +++++++++++++++ src/ov_SC06_013/ov_SC06_013_jr_801734BC.c | 980 ---- src/ov_SC06_013/ov_SC06_013_jr_80178D40.c | 4429 +++++++++++++++ src/ov_SC06_014/ov_SC06_014_jr_801734BC.c | 1086 ---- src/ov_SC06_014/ov_SC06_014_jr_80178D40.c | 4535 +++++++++++++++ src/ov_SC06_015/ov_SC06_015_jr_801734BC.c | 1006 ---- src/ov_SC06_015/ov_SC06_015_jr_80178D40.c | 4455 +++++++++++++++ src/ov_SC06_016/ov_SC06_016_jr_801734BC.c | 1330 ----- src/ov_SC06_016/ov_SC06_016_jr_80178D40.c | 4779 ++++++++++++++++ src/ov_SC06_018/ov_SC06_018_jr_801734BC.c | 1530 ----- src/ov_SC06_018/ov_SC06_018_jr_80178D40.c | 4979 ++++++++++++++++ src/ov_SC06_020/ov_SC06_020_jr_801734BC.c | 1182 ---- src/ov_SC06_020/ov_SC06_020_jr_80178D40.c | 4631 +++++++++++++++ src/ov_SC06_022/ov_SC06_022_jr_801734BC.c | 1555 ----- src/ov_SC06_022/ov_SC06_022_jr_80178D40.c | 5004 +++++++++++++++++ src/ov_SC06_024/ov_SC06_024_jr_801734BC.c | 1619 ------ src/ov_SC06_024/ov_SC06_024_jr_80178D40.c | 5068 +++++++++++++++++ src/ov_SC06_025/ov_SC06_025_jr_801734BC.c | 1342 ----- src/ov_SC06_025/ov_SC06_025_jr_80178D40.c | 4791 ++++++++++++++++ src/ov_SC06_027/ov_SC06_027_jr_801734BC.c | 874 --- src/ov_SC06_027/ov_SC06_027_jr_80178D40.c | 4323 ++++++++++++++ src/ov_SC06_029/ov_SC06_029_jr_801734BC.c | 1662 ------ src/ov_SC06_029/ov_SC06_029_jr_80178D40.c | 5111 +++++++++++++++++ src/ov_SC06_030/ov_SC06_030_jr_801734BC.c | 1000 ---- src/ov_SC06_030/ov_SC06_030_jr_80178D40.c | 4449 +++++++++++++++ src/ov_SC06_032/ov_SC06_032_jr_801734BC.c | 1511 ----- src/ov_SC06_032/ov_SC06_032_jr_80178D40.c | 4960 ++++++++++++++++ src/ov_SC06_033/ov_SC06_033_jr_801734BC.c | 1468 ----- src/ov_SC06_033/ov_SC06_033_jr_80178D40.c | 4917 ++++++++++++++++ src/ov_SC07_000/ov_SC07_000_jr_801734BC.c | 1201 ---- src/ov_SC07_000/ov_SC07_000_jr_80178D40.c | 4650 +++++++++++++++ src/ov_SC07_001/ov_SC07_001_jr_801734BC.c | 1028 ---- src/ov_SC07_001/ov_SC07_001_jr_80178D40.c | 4477 +++++++++++++++ src/ov_SC07_002/ov_SC07_002_jr_801734BC.c | 1383 ----- src/ov_SC07_002/ov_SC07_002_jr_80178D40.c | 4832 ++++++++++++++++ src/ov_SC07_008/ov_SC07_008_jr_801734BC.c | 811 --- src/ov_SC07_008/ov_SC07_008_jr_80178D40.c | 4259 ++++++++++++++ src/ov_SC07_009/ov_SC07_009_jr_801734BC.c | 945 ---- src/ov_SC07_009/ov_SC07_009_jr_80178D40.c | 4394 +++++++++++++++ tools/bank_exemplar.py | 76 + 399 files changed, 631751 insertions(+), 174696 deletions(-) create mode 100644 src/ov_SC01_001/ov_SC01_001_jr_80178D40.c create mode 100644 src/ov_SC01_004/ov_SC01_004_jr_80178D40.c create mode 100644 src/ov_SC01_005/ov_SC01_005_jr_80178D40.c create mode 100644 src/ov_SC01_006/ov_SC01_006_jr_80178D40.c create mode 100644 src/ov_SC01_008/ov_SC01_008_jr_80178D40.c create mode 100644 src/ov_SC01_009/ov_SC01_009_jr_80178D40.c create mode 100644 src/ov_SC01_074/ov_SC01_074_jr_80178D40.c create mode 100644 src/ov_SC01_080/ov_SC01_080_jr_80178D40.c create mode 100644 src/ov_SC01_084/ov_SC01_084_jr_80178D40.c create mode 100644 src/ov_SC02_000/ov_SC02_000_jr_80178D40.c create mode 100644 src/ov_SC02_003/ov_SC02_003_jr_80178D40.c create mode 100644 src/ov_SC02_004/ov_SC02_004_jr_80178D40.c create mode 100644 src/ov_SC02_005/ov_SC02_005_jr_80178D40.c create mode 100644 src/ov_SC02_011/ov_SC02_011_jr_80178D40.c create mode 100644 src/ov_SC02_015/ov_SC02_015_jr_80178D40.c create mode 100644 src/ov_SC02_016/ov_SC02_016_jr_80178D40.c create mode 100644 src/ov_SC02_017/ov_SC02_017_jr_80178D40.c create mode 100644 src/ov_SC02_021/ov_SC02_021_jr_80178D40.c create mode 100644 src/ov_SC02_026/ov_SC02_026_jr_80178D40.c create mode 100644 src/ov_SC02_027/ov_SC02_027_jr_80178D40.c create mode 100644 src/ov_SC02_028/ov_SC02_028_jr_80178D40.c create mode 100644 src/ov_SC02_031/ov_SC02_031_jr_80178D40.c create mode 100644 src/ov_SC02_035/ov_SC02_035_jr_80178D40.c create mode 100644 src/ov_SC02_039/ov_SC02_039_jr_80178D40.c create mode 100644 src/ov_SC02_041/ov_SC02_041_jr_80178D40.c create mode 100644 src/ov_SC03_001/ov_SC03_001_jr_80178D40.c create mode 100644 src/ov_SC03_002/ov_SC03_002_jr_80178D40.c create mode 100644 src/ov_SC03_003/ov_SC03_003_jr_80178D40.c create mode 100644 src/ov_SC03_006/ov_SC03_006_jr_80178D40.c create mode 100644 src/ov_SC03_007/ov_SC03_007_jr_80178D40.c create mode 100644 src/ov_SC03_010/ov_SC03_010_jr_80178D40.c create mode 100644 src/ov_SC03_011/ov_SC03_011_jr_80178D40.c create mode 100644 src/ov_SC03_012/ov_SC03_012_jr_80178D40.c create mode 100644 src/ov_SC03_013/ov_SC03_013_jr_80178D40.c create mode 100644 src/ov_SC03_014/ov_SC03_014_jr_80178D40.c create mode 100644 src/ov_SC03_015/ov_SC03_015_jr_80178D40.c create mode 100644 src/ov_SC03_023/ov_SC03_023_jr_80178D40.c create mode 100644 src/ov_SC03_024/ov_SC03_024_jr_80178D40.c create mode 100644 src/ov_SC03_028/ov_SC03_028_jr_80178D40.c create mode 100644 src/ov_SC03_029/ov_SC03_029_jr_80178D40.c create mode 100644 src/ov_SC03_030/ov_SC03_030_jr_80178D40.c create mode 100644 src/ov_SC03_031/ov_SC03_031_jr_80178D40.c create mode 100644 src/ov_SC03_089/ov_SC03_089_jr_80178D40.c create mode 100644 src/ov_SC03_090/ov_SC03_090_jr_80178D40.c create mode 100644 src/ov_SC03_091/ov_SC03_091_jr_80178D40.c create mode 100644 src/ov_SC03_092/ov_SC03_092_jr_80178D40.c create mode 100644 src/ov_SC03_093/ov_SC03_093_jr_80178D40.c create mode 100644 src/ov_SC03_094/ov_SC03_094_jr_80178D40.c create mode 100644 src/ov_SC03_095/ov_SC03_095_jr_80178D40.c create mode 100644 src/ov_SC03_096/ov_SC03_096_jr_80178D40.c create mode 100644 src/ov_SC03_097/ov_SC03_097_jr_80178D40.c create mode 100644 src/ov_SC03_098/ov_SC03_098_jr_80178D40.c create mode 100644 src/ov_SC03_099/ov_SC03_099_jr_80178D40.c create mode 100644 src/ov_SC03_100/ov_SC03_100_jr_80178D40.c create mode 100644 src/ov_SC03_101/ov_SC03_101_jr_80178D40.c create mode 100644 src/ov_SC03_102/ov_SC03_102_jr_80178D40.c create mode 100644 src/ov_SC03_103/ov_SC03_103_jr_80178D40.c create mode 100644 src/ov_SC03_104/ov_SC03_104_jr_80178D40.c create mode 100644 src/ov_SC03_105/ov_SC03_105_jr_80178D40.c create mode 100644 src/ov_SC03_108/ov_SC03_108_jr_80178D40.c create mode 100644 src/ov_SC03_109/ov_SC03_109_jr_80178D40.c create mode 100644 src/ov_SC03_110/ov_SC03_110_jr_80178D40.c create mode 100644 src/ov_SC03_111/ov_SC03_111_jr_80178D40.c create mode 100644 src/ov_SC03_112/ov_SC03_112_jr_80178D40.c create mode 100644 src/ov_SC03_113/ov_SC03_113_jr_80178D40.c create mode 100644 src/ov_SC03_114/ov_SC03_114_jr_80178D40.c create mode 100644 src/ov_SC03_115/ov_SC03_115_jr_80178D40.c create mode 100644 src/ov_SC03_116/ov_SC03_116_jr_80178D40.c create mode 100644 src/ov_SC03_117/ov_SC03_117_jr_80178D40.c create mode 100644 src/ov_SC03_118/ov_SC03_118_jr_80178D40.c create mode 100644 src/ov_SC03_119/ov_SC03_119_jr_80178D40.c create mode 100644 src/ov_SC03_121/ov_SC03_121_jr_80178D40.c create mode 100644 src/ov_SC03_124/ov_SC03_124_jr_80178D40.c create mode 100644 src/ov_SC03_125/ov_SC03_125_jr_80178D40.c create mode 100644 src/ov_SC03_126/ov_SC03_126_jr_80178D40.c create mode 100644 src/ov_SC04_000/ov_SC04_000_jr_80178D40.c create mode 100644 src/ov_SC04_002/ov_SC04_002_jr_80178D40.c create mode 100644 src/ov_SC04_003/ov_SC04_003_jr_80178D40.c create mode 100644 src/ov_SC04_004/ov_SC04_004_jr_80178D40.c create mode 100644 src/ov_SC04_005/ov_SC04_005_jr_80178D40.c create mode 100644 src/ov_SC04_006/ov_SC04_006_jr_80178D40.c create mode 100644 src/ov_SC04_007/ov_SC04_007_jr_80178D40.c create mode 100644 src/ov_SC04_008/ov_SC04_008_jr_80178D40.c create mode 100644 src/ov_SC04_009/ov_SC04_009_jr_80178D40.c create mode 100644 src/ov_SC04_010/ov_SC04_010_jr_80178D40.c create mode 100644 src/ov_SC04_011/ov_SC04_011_jr_80178D40.c create mode 100644 src/ov_SC04_012/ov_SC04_012_jr_80178D40.c create mode 100644 src/ov_SC04_015/ov_SC04_015_jr_80178D40.c create mode 100644 src/ov_SC04_016/ov_SC04_016_jr_80178D40.c create mode 100644 src/ov_SC04_018/ov_SC04_018_jr_80178D40.c create mode 100644 src/ov_SC04_019/ov_SC04_019_jr_80178D40.c create mode 100644 src/ov_SC04_020/ov_SC04_020_jr_80178D40.c create mode 100644 src/ov_SC04_021/ov_SC04_021_jr_80178D40.c create mode 100644 src/ov_SC05_000/ov_SC05_000_jr_80178D40.c create mode 100644 src/ov_SC05_001/ov_SC05_001_jr_80178D40.c create mode 100644 src/ov_SC05_002/ov_SC05_002_jr_80178D40.c create mode 100644 src/ov_SC05_003/ov_SC05_003_jr_80178D40.c create mode 100644 src/ov_SC05_004/ov_SC05_004_jr_80178D40.c create mode 100644 src/ov_SC05_005/ov_SC05_005_jr_80178D40.c create mode 100644 src/ov_SC05_006/ov_SC05_006_jr_80178D40.c create mode 100644 src/ov_SC05_007/ov_SC05_007_jr_80178D40.c create mode 100644 src/ov_SC05_008/ov_SC05_008_jr_80178D40.c create mode 100644 src/ov_SC05_009/ov_SC05_009_jr_80178D40.c create mode 100644 src/ov_SC05_010/ov_SC05_010_jr_80178D40.c create mode 100644 src/ov_SC05_011/ov_SC05_011_jr_80178D40.c create mode 100644 src/ov_SC05_017/ov_SC05_017_jr_80178D40.c create mode 100644 src/ov_SC05_018/ov_SC05_018_jr_80178D40.c create mode 100644 src/ov_SC05_019/ov_SC05_019_jr_80178D40.c create mode 100644 src/ov_SC06_000/ov_SC06_000_jr_80178D40.c create mode 100644 src/ov_SC06_006/ov_SC06_006_jr_80178D40.c create mode 100644 src/ov_SC06_008/ov_SC06_008_jr_80178D40.c create mode 100644 src/ov_SC06_010/ov_SC06_010_jr_80178D40.c create mode 100644 src/ov_SC06_011/ov_SC06_011_jr_80178D40.c create mode 100644 src/ov_SC06_013/ov_SC06_013_jr_80178D40.c create mode 100644 src/ov_SC06_014/ov_SC06_014_jr_80178D40.c create mode 100644 src/ov_SC06_015/ov_SC06_015_jr_80178D40.c create mode 100644 src/ov_SC06_016/ov_SC06_016_jr_80178D40.c create mode 100644 src/ov_SC06_018/ov_SC06_018_jr_80178D40.c create mode 100644 src/ov_SC06_020/ov_SC06_020_jr_80178D40.c create mode 100644 src/ov_SC06_022/ov_SC06_022_jr_80178D40.c create mode 100644 src/ov_SC06_024/ov_SC06_024_jr_80178D40.c create mode 100644 src/ov_SC06_025/ov_SC06_025_jr_80178D40.c create mode 100644 src/ov_SC06_027/ov_SC06_027_jr_80178D40.c create mode 100644 src/ov_SC06_029/ov_SC06_029_jr_80178D40.c create mode 100644 src/ov_SC06_030/ov_SC06_030_jr_80178D40.c create mode 100644 src/ov_SC06_032/ov_SC06_032_jr_80178D40.c create mode 100644 src/ov_SC06_033/ov_SC06_033_jr_80178D40.c create mode 100644 src/ov_SC07_000/ov_SC07_000_jr_80178D40.c create mode 100644 src/ov_SC07_001/ov_SC07_001_jr_80178D40.c create mode 100644 src/ov_SC07_002/ov_SC07_002_jr_80178D40.c create mode 100644 src/ov_SC07_008/ov_SC07_008_jr_80178D40.c create mode 100644 src/ov_SC07_009/ov_SC07_009_jr_80178D40.c create mode 100644 tools/bank_exemplar.py diff --git a/config/overlays.mk b/config/overlays.mk index e5c8db988..042999d4d 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -43,7 +43,7 @@ ov_SC01_005_ELF := $(ov_SC01_005_OUT).elf ov_SC01_005_MAPFILE := $(ov_SC01_005_OUT).map ov_SC01_005_LD_SCRIPT := $(ov_SC01_005_OUT).ld ov_SC01_005_SPLAT_YAML := config/splat.ov_SC01_005.yaml -ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005.o,tail2.data.o,ov_SC01_005_jr_8015AE2C.o,tail3.data.o,ov_SC01_005_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005.o,tail2.data.o,ov_SC01_005_jr_8015AE2C.o,tail3.data.o,ov_SC01_005_jr_801734BC.o,tail4.data.o,ov_SC01_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_005_CHECK_SHA := config/check.ov_SC01_005.sha ov_SC01_005_SYMBOLS := config/symbols.ov_SC01_005.txt ov_SC01_005_SIG := .run/sig.ov_SC01_005.jsonl @@ -65,7 +65,7 @@ ov_SC01_006_ELF := $(ov_SC01_006_OUT).elf ov_SC01_006_MAPFILE := $(ov_SC01_006_OUT).map ov_SC01_006_LD_SCRIPT := $(ov_SC01_006_OUT).ld ov_SC01_006_SPLAT_YAML := config/splat.ov_SC01_006.yaml -ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006.o,tail2.data.o,ov_SC01_006_jr_8015AE2C.o,tail3.data.o,ov_SC01_006_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006.o,tail2.data.o,ov_SC01_006_jr_8015AE2C.o,tail3.data.o,ov_SC01_006_jr_801734BC.o,tail4.data.o,ov_SC01_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_006_CHECK_SHA := config/check.ov_SC01_006.sha ov_SC01_006_SYMBOLS := config/symbols.ov_SC01_006.txt ov_SC01_006_SIG := .run/sig.ov_SC01_006.jsonl @@ -87,7 +87,7 @@ ov_SC03_001_ELF := $(ov_SC03_001_OUT).elf ov_SC03_001_MAPFILE := $(ov_SC03_001_OUT).map ov_SC03_001_LD_SCRIPT := $(ov_SC03_001_OUT).ld ov_SC03_001_SPLAT_YAML := config/splat.ov_SC03_001.yaml -ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,tail2.data.o,ov_SC03_001_jr_8015AE2C.o,tail3.data.o,ov_SC03_001_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,tail2.data.o,ov_SC03_001_jr_8015AE2C.o,tail3.data.o,ov_SC03_001_jr_801734BC.o,tail4.data.o,ov_SC03_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_001_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 @@ -131,7 +131,7 @@ ov_SC01_001_ELF := $(ov_SC01_001_OUT).elf ov_SC01_001_MAPFILE := $(ov_SC01_001_OUT).map ov_SC01_001_LD_SCRIPT := $(ov_SC01_001_OUT).ld ov_SC01_001_SPLAT_YAML := config/splat.ov_SC01_001.yaml -ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001.o,tail2.data.o,ov_SC01_001_jr_8015AE2C.o,tail3.data.o,ov_SC01_001_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001.o,tail2.data.o,ov_SC01_001_jr_8015AE2C.o,tail3.data.o,ov_SC01_001_jr_801734BC.o,tail4.data.o,ov_SC01_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_001_CHECK_SHA := config/check.ov_SC01_001.sha ov_SC01_001_SYMBOLS := config/symbols.ov_SC01_001.txt ov_SC01_001_SIG := .run/sig.ov_SC01_001.jsonl @@ -153,7 +153,7 @@ ov_SC02_000_ELF := $(ov_SC02_000_OUT).elf ov_SC02_000_MAPFILE := $(ov_SC02_000_OUT).map ov_SC02_000_LD_SCRIPT := $(ov_SC02_000_OUT).ld ov_SC02_000_SPLAT_YAML := config/splat.ov_SC02_000.yaml -ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,tail2.data.o,ov_SC02_000_jr_8015AE2C.o,tail3.data.o,ov_SC02_000_jr_801734BC.o,tail4.data.o,ov_SC02_000_jr_8017FCB0.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,tail2.data.o,ov_SC02_000_jr_8015AE2C.o,tail3.data.o,ov_SC02_000_jr_801734BC.o,tail4.data.o,ov_SC02_000_jr_80178D40.o,tail5.data.o,ov_SC02_000_jr_8017FCB0.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_000_CHECK_SHA := config/check.ov_SC02_000.sha ov_SC02_000_SYMBOLS := config/symbols.ov_SC02_000.txt ov_SC02_000_SIG := .run/sig.ov_SC02_000.jsonl @@ -175,7 +175,7 @@ ov_SC02_003_ELF := $(ov_SC02_003_OUT).elf ov_SC02_003_MAPFILE := $(ov_SC02_003_OUT).map ov_SC02_003_LD_SCRIPT := $(ov_SC02_003_OUT).ld ov_SC02_003_SPLAT_YAML := config/splat.ov_SC02_003.yaml -ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,tail2.data.o,ov_SC02_003_jr_8015AE2C.o,tail3.data.o,ov_SC02_003_jr_801734BC.o,tail4.data.o,ov_SC02_003_jr_8017FCB0.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,tail2.data.o,ov_SC02_003_jr_8015AE2C.o,tail3.data.o,ov_SC02_003_jr_801734BC.o,tail4.data.o,ov_SC02_003_jr_80178D40.o,tail5.data.o,ov_SC02_003_jr_8017FCB0.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_003_CHECK_SHA := config/check.ov_SC02_003.sha ov_SC02_003_SYMBOLS := config/symbols.ov_SC02_003.txt ov_SC02_003_SIG := .run/sig.ov_SC02_003.jsonl @@ -197,7 +197,7 @@ ov_SC03_002_ELF := $(ov_SC03_002_OUT).elf ov_SC03_002_MAPFILE := $(ov_SC03_002_OUT).map ov_SC03_002_LD_SCRIPT := $(ov_SC03_002_OUT).ld ov_SC03_002_SPLAT_YAML := config/splat.ov_SC03_002.yaml -ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,tail2.data.o,ov_SC03_002_jr_8015AE2C.o,tail3.data.o,ov_SC03_002_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,tail2.data.o,ov_SC03_002_jr_8015AE2C.o,tail3.data.o,ov_SC03_002_jr_801734BC.o,tail4.data.o,ov_SC03_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_002_CHECK_SHA := config/check.ov_SC03_002.sha ov_SC03_002_SYMBOLS := config/symbols.ov_SC03_002.txt ov_SC03_002_SIG := .run/sig.ov_SC03_002.jsonl @@ -219,7 +219,7 @@ ov_SC03_006_ELF := $(ov_SC03_006_OUT).elf ov_SC03_006_MAPFILE := $(ov_SC03_006_OUT).map ov_SC03_006_LD_SCRIPT := $(ov_SC03_006_OUT).ld ov_SC03_006_SPLAT_YAML := config/splat.ov_SC03_006.yaml -ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006.o,tail2.data.o,ov_SC03_006_jr_8015AE2C.o,tail3.data.o,ov_SC03_006_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006.o,tail2.data.o,ov_SC03_006_jr_8015AE2C.o,tail3.data.o,ov_SC03_006_jr_801734BC.o,tail4.data.o,ov_SC03_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_006_CHECK_SHA := config/check.ov_SC03_006.sha ov_SC03_006_SYMBOLS := config/symbols.ov_SC03_006.txt ov_SC03_006_SIG := .run/sig.ov_SC03_006.jsonl @@ -241,7 +241,7 @@ ov_SC04_000_ELF := $(ov_SC04_000_OUT).elf ov_SC04_000_MAPFILE := $(ov_SC04_000_OUT).map ov_SC04_000_LD_SCRIPT := $(ov_SC04_000_OUT).ld ov_SC04_000_SPLAT_YAML := config/splat.ov_SC04_000.yaml -ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000.o,tail2.data.o,ov_SC04_000_jr_8015AE2C.o,tail3.data.o,ov_SC04_000_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000.o,tail2.data.o,ov_SC04_000_jr_8015AE2C.o,tail3.data.o,ov_SC04_000_jr_801734BC.o,tail4.data.o,ov_SC04_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_000_CHECK_SHA := config/check.ov_SC04_000.sha ov_SC04_000_SYMBOLS := config/symbols.ov_SC04_000.txt ov_SC04_000_SIG := .run/sig.ov_SC04_000.jsonl @@ -263,7 +263,7 @@ ov_SC04_018_ELF := $(ov_SC04_018_OUT).elf ov_SC04_018_MAPFILE := $(ov_SC04_018_OUT).map ov_SC04_018_LD_SCRIPT := $(ov_SC04_018_OUT).ld ov_SC04_018_SPLAT_YAML := config/splat.ov_SC04_018.yaml -ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,tail2.data.o,ov_SC04_018_jr_8015AE2C.o,tail3.data.o,ov_SC04_018_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,tail2.data.o,ov_SC04_018_jr_8015AE2C.o,tail3.data.o,ov_SC04_018_jr_801734BC.o,tail4.data.o,ov_SC04_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_018_CHECK_SHA := config/check.ov_SC04_018.sha ov_SC04_018_SYMBOLS := config/symbols.ov_SC04_018.txt ov_SC04_018_SIG := .run/sig.ov_SC04_018.jsonl @@ -285,7 +285,7 @@ ov_SC04_019_ELF := $(ov_SC04_019_OUT).elf ov_SC04_019_MAPFILE := $(ov_SC04_019_OUT).map ov_SC04_019_LD_SCRIPT := $(ov_SC04_019_OUT).ld ov_SC04_019_SPLAT_YAML := config/splat.ov_SC04_019.yaml -ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,tail2.data.o,ov_SC04_019_jr_8015AE2C.o,tail3.data.o,ov_SC04_019_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,tail2.data.o,ov_SC04_019_jr_8015AE2C.o,tail3.data.o,ov_SC04_019_jr_801734BC.o,tail4.data.o,ov_SC04_019_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_019_CHECK_SHA := config/check.ov_SC04_019.sha ov_SC04_019_SYMBOLS := config/symbols.ov_SC04_019.txt ov_SC04_019_SIG := .run/sig.ov_SC04_019.jsonl @@ -307,7 +307,7 @@ ov_SC05_000_ELF := $(ov_SC05_000_OUT).elf ov_SC05_000_MAPFILE := $(ov_SC05_000_OUT).map ov_SC05_000_LD_SCRIPT := $(ov_SC05_000_OUT).ld ov_SC05_000_SPLAT_YAML := config/splat.ov_SC05_000.yaml -ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000.o,tail2.data.o,ov_SC05_000_jr_8015AE2C.o,tail3.data.o,ov_SC05_000_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000.o,tail2.data.o,ov_SC05_000_jr_8015AE2C.o,tail3.data.o,ov_SC05_000_jr_801734BC.o,tail4.data.o,ov_SC05_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_000_CHECK_SHA := config/check.ov_SC05_000.sha ov_SC05_000_SYMBOLS := config/symbols.ov_SC05_000.txt ov_SC05_000_SIG := .run/sig.ov_SC05_000.jsonl @@ -329,7 +329,7 @@ ov_SC06_000_ELF := $(ov_SC06_000_OUT).elf ov_SC06_000_MAPFILE := $(ov_SC06_000_OUT).map ov_SC06_000_LD_SCRIPT := $(ov_SC06_000_OUT).ld ov_SC06_000_SPLAT_YAML := config/splat.ov_SC06_000.yaml -ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000.o,tail2.data.o,ov_SC06_000_jr_8015AE2C.o,tail3.data.o,ov_SC06_000_jr_801734BC.o,tail4.data.o,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_jr_8015AE2C.o,tail3.data.o,ov_SC06_000_jr_801734BC.o,tail4.data.o,ov_SC06_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_000_CHECK_SHA := config/check.ov_SC06_000.sha ov_SC06_000_SYMBOLS := config/symbols.ov_SC06_000.txt ov_SC06_000_SIG := .run/sig.ov_SC06_000.jsonl @@ -351,7 +351,7 @@ ov_SC07_000_ELF := $(ov_SC07_000_OUT).elf ov_SC07_000_MAPFILE := $(ov_SC07_000_OUT).map ov_SC07_000_LD_SCRIPT := $(ov_SC07_000_OUT).ld ov_SC07_000_SPLAT_YAML := config/splat.ov_SC07_000.yaml -ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000.o,tail2.data.o,ov_SC07_000_jr_8015AE2C.o,tail3.data.o,ov_SC07_000_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000.o,tail2.data.o,ov_SC07_000_jr_8015AE2C.o,tail3.data.o,ov_SC07_000_jr_801734BC.o,tail4.data.o,ov_SC07_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_000_CHECK_SHA := config/check.ov_SC07_000.sha ov_SC07_000_SYMBOLS := config/symbols.ov_SC07_000.txt ov_SC07_000_SIG := .run/sig.ov_SC07_000.jsonl @@ -373,7 +373,7 @@ ov_SC01_004_ELF := $(ov_SC01_004_OUT).elf ov_SC01_004_MAPFILE := $(ov_SC01_004_OUT).map ov_SC01_004_LD_SCRIPT := $(ov_SC01_004_OUT).ld ov_SC01_004_SPLAT_YAML := config/splat.ov_SC01_004.yaml -ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004.o,tail2.data.o,ov_SC01_004_jr_8015AE2C.o,tail3.data.o,ov_SC01_004_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004.o,tail2.data.o,ov_SC01_004_jr_8015AE2C.o,tail3.data.o,ov_SC01_004_jr_801734BC.o,tail4.data.o,ov_SC01_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_004_CHECK_SHA := config/check.ov_SC01_004.sha ov_SC01_004_SYMBOLS := config/symbols.ov_SC01_004.txt ov_SC01_004_SIG := .run/sig.ov_SC01_004.jsonl @@ -395,7 +395,7 @@ ov_SC01_008_ELF := $(ov_SC01_008_OUT).elf ov_SC01_008_MAPFILE := $(ov_SC01_008_OUT).map ov_SC01_008_LD_SCRIPT := $(ov_SC01_008_OUT).ld ov_SC01_008_SPLAT_YAML := config/splat.ov_SC01_008.yaml -ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008.o,tail2.data.o,ov_SC01_008_jr_8015AE2C.o,tail3.data.o,ov_SC01_008_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008.o,tail2.data.o,ov_SC01_008_jr_8015AE2C.o,tail3.data.o,ov_SC01_008_jr_801734BC.o,tail4.data.o,ov_SC01_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_008_CHECK_SHA := config/check.ov_SC01_008.sha ov_SC01_008_SYMBOLS := config/symbols.ov_SC01_008.txt ov_SC01_008_SIG := .run/sig.ov_SC01_008.jsonl @@ -417,7 +417,7 @@ ov_SC01_009_ELF := $(ov_SC01_009_OUT).elf ov_SC01_009_MAPFILE := $(ov_SC01_009_OUT).map ov_SC01_009_LD_SCRIPT := $(ov_SC01_009_OUT).ld ov_SC01_009_SPLAT_YAML := config/splat.ov_SC01_009.yaml -ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,tail2.data.o,ov_SC01_009_jr_8015AE2C.o,tail3.data.o,ov_SC01_009_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,tail2.data.o,ov_SC01_009_jr_8015AE2C.o,tail3.data.o,ov_SC01_009_jr_801734BC.o,tail4.data.o,ov_SC01_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_009_CHECK_SHA := config/check.ov_SC01_009.sha ov_SC01_009_SYMBOLS := config/symbols.ov_SC01_009.txt ov_SC01_009_SIG := .run/sig.ov_SC01_009.jsonl @@ -439,7 +439,7 @@ ov_SC01_074_ELF := $(ov_SC01_074_OUT).elf ov_SC01_074_MAPFILE := $(ov_SC01_074_OUT).map ov_SC01_074_LD_SCRIPT := $(ov_SC01_074_OUT).ld ov_SC01_074_SPLAT_YAML := config/splat.ov_SC01_074.yaml -ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074.o,tail2.data.o,ov_SC01_074_jr_8015AE2C.o,tail3.data.o,ov_SC01_074_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074.o,tail2.data.o,ov_SC01_074_jr_8015AE2C.o,tail3.data.o,ov_SC01_074_jr_801734BC.o,tail4.data.o,ov_SC01_074_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_074_CHECK_SHA := config/check.ov_SC01_074.sha ov_SC01_074_SYMBOLS := config/symbols.ov_SC01_074.txt ov_SC01_074_SIG := .run/sig.ov_SC01_074.jsonl @@ -461,7 +461,7 @@ ov_SC01_080_ELF := $(ov_SC01_080_OUT).elf ov_SC01_080_MAPFILE := $(ov_SC01_080_OUT).map ov_SC01_080_LD_SCRIPT := $(ov_SC01_080_OUT).ld ov_SC01_080_SPLAT_YAML := config/splat.ov_SC01_080.yaml -ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080.o,tail2.data.o,ov_SC01_080_jr_8015AE2C.o,tail3.data.o,ov_SC01_080_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080.o,tail2.data.o,ov_SC01_080_jr_8015AE2C.o,tail3.data.o,ov_SC01_080_jr_801734BC.o,tail4.data.o,ov_SC01_080_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_080_CHECK_SHA := config/check.ov_SC01_080.sha ov_SC01_080_SYMBOLS := config/symbols.ov_SC01_080.txt ov_SC01_080_SIG := .run/sig.ov_SC01_080.jsonl @@ -483,7 +483,7 @@ ov_SC01_084_ELF := $(ov_SC01_084_OUT).elf ov_SC01_084_MAPFILE := $(ov_SC01_084_OUT).map ov_SC01_084_LD_SCRIPT := $(ov_SC01_084_OUT).ld ov_SC01_084_SPLAT_YAML := config/splat.ov_SC01_084.yaml -ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084.o,tail2.data.o,ov_SC01_084_jr_8015AE2C.o,tail3.data.o,ov_SC01_084_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084.o,tail2.data.o,ov_SC01_084_jr_8015AE2C.o,tail3.data.o,ov_SC01_084_jr_801734BC.o,tail4.data.o,ov_SC01_084_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_084_CHECK_SHA := config/check.ov_SC01_084.sha ov_SC01_084_SYMBOLS := config/symbols.ov_SC01_084.txt ov_SC01_084_SIG := .run/sig.ov_SC01_084.jsonl @@ -505,7 +505,7 @@ ov_SC02_004_ELF := $(ov_SC02_004_OUT).elf ov_SC02_004_MAPFILE := $(ov_SC02_004_OUT).map ov_SC02_004_LD_SCRIPT := $(ov_SC02_004_OUT).ld ov_SC02_004_SPLAT_YAML := config/splat.ov_SC02_004.yaml -ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004.o,tail2.data.o,ov_SC02_004_jr_8015AE2C.o,tail3.data.o,ov_SC02_004_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004.o,tail2.data.o,ov_SC02_004_jr_8015AE2C.o,tail3.data.o,ov_SC02_004_jr_801734BC.o,tail4.data.o,ov_SC02_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_004_CHECK_SHA := config/check.ov_SC02_004.sha ov_SC02_004_SYMBOLS := config/symbols.ov_SC02_004.txt ov_SC02_004_SIG := .run/sig.ov_SC02_004.jsonl @@ -527,7 +527,7 @@ ov_SC02_005_ELF := $(ov_SC02_005_OUT).elf ov_SC02_005_MAPFILE := $(ov_SC02_005_OUT).map ov_SC02_005_LD_SCRIPT := $(ov_SC02_005_OUT).ld ov_SC02_005_SPLAT_YAML := config/splat.ov_SC02_005.yaml -ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005.o,tail2.data.o,ov_SC02_005_jr_8015AE2C.o,tail3.data.o,ov_SC02_005_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005.o,tail2.data.o,ov_SC02_005_jr_8015AE2C.o,tail3.data.o,ov_SC02_005_jr_801734BC.o,tail4.data.o,ov_SC02_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_005_CHECK_SHA := config/check.ov_SC02_005.sha ov_SC02_005_SYMBOLS := config/symbols.ov_SC02_005.txt ov_SC02_005_SIG := .run/sig.ov_SC02_005.jsonl @@ -549,7 +549,7 @@ ov_SC02_011_ELF := $(ov_SC02_011_OUT).elf ov_SC02_011_MAPFILE := $(ov_SC02_011_OUT).map ov_SC02_011_LD_SCRIPT := $(ov_SC02_011_OUT).ld ov_SC02_011_SPLAT_YAML := config/splat.ov_SC02_011.yaml -ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011.o,tail2.data.o,ov_SC02_011_jr_8015AE2C.o,tail3.data.o,ov_SC02_011_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011.o,tail2.data.o,ov_SC02_011_jr_8015AE2C.o,tail3.data.o,ov_SC02_011_jr_801734BC.o,tail4.data.o,ov_SC02_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_011_CHECK_SHA := config/check.ov_SC02_011.sha ov_SC02_011_SYMBOLS := config/symbols.ov_SC02_011.txt ov_SC02_011_SIG := .run/sig.ov_SC02_011.jsonl @@ -571,7 +571,7 @@ ov_SC02_015_ELF := $(ov_SC02_015_OUT).elf ov_SC02_015_MAPFILE := $(ov_SC02_015_OUT).map ov_SC02_015_LD_SCRIPT := $(ov_SC02_015_OUT).ld ov_SC02_015_SPLAT_YAML := config/splat.ov_SC02_015.yaml -ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015.o,tail2.data.o,ov_SC02_015_jr_8015AE2C.o,tail3.data.o,ov_SC02_015_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015.o,tail2.data.o,ov_SC02_015_jr_8015AE2C.o,tail3.data.o,ov_SC02_015_jr_801734BC.o,tail4.data.o,ov_SC02_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_015_CHECK_SHA := config/check.ov_SC02_015.sha ov_SC02_015_SYMBOLS := config/symbols.ov_SC02_015.txt ov_SC02_015_SIG := .run/sig.ov_SC02_015.jsonl @@ -593,7 +593,7 @@ ov_SC02_016_ELF := $(ov_SC02_016_OUT).elf ov_SC02_016_MAPFILE := $(ov_SC02_016_OUT).map ov_SC02_016_LD_SCRIPT := $(ov_SC02_016_OUT).ld ov_SC02_016_SPLAT_YAML := config/splat.ov_SC02_016.yaml -ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016.o,tail2.data.o,ov_SC02_016_jr_8015AE2C.o,tail3.data.o,ov_SC02_016_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016.o,tail2.data.o,ov_SC02_016_jr_8015AE2C.o,tail3.data.o,ov_SC02_016_jr_801734BC.o,tail4.data.o,ov_SC02_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_016_CHECK_SHA := config/check.ov_SC02_016.sha ov_SC02_016_SYMBOLS := config/symbols.ov_SC02_016.txt ov_SC02_016_SIG := .run/sig.ov_SC02_016.jsonl @@ -615,7 +615,7 @@ ov_SC02_017_ELF := $(ov_SC02_017_OUT).elf ov_SC02_017_MAPFILE := $(ov_SC02_017_OUT).map ov_SC02_017_LD_SCRIPT := $(ov_SC02_017_OUT).ld ov_SC02_017_SPLAT_YAML := config/splat.ov_SC02_017.yaml -ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017.o,tail2.data.o,ov_SC02_017_jr_8015AE2C.o,tail3.data.o,ov_SC02_017_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017.o,tail2.data.o,ov_SC02_017_jr_8015AE2C.o,tail3.data.o,ov_SC02_017_jr_801734BC.o,tail4.data.o,ov_SC02_017_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_017_CHECK_SHA := config/check.ov_SC02_017.sha ov_SC02_017_SYMBOLS := config/symbols.ov_SC02_017.txt ov_SC02_017_SIG := .run/sig.ov_SC02_017.jsonl @@ -637,7 +637,7 @@ ov_SC02_021_ELF := $(ov_SC02_021_OUT).elf ov_SC02_021_MAPFILE := $(ov_SC02_021_OUT).map ov_SC02_021_LD_SCRIPT := $(ov_SC02_021_OUT).ld ov_SC02_021_SPLAT_YAML := config/splat.ov_SC02_021.yaml -ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021.o,tail2.data.o,ov_SC02_021_jr_8015AE2C.o,tail3.data.o,ov_SC02_021_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021.o,tail2.data.o,ov_SC02_021_jr_8015AE2C.o,tail3.data.o,ov_SC02_021_jr_801734BC.o,tail4.data.o,ov_SC02_021_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_021_CHECK_SHA := config/check.ov_SC02_021.sha ov_SC02_021_SYMBOLS := config/symbols.ov_SC02_021.txt ov_SC02_021_SIG := .run/sig.ov_SC02_021.jsonl @@ -659,7 +659,7 @@ ov_SC02_026_ELF := $(ov_SC02_026_OUT).elf ov_SC02_026_MAPFILE := $(ov_SC02_026_OUT).map ov_SC02_026_LD_SCRIPT := $(ov_SC02_026_OUT).ld ov_SC02_026_SPLAT_YAML := config/splat.ov_SC02_026.yaml -ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026.o,tail2.data.o,ov_SC02_026_jr_8015AE2C.o,tail3.data.o,ov_SC02_026_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026.o,tail2.data.o,ov_SC02_026_jr_8015AE2C.o,tail3.data.o,ov_SC02_026_jr_801734BC.o,tail4.data.o,ov_SC02_026_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_026_CHECK_SHA := config/check.ov_SC02_026.sha ov_SC02_026_SYMBOLS := config/symbols.ov_SC02_026.txt ov_SC02_026_SIG := .run/sig.ov_SC02_026.jsonl @@ -681,7 +681,7 @@ ov_SC02_027_ELF := $(ov_SC02_027_OUT).elf ov_SC02_027_MAPFILE := $(ov_SC02_027_OUT).map ov_SC02_027_LD_SCRIPT := $(ov_SC02_027_OUT).ld ov_SC02_027_SPLAT_YAML := config/splat.ov_SC02_027.yaml -ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027.o,tail2.data.o,ov_SC02_027_jr_8015AE2C.o,tail3.data.o,ov_SC02_027_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027.o,tail2.data.o,ov_SC02_027_jr_8015AE2C.o,tail3.data.o,ov_SC02_027_jr_801734BC.o,tail4.data.o,ov_SC02_027_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_027_CHECK_SHA := config/check.ov_SC02_027.sha ov_SC02_027_SYMBOLS := config/symbols.ov_SC02_027.txt ov_SC02_027_SIG := .run/sig.ov_SC02_027.jsonl @@ -703,7 +703,7 @@ ov_SC02_028_ELF := $(ov_SC02_028_OUT).elf ov_SC02_028_MAPFILE := $(ov_SC02_028_OUT).map ov_SC02_028_LD_SCRIPT := $(ov_SC02_028_OUT).ld ov_SC02_028_SPLAT_YAML := config/splat.ov_SC02_028.yaml -ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028.o,tail2.data.o,ov_SC02_028_jr_8015AE2C.o,tail3.data.o,ov_SC02_028_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028.o,tail2.data.o,ov_SC02_028_jr_8015AE2C.o,tail3.data.o,ov_SC02_028_jr_801734BC.o,tail4.data.o,ov_SC02_028_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_028_CHECK_SHA := config/check.ov_SC02_028.sha ov_SC02_028_SYMBOLS := config/symbols.ov_SC02_028.txt ov_SC02_028_SIG := .run/sig.ov_SC02_028.jsonl @@ -725,7 +725,7 @@ ov_SC02_031_ELF := $(ov_SC02_031_OUT).elf ov_SC02_031_MAPFILE := $(ov_SC02_031_OUT).map ov_SC02_031_LD_SCRIPT := $(ov_SC02_031_OUT).ld ov_SC02_031_SPLAT_YAML := config/splat.ov_SC02_031.yaml -ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031.o,tail2.data.o,ov_SC02_031_jr_8015AE2C.o,tail3.data.o,ov_SC02_031_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031.o,tail2.data.o,ov_SC02_031_jr_8015AE2C.o,tail3.data.o,ov_SC02_031_jr_801734BC.o,tail4.data.o,ov_SC02_031_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_031_CHECK_SHA := config/check.ov_SC02_031.sha ov_SC02_031_SYMBOLS := config/symbols.ov_SC02_031.txt ov_SC02_031_SIG := .run/sig.ov_SC02_031.jsonl @@ -747,7 +747,7 @@ ov_SC02_035_ELF := $(ov_SC02_035_OUT).elf ov_SC02_035_MAPFILE := $(ov_SC02_035_OUT).map ov_SC02_035_LD_SCRIPT := $(ov_SC02_035_OUT).ld ov_SC02_035_SPLAT_YAML := config/splat.ov_SC02_035.yaml -ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035.o,tail2.data.o,ov_SC02_035_jr_8015AE2C.o,tail3.data.o,ov_SC02_035_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035.o,tail2.data.o,ov_SC02_035_jr_8015AE2C.o,tail3.data.o,ov_SC02_035_jr_801734BC.o,tail4.data.o,ov_SC02_035_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_035_CHECK_SHA := config/check.ov_SC02_035.sha ov_SC02_035_SYMBOLS := config/symbols.ov_SC02_035.txt ov_SC02_035_SIG := .run/sig.ov_SC02_035.jsonl @@ -769,7 +769,7 @@ ov_SC02_039_ELF := $(ov_SC02_039_OUT).elf ov_SC02_039_MAPFILE := $(ov_SC02_039_OUT).map ov_SC02_039_LD_SCRIPT := $(ov_SC02_039_OUT).ld ov_SC02_039_SPLAT_YAML := config/splat.ov_SC02_039.yaml -ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039.o,tail2.data.o,ov_SC02_039_jr_8015AE2C.o,tail3.data.o,ov_SC02_039_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039.o,tail2.data.o,ov_SC02_039_jr_8015AE2C.o,tail3.data.o,ov_SC02_039_jr_801734BC.o,tail4.data.o,ov_SC02_039_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_039_CHECK_SHA := config/check.ov_SC02_039.sha ov_SC02_039_SYMBOLS := config/symbols.ov_SC02_039.txt ov_SC02_039_SIG := .run/sig.ov_SC02_039.jsonl @@ -791,7 +791,7 @@ ov_SC02_041_ELF := $(ov_SC02_041_OUT).elf ov_SC02_041_MAPFILE := $(ov_SC02_041_OUT).map ov_SC02_041_LD_SCRIPT := $(ov_SC02_041_OUT).ld ov_SC02_041_SPLAT_YAML := config/splat.ov_SC02_041.yaml -ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041.o,tail2.data.o,ov_SC02_041_jr_8015AE2C.o,tail3.data.o,ov_SC02_041_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041.o,tail2.data.o,ov_SC02_041_jr_8015AE2C.o,tail3.data.o,ov_SC02_041_jr_801734BC.o,tail4.data.o,ov_SC02_041_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_041_CHECK_SHA := config/check.ov_SC02_041.sha ov_SC02_041_SYMBOLS := config/symbols.ov_SC02_041.txt ov_SC02_041_SIG := .run/sig.ov_SC02_041.jsonl @@ -813,7 +813,7 @@ ov_SC03_003_ELF := $(ov_SC03_003_OUT).elf ov_SC03_003_MAPFILE := $(ov_SC03_003_OUT).map ov_SC03_003_LD_SCRIPT := $(ov_SC03_003_OUT).ld ov_SC03_003_SPLAT_YAML := config/splat.ov_SC03_003.yaml -ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003.o,tail2.data.o,ov_SC03_003_jr_8015AE2C.o,tail3.data.o,ov_SC03_003_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003.o,tail2.data.o,ov_SC03_003_jr_8015AE2C.o,tail3.data.o,ov_SC03_003_jr_801734BC.o,tail4.data.o,ov_SC03_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_003_CHECK_SHA := config/check.ov_SC03_003.sha ov_SC03_003_SYMBOLS := config/symbols.ov_SC03_003.txt ov_SC03_003_SIG := .run/sig.ov_SC03_003.jsonl @@ -835,7 +835,7 @@ ov_SC03_007_ELF := $(ov_SC03_007_OUT).elf ov_SC03_007_MAPFILE := $(ov_SC03_007_OUT).map ov_SC03_007_LD_SCRIPT := $(ov_SC03_007_OUT).ld ov_SC03_007_SPLAT_YAML := config/splat.ov_SC03_007.yaml -ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007.o,tail2.data.o,ov_SC03_007_jr_8015AE2C.o,tail3.data.o,ov_SC03_007_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007.o,tail2.data.o,ov_SC03_007_jr_8015AE2C.o,tail3.data.o,ov_SC03_007_jr_801734BC.o,tail4.data.o,ov_SC03_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_007_CHECK_SHA := config/check.ov_SC03_007.sha ov_SC03_007_SYMBOLS := config/symbols.ov_SC03_007.txt ov_SC03_007_SIG := .run/sig.ov_SC03_007.jsonl @@ -857,7 +857,7 @@ ov_SC03_010_ELF := $(ov_SC03_010_OUT).elf ov_SC03_010_MAPFILE := $(ov_SC03_010_OUT).map ov_SC03_010_LD_SCRIPT := $(ov_SC03_010_OUT).ld ov_SC03_010_SPLAT_YAML := config/splat.ov_SC03_010.yaml -ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010.o,tail2.data.o,ov_SC03_010_jr_8015AE2C.o,tail3.data.o,ov_SC03_010_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010.o,tail2.data.o,ov_SC03_010_jr_8015AE2C.o,tail3.data.o,ov_SC03_010_jr_801734BC.o,tail4.data.o,ov_SC03_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_010_CHECK_SHA := config/check.ov_SC03_010.sha ov_SC03_010_SYMBOLS := config/symbols.ov_SC03_010.txt ov_SC03_010_SIG := .run/sig.ov_SC03_010.jsonl @@ -879,7 +879,7 @@ ov_SC03_011_ELF := $(ov_SC03_011_OUT).elf ov_SC03_011_MAPFILE := $(ov_SC03_011_OUT).map ov_SC03_011_LD_SCRIPT := $(ov_SC03_011_OUT).ld ov_SC03_011_SPLAT_YAML := config/splat.ov_SC03_011.yaml -ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011.o,tail2.data.o,ov_SC03_011_jr_8015AE2C.o,tail3.data.o,ov_SC03_011_jr_801734BC.o,tail4.data.o,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_jr_8015AE2C.o,tail3.data.o,ov_SC03_011_jr_801734BC.o,tail4.data.o,ov_SC03_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_011_CHECK_SHA := config/check.ov_SC03_011.sha ov_SC03_011_SYMBOLS := config/symbols.ov_SC03_011.txt ov_SC03_011_SIG := .run/sig.ov_SC03_011.jsonl @@ -901,7 +901,7 @@ ov_SC03_012_ELF := $(ov_SC03_012_OUT).elf ov_SC03_012_MAPFILE := $(ov_SC03_012_OUT).map ov_SC03_012_LD_SCRIPT := $(ov_SC03_012_OUT).ld ov_SC03_012_SPLAT_YAML := config/splat.ov_SC03_012.yaml -ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012.o,tail2.data.o,ov_SC03_012_jr_8015AE2C.o,tail3.data.o,ov_SC03_012_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012.o,tail2.data.o,ov_SC03_012_jr_8015AE2C.o,tail3.data.o,ov_SC03_012_jr_801734BC.o,tail4.data.o,ov_SC03_012_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_012_CHECK_SHA := config/check.ov_SC03_012.sha ov_SC03_012_SYMBOLS := config/symbols.ov_SC03_012.txt ov_SC03_012_SIG := .run/sig.ov_SC03_012.jsonl @@ -923,7 +923,7 @@ ov_SC03_013_ELF := $(ov_SC03_013_OUT).elf ov_SC03_013_MAPFILE := $(ov_SC03_013_OUT).map ov_SC03_013_LD_SCRIPT := $(ov_SC03_013_OUT).ld ov_SC03_013_SPLAT_YAML := config/splat.ov_SC03_013.yaml -ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013.o,tail2.data.o,ov_SC03_013_jr_8015AE2C.o,tail3.data.o,ov_SC03_013_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013.o,tail2.data.o,ov_SC03_013_jr_8015AE2C.o,tail3.data.o,ov_SC03_013_jr_801734BC.o,tail4.data.o,ov_SC03_013_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_013_CHECK_SHA := config/check.ov_SC03_013.sha ov_SC03_013_SYMBOLS := config/symbols.ov_SC03_013.txt ov_SC03_013_SIG := .run/sig.ov_SC03_013.jsonl @@ -945,7 +945,7 @@ ov_SC03_014_ELF := $(ov_SC03_014_OUT).elf ov_SC03_014_MAPFILE := $(ov_SC03_014_OUT).map ov_SC03_014_LD_SCRIPT := $(ov_SC03_014_OUT).ld ov_SC03_014_SPLAT_YAML := config/splat.ov_SC03_014.yaml -ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014.o,tail2.data.o,ov_SC03_014_jr_8015AE2C.o,tail3.data.o,ov_SC03_014_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014.o,tail2.data.o,ov_SC03_014_jr_8015AE2C.o,tail3.data.o,ov_SC03_014_jr_801734BC.o,tail4.data.o,ov_SC03_014_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_014_CHECK_SHA := config/check.ov_SC03_014.sha ov_SC03_014_SYMBOLS := config/symbols.ov_SC03_014.txt ov_SC03_014_SIG := .run/sig.ov_SC03_014.jsonl @@ -967,7 +967,7 @@ ov_SC03_015_ELF := $(ov_SC03_015_OUT).elf ov_SC03_015_MAPFILE := $(ov_SC03_015_OUT).map ov_SC03_015_LD_SCRIPT := $(ov_SC03_015_OUT).ld ov_SC03_015_SPLAT_YAML := config/splat.ov_SC03_015.yaml -ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015.o,tail2.data.o,ov_SC03_015_jr_8015AE2C.o,tail3.data.o,ov_SC03_015_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015.o,tail2.data.o,ov_SC03_015_jr_8015AE2C.o,tail3.data.o,ov_SC03_015_jr_801734BC.o,tail4.data.o,ov_SC03_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_015_CHECK_SHA := config/check.ov_SC03_015.sha ov_SC03_015_SYMBOLS := config/symbols.ov_SC03_015.txt ov_SC03_015_SIG := .run/sig.ov_SC03_015.jsonl @@ -989,7 +989,7 @@ ov_SC03_023_ELF := $(ov_SC03_023_OUT).elf ov_SC03_023_MAPFILE := $(ov_SC03_023_OUT).map ov_SC03_023_LD_SCRIPT := $(ov_SC03_023_OUT).ld ov_SC03_023_SPLAT_YAML := config/splat.ov_SC03_023.yaml -ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023.o,tail2.data.o,ov_SC03_023_jr_8015AE2C.o,tail3.data.o,ov_SC03_023_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023.o,tail2.data.o,ov_SC03_023_jr_8015AE2C.o,tail3.data.o,ov_SC03_023_jr_801734BC.o,tail4.data.o,ov_SC03_023_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_023_CHECK_SHA := config/check.ov_SC03_023.sha ov_SC03_023_SYMBOLS := config/symbols.ov_SC03_023.txt ov_SC03_023_SIG := .run/sig.ov_SC03_023.jsonl @@ -1011,7 +1011,7 @@ ov_SC03_024_ELF := $(ov_SC03_024_OUT).elf ov_SC03_024_MAPFILE := $(ov_SC03_024_OUT).map ov_SC03_024_LD_SCRIPT := $(ov_SC03_024_OUT).ld ov_SC03_024_SPLAT_YAML := config/splat.ov_SC03_024.yaml -ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024.o,tail2.data.o,ov_SC03_024_jr_8015AE2C.o,tail3.data.o,ov_SC03_024_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024.o,tail2.data.o,ov_SC03_024_jr_8015AE2C.o,tail3.data.o,ov_SC03_024_jr_801734BC.o,tail4.data.o,ov_SC03_024_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_024_CHECK_SHA := config/check.ov_SC03_024.sha ov_SC03_024_SYMBOLS := config/symbols.ov_SC03_024.txt ov_SC03_024_SIG := .run/sig.ov_SC03_024.jsonl @@ -1033,7 +1033,7 @@ ov_SC03_028_ELF := $(ov_SC03_028_OUT).elf ov_SC03_028_MAPFILE := $(ov_SC03_028_OUT).map ov_SC03_028_LD_SCRIPT := $(ov_SC03_028_OUT).ld ov_SC03_028_SPLAT_YAML := config/splat.ov_SC03_028.yaml -ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028.o,tail2.data.o,ov_SC03_028_jr_8015AE2C.o,tail3.data.o,ov_SC03_028_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028.o,tail2.data.o,ov_SC03_028_jr_8015AE2C.o,tail3.data.o,ov_SC03_028_jr_801734BC.o,tail4.data.o,ov_SC03_028_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_028_CHECK_SHA := config/check.ov_SC03_028.sha ov_SC03_028_SYMBOLS := config/symbols.ov_SC03_028.txt ov_SC03_028_SIG := .run/sig.ov_SC03_028.jsonl @@ -1055,7 +1055,7 @@ ov_SC03_029_ELF := $(ov_SC03_029_OUT).elf ov_SC03_029_MAPFILE := $(ov_SC03_029_OUT).map ov_SC03_029_LD_SCRIPT := $(ov_SC03_029_OUT).ld ov_SC03_029_SPLAT_YAML := config/splat.ov_SC03_029.yaml -ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029.o,tail2.data.o,ov_SC03_029_jr_8015AE2C.o,tail3.data.o,ov_SC03_029_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029.o,tail2.data.o,ov_SC03_029_jr_8015AE2C.o,tail3.data.o,ov_SC03_029_jr_801734BC.o,tail4.data.o,ov_SC03_029_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_029_CHECK_SHA := config/check.ov_SC03_029.sha ov_SC03_029_SYMBOLS := config/symbols.ov_SC03_029.txt ov_SC03_029_SIG := .run/sig.ov_SC03_029.jsonl @@ -1077,7 +1077,7 @@ ov_SC03_030_ELF := $(ov_SC03_030_OUT).elf ov_SC03_030_MAPFILE := $(ov_SC03_030_OUT).map ov_SC03_030_LD_SCRIPT := $(ov_SC03_030_OUT).ld ov_SC03_030_SPLAT_YAML := config/splat.ov_SC03_030.yaml -ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030.o,tail2.data.o,ov_SC03_030_jr_8015AE2C.o,tail3.data.o,ov_SC03_030_jr_801734BC.o,tail4.data.o # 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_jr_8015AE2C.o,tail3.data.o,ov_SC03_030_jr_801734BC.o,tail4.data.o,ov_SC03_030_jr_80178D40.o,tail5.data.o # Phase-26 §8 jtbl-rodata carve ov_SC03_030_CHECK_SHA := config/check.ov_SC03_030.sha ov_SC03_030_SYMBOLS := config/symbols.ov_SC03_030.txt ov_SC03_030_SIG := .run/sig.ov_SC03_030.jsonl @@ -1099,7 +1099,7 @@ ov_SC03_031_ELF := $(ov_SC03_031_OUT).elf ov_SC03_031_MAPFILE := $(ov_SC03_031_OUT).map ov_SC03_031_LD_SCRIPT := $(ov_SC03_031_OUT).ld ov_SC03_031_SPLAT_YAML := config/splat.ov_SC03_031.yaml -ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031.o,tail2.data.o,ov_SC03_031_jr_8015AE2C.o,tail3.data.o,ov_SC03_031_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031.o,tail2.data.o,ov_SC03_031_jr_8015AE2C.o,tail3.data.o,ov_SC03_031_jr_801734BC.o,tail4.data.o,ov_SC03_031_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_031_CHECK_SHA := config/check.ov_SC03_031.sha ov_SC03_031_SYMBOLS := config/symbols.ov_SC03_031.txt ov_SC03_031_SIG := .run/sig.ov_SC03_031.jsonl @@ -1121,7 +1121,7 @@ ov_SC03_089_ELF := $(ov_SC03_089_OUT).elf ov_SC03_089_MAPFILE := $(ov_SC03_089_OUT).map ov_SC03_089_LD_SCRIPT := $(ov_SC03_089_OUT).ld ov_SC03_089_SPLAT_YAML := config/splat.ov_SC03_089.yaml -ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089.o,tail2.data.o,ov_SC03_089_jr_8015AE2C.o,tail3.data.o,ov_SC03_089_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089.o,tail2.data.o,ov_SC03_089_jr_8015AE2C.o,tail3.data.o,ov_SC03_089_jr_801734BC.o,tail4.data.o,ov_SC03_089_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_089_CHECK_SHA := config/check.ov_SC03_089.sha ov_SC03_089_SYMBOLS := config/symbols.ov_SC03_089.txt ov_SC03_089_SIG := .run/sig.ov_SC03_089.jsonl @@ -1143,7 +1143,7 @@ ov_SC03_090_ELF := $(ov_SC03_090_OUT).elf ov_SC03_090_MAPFILE := $(ov_SC03_090_OUT).map ov_SC03_090_LD_SCRIPT := $(ov_SC03_090_OUT).ld ov_SC03_090_SPLAT_YAML := config/splat.ov_SC03_090.yaml -ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090.o,tail2.data.o,ov_SC03_090_jr_8015AE2C.o,tail3.data.o,ov_SC03_090_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090.o,tail2.data.o,ov_SC03_090_jr_8015AE2C.o,tail3.data.o,ov_SC03_090_jr_801734BC.o,tail4.data.o,ov_SC03_090_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_090_CHECK_SHA := config/check.ov_SC03_090.sha ov_SC03_090_SYMBOLS := config/symbols.ov_SC03_090.txt ov_SC03_090_SIG := .run/sig.ov_SC03_090.jsonl @@ -1165,7 +1165,7 @@ ov_SC03_091_ELF := $(ov_SC03_091_OUT).elf ov_SC03_091_MAPFILE := $(ov_SC03_091_OUT).map ov_SC03_091_LD_SCRIPT := $(ov_SC03_091_OUT).ld ov_SC03_091_SPLAT_YAML := config/splat.ov_SC03_091.yaml -ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091.o,tail2.data.o,ov_SC03_091_jr_8015AE2C.o,tail3.data.o,ov_SC03_091_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091.o,tail2.data.o,ov_SC03_091_jr_8015AE2C.o,tail3.data.o,ov_SC03_091_jr_801734BC.o,tail4.data.o,ov_SC03_091_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_091_CHECK_SHA := config/check.ov_SC03_091.sha ov_SC03_091_SYMBOLS := config/symbols.ov_SC03_091.txt ov_SC03_091_SIG := .run/sig.ov_SC03_091.jsonl @@ -1187,7 +1187,7 @@ ov_SC03_092_ELF := $(ov_SC03_092_OUT).elf ov_SC03_092_MAPFILE := $(ov_SC03_092_OUT).map ov_SC03_092_LD_SCRIPT := $(ov_SC03_092_OUT).ld ov_SC03_092_SPLAT_YAML := config/splat.ov_SC03_092.yaml -ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092.o,tail2.data.o,ov_SC03_092_jr_8015AE2C.o,tail3.data.o,ov_SC03_092_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092.o,tail2.data.o,ov_SC03_092_jr_8015AE2C.o,tail3.data.o,ov_SC03_092_jr_801734BC.o,tail4.data.o,ov_SC03_092_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_092_CHECK_SHA := config/check.ov_SC03_092.sha ov_SC03_092_SYMBOLS := config/symbols.ov_SC03_092.txt ov_SC03_092_SIG := .run/sig.ov_SC03_092.jsonl @@ -1209,7 +1209,7 @@ ov_SC03_093_ELF := $(ov_SC03_093_OUT).elf ov_SC03_093_MAPFILE := $(ov_SC03_093_OUT).map ov_SC03_093_LD_SCRIPT := $(ov_SC03_093_OUT).ld ov_SC03_093_SPLAT_YAML := config/splat.ov_SC03_093.yaml -ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093.o,tail2.data.o,ov_SC03_093_jr_8015AE2C.o,tail3.data.o,ov_SC03_093_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093.o,tail2.data.o,ov_SC03_093_jr_8015AE2C.o,tail3.data.o,ov_SC03_093_jr_801734BC.o,tail4.data.o,ov_SC03_093_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_093_CHECK_SHA := config/check.ov_SC03_093.sha ov_SC03_093_SYMBOLS := config/symbols.ov_SC03_093.txt ov_SC03_093_SIG := .run/sig.ov_SC03_093.jsonl @@ -1231,7 +1231,7 @@ ov_SC03_094_ELF := $(ov_SC03_094_OUT).elf ov_SC03_094_MAPFILE := $(ov_SC03_094_OUT).map ov_SC03_094_LD_SCRIPT := $(ov_SC03_094_OUT).ld ov_SC03_094_SPLAT_YAML := config/splat.ov_SC03_094.yaml -ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,tail2.data.o,ov_SC03_094_jr_8015AE2C.o,tail3.data.o,ov_SC03_094_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,tail2.data.o,ov_SC03_094_jr_8015AE2C.o,tail3.data.o,ov_SC03_094_jr_801734BC.o,tail4.data.o,ov_SC03_094_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_094_CHECK_SHA := config/check.ov_SC03_094.sha ov_SC03_094_SYMBOLS := config/symbols.ov_SC03_094.txt ov_SC03_094_SIG := .run/sig.ov_SC03_094.jsonl @@ -1253,7 +1253,7 @@ ov_SC03_095_ELF := $(ov_SC03_095_OUT).elf ov_SC03_095_MAPFILE := $(ov_SC03_095_OUT).map ov_SC03_095_LD_SCRIPT := $(ov_SC03_095_OUT).ld ov_SC03_095_SPLAT_YAML := config/splat.ov_SC03_095.yaml -ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095.o,tail2.data.o,ov_SC03_095_jr_8015AE2C.o,tail3.data.o,ov_SC03_095_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095.o,tail2.data.o,ov_SC03_095_jr_8015AE2C.o,tail3.data.o,ov_SC03_095_jr_801734BC.o,tail4.data.o,ov_SC03_095_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_095_CHECK_SHA := config/check.ov_SC03_095.sha ov_SC03_095_SYMBOLS := config/symbols.ov_SC03_095.txt ov_SC03_095_SIG := .run/sig.ov_SC03_095.jsonl @@ -1275,7 +1275,7 @@ ov_SC03_096_ELF := $(ov_SC03_096_OUT).elf ov_SC03_096_MAPFILE := $(ov_SC03_096_OUT).map ov_SC03_096_LD_SCRIPT := $(ov_SC03_096_OUT).ld ov_SC03_096_SPLAT_YAML := config/splat.ov_SC03_096.yaml -ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096.o,tail2.data.o,ov_SC03_096_jr_8015AE2C.o,tail3.data.o,ov_SC03_096_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096.o,tail2.data.o,ov_SC03_096_jr_8015AE2C.o,tail3.data.o,ov_SC03_096_jr_801734BC.o,tail4.data.o,ov_SC03_096_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_096_CHECK_SHA := config/check.ov_SC03_096.sha ov_SC03_096_SYMBOLS := config/symbols.ov_SC03_096.txt ov_SC03_096_SIG := .run/sig.ov_SC03_096.jsonl @@ -1297,7 +1297,7 @@ ov_SC03_097_ELF := $(ov_SC03_097_OUT).elf ov_SC03_097_MAPFILE := $(ov_SC03_097_OUT).map ov_SC03_097_LD_SCRIPT := $(ov_SC03_097_OUT).ld ov_SC03_097_SPLAT_YAML := config/splat.ov_SC03_097.yaml -ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097.o,tail2.data.o,ov_SC03_097_jr_8015AE2C.o,tail3.data.o,ov_SC03_097_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097.o,tail2.data.o,ov_SC03_097_jr_8015AE2C.o,tail3.data.o,ov_SC03_097_jr_801734BC.o,tail4.data.o,ov_SC03_097_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_097_CHECK_SHA := config/check.ov_SC03_097.sha ov_SC03_097_SYMBOLS := config/symbols.ov_SC03_097.txt ov_SC03_097_SIG := .run/sig.ov_SC03_097.jsonl @@ -1319,7 +1319,7 @@ ov_SC03_098_ELF := $(ov_SC03_098_OUT).elf ov_SC03_098_MAPFILE := $(ov_SC03_098_OUT).map ov_SC03_098_LD_SCRIPT := $(ov_SC03_098_OUT).ld ov_SC03_098_SPLAT_YAML := config/splat.ov_SC03_098.yaml -ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098.o,tail2.data.o,ov_SC03_098_jr_8015AE2C.o,tail3.data.o,ov_SC03_098_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098.o,tail2.data.o,ov_SC03_098_jr_8015AE2C.o,tail3.data.o,ov_SC03_098_jr_801734BC.o,tail4.data.o,ov_SC03_098_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_098_CHECK_SHA := config/check.ov_SC03_098.sha ov_SC03_098_SYMBOLS := config/symbols.ov_SC03_098.txt ov_SC03_098_SIG := .run/sig.ov_SC03_098.jsonl @@ -1341,7 +1341,7 @@ ov_SC03_099_ELF := $(ov_SC03_099_OUT).elf ov_SC03_099_MAPFILE := $(ov_SC03_099_OUT).map ov_SC03_099_LD_SCRIPT := $(ov_SC03_099_OUT).ld ov_SC03_099_SPLAT_YAML := config/splat.ov_SC03_099.yaml -ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099.o,tail2.data.o,ov_SC03_099_jr_8015AE2C.o,tail3.data.o,ov_SC03_099_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099.o,tail2.data.o,ov_SC03_099_jr_8015AE2C.o,tail3.data.o,ov_SC03_099_jr_801734BC.o,tail4.data.o,ov_SC03_099_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_099_CHECK_SHA := config/check.ov_SC03_099.sha ov_SC03_099_SYMBOLS := config/symbols.ov_SC03_099.txt ov_SC03_099_SIG := .run/sig.ov_SC03_099.jsonl @@ -1363,7 +1363,7 @@ ov_SC03_100_ELF := $(ov_SC03_100_OUT).elf ov_SC03_100_MAPFILE := $(ov_SC03_100_OUT).map ov_SC03_100_LD_SCRIPT := $(ov_SC03_100_OUT).ld ov_SC03_100_SPLAT_YAML := config/splat.ov_SC03_100.yaml -ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100.o,tail2.data.o,ov_SC03_100_jr_8015AE2C.o,tail3.data.o,ov_SC03_100_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100.o,tail2.data.o,ov_SC03_100_jr_8015AE2C.o,tail3.data.o,ov_SC03_100_jr_801734BC.o,tail4.data.o,ov_SC03_100_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_100_CHECK_SHA := config/check.ov_SC03_100.sha ov_SC03_100_SYMBOLS := config/symbols.ov_SC03_100.txt ov_SC03_100_SIG := .run/sig.ov_SC03_100.jsonl @@ -1385,7 +1385,7 @@ ov_SC03_101_ELF := $(ov_SC03_101_OUT).elf ov_SC03_101_MAPFILE := $(ov_SC03_101_OUT).map ov_SC03_101_LD_SCRIPT := $(ov_SC03_101_OUT).ld ov_SC03_101_SPLAT_YAML := config/splat.ov_SC03_101.yaml -ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101.o,tail2.data.o,ov_SC03_101_jr_8015AE2C.o,tail3.data.o,ov_SC03_101_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101.o,tail2.data.o,ov_SC03_101_jr_8015AE2C.o,tail3.data.o,ov_SC03_101_jr_801734BC.o,tail4.data.o,ov_SC03_101_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_101_CHECK_SHA := config/check.ov_SC03_101.sha ov_SC03_101_SYMBOLS := config/symbols.ov_SC03_101.txt ov_SC03_101_SIG := .run/sig.ov_SC03_101.jsonl @@ -1407,7 +1407,7 @@ ov_SC03_102_ELF := $(ov_SC03_102_OUT).elf ov_SC03_102_MAPFILE := $(ov_SC03_102_OUT).map ov_SC03_102_LD_SCRIPT := $(ov_SC03_102_OUT).ld ov_SC03_102_SPLAT_YAML := config/splat.ov_SC03_102.yaml -ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102.o,tail2.data.o,ov_SC03_102_jr_8015AE2C.o,tail3.data.o,ov_SC03_102_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102.o,tail2.data.o,ov_SC03_102_jr_8015AE2C.o,tail3.data.o,ov_SC03_102_jr_801734BC.o,tail4.data.o,ov_SC03_102_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_102_CHECK_SHA := config/check.ov_SC03_102.sha ov_SC03_102_SYMBOLS := config/symbols.ov_SC03_102.txt ov_SC03_102_SIG := .run/sig.ov_SC03_102.jsonl @@ -1429,7 +1429,7 @@ ov_SC03_103_ELF := $(ov_SC03_103_OUT).elf ov_SC03_103_MAPFILE := $(ov_SC03_103_OUT).map ov_SC03_103_LD_SCRIPT := $(ov_SC03_103_OUT).ld ov_SC03_103_SPLAT_YAML := config/splat.ov_SC03_103.yaml -ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103.o,tail2.data.o,ov_SC03_103_jr_8015AE2C.o,tail3.data.o,ov_SC03_103_jr_801734BC.o,tail4.data.o,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_jr_8015AE2C.o,tail3.data.o,ov_SC03_103_jr_801734BC.o,tail4.data.o,ov_SC03_103_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_103_CHECK_SHA := config/check.ov_SC03_103.sha ov_SC03_103_SYMBOLS := config/symbols.ov_SC03_103.txt ov_SC03_103_SIG := .run/sig.ov_SC03_103.jsonl @@ -1451,7 +1451,7 @@ ov_SC03_104_ELF := $(ov_SC03_104_OUT).elf ov_SC03_104_MAPFILE := $(ov_SC03_104_OUT).map ov_SC03_104_LD_SCRIPT := $(ov_SC03_104_OUT).ld ov_SC03_104_SPLAT_YAML := config/splat.ov_SC03_104.yaml -ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104.o,tail2.data.o,ov_SC03_104_jr_8015AE2C.o,tail3.data.o,ov_SC03_104_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104.o,tail2.data.o,ov_SC03_104_jr_8015AE2C.o,tail3.data.o,ov_SC03_104_jr_801734BC.o,tail4.data.o,ov_SC03_104_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_104_CHECK_SHA := config/check.ov_SC03_104.sha ov_SC03_104_SYMBOLS := config/symbols.ov_SC03_104.txt ov_SC03_104_SIG := .run/sig.ov_SC03_104.jsonl @@ -1473,7 +1473,7 @@ ov_SC03_105_ELF := $(ov_SC03_105_OUT).elf ov_SC03_105_MAPFILE := $(ov_SC03_105_OUT).map ov_SC03_105_LD_SCRIPT := $(ov_SC03_105_OUT).ld ov_SC03_105_SPLAT_YAML := config/splat.ov_SC03_105.yaml -ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105.o,tail2.data.o,ov_SC03_105_jr_8015AE2C.o,tail3.data.o,ov_SC03_105_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105.o,tail2.data.o,ov_SC03_105_jr_8015AE2C.o,tail3.data.o,ov_SC03_105_jr_801734BC.o,tail4.data.o,ov_SC03_105_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_105_CHECK_SHA := config/check.ov_SC03_105.sha ov_SC03_105_SYMBOLS := config/symbols.ov_SC03_105.txt ov_SC03_105_SIG := .run/sig.ov_SC03_105.jsonl @@ -1495,7 +1495,7 @@ ov_SC03_108_ELF := $(ov_SC03_108_OUT).elf ov_SC03_108_MAPFILE := $(ov_SC03_108_OUT).map ov_SC03_108_LD_SCRIPT := $(ov_SC03_108_OUT).ld ov_SC03_108_SPLAT_YAML := config/splat.ov_SC03_108.yaml -ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108.o,tail2.data.o,ov_SC03_108_jr_8015AE2C.o,tail3.data.o,ov_SC03_108_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108.o,tail2.data.o,ov_SC03_108_jr_8015AE2C.o,tail3.data.o,ov_SC03_108_jr_801734BC.o,tail4.data.o,ov_SC03_108_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_108_CHECK_SHA := config/check.ov_SC03_108.sha ov_SC03_108_SYMBOLS := config/symbols.ov_SC03_108.txt ov_SC03_108_SIG := .run/sig.ov_SC03_108.jsonl @@ -1517,7 +1517,7 @@ ov_SC03_109_ELF := $(ov_SC03_109_OUT).elf ov_SC03_109_MAPFILE := $(ov_SC03_109_OUT).map ov_SC03_109_LD_SCRIPT := $(ov_SC03_109_OUT).ld ov_SC03_109_SPLAT_YAML := config/splat.ov_SC03_109.yaml -ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109.o,tail2.data.o,ov_SC03_109_jr_8015AE2C.o,tail3.data.o,ov_SC03_109_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109.o,tail2.data.o,ov_SC03_109_jr_8015AE2C.o,tail3.data.o,ov_SC03_109_jr_801734BC.o,tail4.data.o,ov_SC03_109_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_109_CHECK_SHA := config/check.ov_SC03_109.sha ov_SC03_109_SYMBOLS := config/symbols.ov_SC03_109.txt ov_SC03_109_SIG := .run/sig.ov_SC03_109.jsonl @@ -1539,7 +1539,7 @@ ov_SC03_110_ELF := $(ov_SC03_110_OUT).elf ov_SC03_110_MAPFILE := $(ov_SC03_110_OUT).map ov_SC03_110_LD_SCRIPT := $(ov_SC03_110_OUT).ld ov_SC03_110_SPLAT_YAML := config/splat.ov_SC03_110.yaml -ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110.o,tail2.data.o,ov_SC03_110_jr_8015AE2C.o,tail3.data.o,ov_SC03_110_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110.o,tail2.data.o,ov_SC03_110_jr_8015AE2C.o,tail3.data.o,ov_SC03_110_jr_801734BC.o,tail4.data.o,ov_SC03_110_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_110_CHECK_SHA := config/check.ov_SC03_110.sha ov_SC03_110_SYMBOLS := config/symbols.ov_SC03_110.txt ov_SC03_110_SIG := .run/sig.ov_SC03_110.jsonl @@ -1561,7 +1561,7 @@ ov_SC03_111_ELF := $(ov_SC03_111_OUT).elf ov_SC03_111_MAPFILE := $(ov_SC03_111_OUT).map ov_SC03_111_LD_SCRIPT := $(ov_SC03_111_OUT).ld ov_SC03_111_SPLAT_YAML := config/splat.ov_SC03_111.yaml -ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111.o,tail2.data.o,ov_SC03_111_jr_8015AE2C.o,tail3.data.o,ov_SC03_111_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111.o,tail2.data.o,ov_SC03_111_jr_8015AE2C.o,tail3.data.o,ov_SC03_111_jr_801734BC.o,tail4.data.o,ov_SC03_111_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_111_CHECK_SHA := config/check.ov_SC03_111.sha ov_SC03_111_SYMBOLS := config/symbols.ov_SC03_111.txt ov_SC03_111_SIG := .run/sig.ov_SC03_111.jsonl @@ -1583,7 +1583,7 @@ ov_SC03_112_ELF := $(ov_SC03_112_OUT).elf ov_SC03_112_MAPFILE := $(ov_SC03_112_OUT).map ov_SC03_112_LD_SCRIPT := $(ov_SC03_112_OUT).ld ov_SC03_112_SPLAT_YAML := config/splat.ov_SC03_112.yaml -ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112.o,tail2.data.o,ov_SC03_112_jr_8015AE2C.o,tail3.data.o,ov_SC03_112_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112.o,tail2.data.o,ov_SC03_112_jr_8015AE2C.o,tail3.data.o,ov_SC03_112_jr_801734BC.o,tail4.data.o,ov_SC03_112_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_112_CHECK_SHA := config/check.ov_SC03_112.sha ov_SC03_112_SYMBOLS := config/symbols.ov_SC03_112.txt ov_SC03_112_SIG := .run/sig.ov_SC03_112.jsonl @@ -1605,7 +1605,7 @@ ov_SC03_113_ELF := $(ov_SC03_113_OUT).elf ov_SC03_113_MAPFILE := $(ov_SC03_113_OUT).map ov_SC03_113_LD_SCRIPT := $(ov_SC03_113_OUT).ld ov_SC03_113_SPLAT_YAML := config/splat.ov_SC03_113.yaml -ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113.o,tail2.data.o,ov_SC03_113_jr_8015AE2C.o,tail3.data.o,ov_SC03_113_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113.o,tail2.data.o,ov_SC03_113_jr_8015AE2C.o,tail3.data.o,ov_SC03_113_jr_801734BC.o,tail4.data.o,ov_SC03_113_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_113_CHECK_SHA := config/check.ov_SC03_113.sha ov_SC03_113_SYMBOLS := config/symbols.ov_SC03_113.txt ov_SC03_113_SIG := .run/sig.ov_SC03_113.jsonl @@ -1627,7 +1627,7 @@ ov_SC03_114_ELF := $(ov_SC03_114_OUT).elf ov_SC03_114_MAPFILE := $(ov_SC03_114_OUT).map ov_SC03_114_LD_SCRIPT := $(ov_SC03_114_OUT).ld ov_SC03_114_SPLAT_YAML := config/splat.ov_SC03_114.yaml -ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114.o,tail2.data.o,ov_SC03_114_jr_8015AE2C.o,tail3.data.o,ov_SC03_114_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114.o,tail2.data.o,ov_SC03_114_jr_8015AE2C.o,tail3.data.o,ov_SC03_114_jr_801734BC.o,tail4.data.o,ov_SC03_114_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_114_CHECK_SHA := config/check.ov_SC03_114.sha ov_SC03_114_SYMBOLS := config/symbols.ov_SC03_114.txt ov_SC03_114_SIG := .run/sig.ov_SC03_114.jsonl @@ -1649,7 +1649,7 @@ ov_SC03_115_ELF := $(ov_SC03_115_OUT).elf ov_SC03_115_MAPFILE := $(ov_SC03_115_OUT).map ov_SC03_115_LD_SCRIPT := $(ov_SC03_115_OUT).ld ov_SC03_115_SPLAT_YAML := config/splat.ov_SC03_115.yaml -ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115.o,tail2.data.o,ov_SC03_115_jr_8015AE2C.o,tail3.data.o,ov_SC03_115_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115.o,tail2.data.o,ov_SC03_115_jr_8015AE2C.o,tail3.data.o,ov_SC03_115_jr_801734BC.o,tail4.data.o,ov_SC03_115_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_115_CHECK_SHA := config/check.ov_SC03_115.sha ov_SC03_115_SYMBOLS := config/symbols.ov_SC03_115.txt ov_SC03_115_SIG := .run/sig.ov_SC03_115.jsonl @@ -1671,7 +1671,7 @@ ov_SC03_116_ELF := $(ov_SC03_116_OUT).elf ov_SC03_116_MAPFILE := $(ov_SC03_116_OUT).map ov_SC03_116_LD_SCRIPT := $(ov_SC03_116_OUT).ld ov_SC03_116_SPLAT_YAML := config/splat.ov_SC03_116.yaml -ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116.o,tail2.data.o,ov_SC03_116_jr_8015AE2C.o,tail3.data.o,ov_SC03_116_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116.o,tail2.data.o,ov_SC03_116_jr_8015AE2C.o,tail3.data.o,ov_SC03_116_jr_801734BC.o,tail4.data.o,ov_SC03_116_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_116_CHECK_SHA := config/check.ov_SC03_116.sha ov_SC03_116_SYMBOLS := config/symbols.ov_SC03_116.txt ov_SC03_116_SIG := .run/sig.ov_SC03_116.jsonl @@ -1693,7 +1693,7 @@ ov_SC03_117_ELF := $(ov_SC03_117_OUT).elf ov_SC03_117_MAPFILE := $(ov_SC03_117_OUT).map ov_SC03_117_LD_SCRIPT := $(ov_SC03_117_OUT).ld ov_SC03_117_SPLAT_YAML := config/splat.ov_SC03_117.yaml -ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117.o,tail2.data.o,ov_SC03_117_jr_8015AE2C.o,tail3.data.o,ov_SC03_117_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117.o,tail2.data.o,ov_SC03_117_jr_8015AE2C.o,tail3.data.o,ov_SC03_117_jr_801734BC.o,tail4.data.o,ov_SC03_117_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_117_CHECK_SHA := config/check.ov_SC03_117.sha ov_SC03_117_SYMBOLS := config/symbols.ov_SC03_117.txt ov_SC03_117_SIG := .run/sig.ov_SC03_117.jsonl @@ -1715,7 +1715,7 @@ ov_SC03_118_ELF := $(ov_SC03_118_OUT).elf ov_SC03_118_MAPFILE := $(ov_SC03_118_OUT).map ov_SC03_118_LD_SCRIPT := $(ov_SC03_118_OUT).ld ov_SC03_118_SPLAT_YAML := config/splat.ov_SC03_118.yaml -ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118.o,tail2.data.o,ov_SC03_118_jr_8015AE2C.o,tail3.data.o,ov_SC03_118_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118.o,tail2.data.o,ov_SC03_118_jr_8015AE2C.o,tail3.data.o,ov_SC03_118_jr_801734BC.o,tail4.data.o,ov_SC03_118_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_118_CHECK_SHA := config/check.ov_SC03_118.sha ov_SC03_118_SYMBOLS := config/symbols.ov_SC03_118.txt ov_SC03_118_SIG := .run/sig.ov_SC03_118.jsonl @@ -1737,7 +1737,7 @@ ov_SC03_119_ELF := $(ov_SC03_119_OUT).elf ov_SC03_119_MAPFILE := $(ov_SC03_119_OUT).map ov_SC03_119_LD_SCRIPT := $(ov_SC03_119_OUT).ld ov_SC03_119_SPLAT_YAML := config/splat.ov_SC03_119.yaml -ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119.o,tail2.data.o,ov_SC03_119_jr_8015AE2C.o,tail3.data.o,ov_SC03_119_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119.o,tail2.data.o,ov_SC03_119_jr_8015AE2C.o,tail3.data.o,ov_SC03_119_jr_801734BC.o,tail4.data.o,ov_SC03_119_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_119_CHECK_SHA := config/check.ov_SC03_119.sha ov_SC03_119_SYMBOLS := config/symbols.ov_SC03_119.txt ov_SC03_119_SIG := .run/sig.ov_SC03_119.jsonl @@ -1759,7 +1759,7 @@ ov_SC03_121_ELF := $(ov_SC03_121_OUT).elf ov_SC03_121_MAPFILE := $(ov_SC03_121_OUT).map ov_SC03_121_LD_SCRIPT := $(ov_SC03_121_OUT).ld ov_SC03_121_SPLAT_YAML := config/splat.ov_SC03_121.yaml -ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,tail2.data.o,ov_SC03_121_jr_8015AE2C.o,tail3.data.o,ov_SC03_121_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,tail2.data.o,ov_SC03_121_jr_8015AE2C.o,tail3.data.o,ov_SC03_121_jr_801734BC.o,tail4.data.o,ov_SC03_121_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_121_CHECK_SHA := config/check.ov_SC03_121.sha ov_SC03_121_SYMBOLS := config/symbols.ov_SC03_121.txt ov_SC03_121_SIG := .run/sig.ov_SC03_121.jsonl @@ -1781,7 +1781,7 @@ ov_SC03_124_ELF := $(ov_SC03_124_OUT).elf ov_SC03_124_MAPFILE := $(ov_SC03_124_OUT).map ov_SC03_124_LD_SCRIPT := $(ov_SC03_124_OUT).ld ov_SC03_124_SPLAT_YAML := config/splat.ov_SC03_124.yaml -ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,tail2.data.o,ov_SC03_124_jr_8015AE2C.o,tail3.data.o,ov_SC03_124_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,tail2.data.o,ov_SC03_124_jr_8015AE2C.o,tail3.data.o,ov_SC03_124_jr_801734BC.o,tail4.data.o,ov_SC03_124_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_124_CHECK_SHA := config/check.ov_SC03_124.sha ov_SC03_124_SYMBOLS := config/symbols.ov_SC03_124.txt ov_SC03_124_SIG := .run/sig.ov_SC03_124.jsonl @@ -1803,7 +1803,7 @@ ov_SC03_125_ELF := $(ov_SC03_125_OUT).elf ov_SC03_125_MAPFILE := $(ov_SC03_125_OUT).map ov_SC03_125_LD_SCRIPT := $(ov_SC03_125_OUT).ld ov_SC03_125_SPLAT_YAML := config/splat.ov_SC03_125.yaml -ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125.o,tail2.data.o,ov_SC03_125_jr_8015AE2C.o,tail3.data.o,ov_SC03_125_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125.o,tail2.data.o,ov_SC03_125_jr_8015AE2C.o,tail3.data.o,ov_SC03_125_jr_801734BC.o,tail4.data.o,ov_SC03_125_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_125_CHECK_SHA := config/check.ov_SC03_125.sha ov_SC03_125_SYMBOLS := config/symbols.ov_SC03_125.txt ov_SC03_125_SIG := .run/sig.ov_SC03_125.jsonl @@ -1825,7 +1825,7 @@ ov_SC03_126_ELF := $(ov_SC03_126_OUT).elf ov_SC03_126_MAPFILE := $(ov_SC03_126_OUT).map ov_SC03_126_LD_SCRIPT := $(ov_SC03_126_OUT).ld ov_SC03_126_SPLAT_YAML := config/splat.ov_SC03_126.yaml -ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126.o,tail2.data.o,ov_SC03_126_jr_8015AE2C.o,tail3.data.o,ov_SC03_126_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126.o,tail2.data.o,ov_SC03_126_jr_8015AE2C.o,tail3.data.o,ov_SC03_126_jr_801734BC.o,tail4.data.o,ov_SC03_126_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_126_CHECK_SHA := config/check.ov_SC03_126.sha ov_SC03_126_SYMBOLS := config/symbols.ov_SC03_126.txt ov_SC03_126_SIG := .run/sig.ov_SC03_126.jsonl @@ -1847,7 +1847,7 @@ ov_SC04_002_ELF := $(ov_SC04_002_OUT).elf ov_SC04_002_MAPFILE := $(ov_SC04_002_OUT).map ov_SC04_002_LD_SCRIPT := $(ov_SC04_002_OUT).ld ov_SC04_002_SPLAT_YAML := config/splat.ov_SC04_002.yaml -ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002.o,tail2.data.o,ov_SC04_002_jr_8015AE2C.o,tail3.data.o,ov_SC04_002_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002.o,tail2.data.o,ov_SC04_002_jr_8015AE2C.o,tail3.data.o,ov_SC04_002_jr_801734BC.o,tail4.data.o,ov_SC04_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_002_CHECK_SHA := config/check.ov_SC04_002.sha ov_SC04_002_SYMBOLS := config/symbols.ov_SC04_002.txt ov_SC04_002_SIG := .run/sig.ov_SC04_002.jsonl @@ -1869,7 +1869,7 @@ ov_SC04_003_ELF := $(ov_SC04_003_OUT).elf ov_SC04_003_MAPFILE := $(ov_SC04_003_OUT).map ov_SC04_003_LD_SCRIPT := $(ov_SC04_003_OUT).ld ov_SC04_003_SPLAT_YAML := config/splat.ov_SC04_003.yaml -ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003.o,tail2.data.o,ov_SC04_003_jr_8015AE2C.o,tail3.data.o,ov_SC04_003_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003.o,tail2.data.o,ov_SC04_003_jr_8015AE2C.o,tail3.data.o,ov_SC04_003_jr_801734BC.o,tail4.data.o,ov_SC04_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_003_CHECK_SHA := config/check.ov_SC04_003.sha ov_SC04_003_SYMBOLS := config/symbols.ov_SC04_003.txt ov_SC04_003_SIG := .run/sig.ov_SC04_003.jsonl @@ -1891,7 +1891,7 @@ ov_SC04_004_ELF := $(ov_SC04_004_OUT).elf ov_SC04_004_MAPFILE := $(ov_SC04_004_OUT).map ov_SC04_004_LD_SCRIPT := $(ov_SC04_004_OUT).ld ov_SC04_004_SPLAT_YAML := config/splat.ov_SC04_004.yaml -ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004.o,tail2.data.o,ov_SC04_004_jr_8015AE2C.o,tail3.data.o,ov_SC04_004_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004.o,tail2.data.o,ov_SC04_004_jr_8015AE2C.o,tail3.data.o,ov_SC04_004_jr_801734BC.o,tail4.data.o,ov_SC04_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_004_CHECK_SHA := config/check.ov_SC04_004.sha ov_SC04_004_SYMBOLS := config/symbols.ov_SC04_004.txt ov_SC04_004_SIG := .run/sig.ov_SC04_004.jsonl @@ -1913,7 +1913,7 @@ ov_SC04_005_ELF := $(ov_SC04_005_OUT).elf ov_SC04_005_MAPFILE := $(ov_SC04_005_OUT).map ov_SC04_005_LD_SCRIPT := $(ov_SC04_005_OUT).ld ov_SC04_005_SPLAT_YAML := config/splat.ov_SC04_005.yaml -ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005.o,tail2.data.o,ov_SC04_005_jr_8015AE2C.o,tail3.data.o,ov_SC04_005_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005.o,tail2.data.o,ov_SC04_005_jr_8015AE2C.o,tail3.data.o,ov_SC04_005_jr_801734BC.o,tail4.data.o,ov_SC04_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_005_CHECK_SHA := config/check.ov_SC04_005.sha ov_SC04_005_SYMBOLS := config/symbols.ov_SC04_005.txt ov_SC04_005_SIG := .run/sig.ov_SC04_005.jsonl @@ -1935,7 +1935,7 @@ ov_SC04_006_ELF := $(ov_SC04_006_OUT).elf ov_SC04_006_MAPFILE := $(ov_SC04_006_OUT).map ov_SC04_006_LD_SCRIPT := $(ov_SC04_006_OUT).ld ov_SC04_006_SPLAT_YAML := config/splat.ov_SC04_006.yaml -ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006.o,tail2.data.o,ov_SC04_006_jr_8015AE2C.o,tail3.data.o,ov_SC04_006_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006.o,tail2.data.o,ov_SC04_006_jr_8015AE2C.o,tail3.data.o,ov_SC04_006_jr_801734BC.o,tail4.data.o,ov_SC04_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_006_CHECK_SHA := config/check.ov_SC04_006.sha ov_SC04_006_SYMBOLS := config/symbols.ov_SC04_006.txt ov_SC04_006_SIG := .run/sig.ov_SC04_006.jsonl @@ -1957,7 +1957,7 @@ ov_SC04_007_ELF := $(ov_SC04_007_OUT).elf ov_SC04_007_MAPFILE := $(ov_SC04_007_OUT).map ov_SC04_007_LD_SCRIPT := $(ov_SC04_007_OUT).ld ov_SC04_007_SPLAT_YAML := config/splat.ov_SC04_007.yaml -ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007.o,tail2.data.o,ov_SC04_007_jr_8015AE2C.o,tail3.data.o,ov_SC04_007_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007.o,tail2.data.o,ov_SC04_007_jr_8015AE2C.o,tail3.data.o,ov_SC04_007_jr_801734BC.o,tail4.data.o,ov_SC04_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_007_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.o,tail2.data.o,ov_SC04_008_jr_8015AE2C.o,tail3.data.o,ov_SC04_008_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_008.o,tail2.data.o,ov_SC04_008_jr_8015AE2C.o,tail3.data.o,ov_SC04_008_jr_801734BC.o,tail4.data.o,ov_SC04_008_jr_80178D40.o,tail5.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.o,tail2.data.o,ov_SC04_009_jr_8015AE2C.o,tail3.data.o,ov_SC04_009_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009.o,tail2.data.o,ov_SC04_009_jr_8015AE2C.o,tail3.data.o,ov_SC04_009_jr_801734BC.o,tail4.data.o,ov_SC04_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_009_CHECK_SHA := config/check.ov_SC04_009.sha ov_SC04_009_SYMBOLS := config/symbols.ov_SC04_009.txt ov_SC04_009_SIG := .run/sig.ov_SC04_009.jsonl @@ -2023,7 +2023,7 @@ ov_SC04_010_ELF := $(ov_SC04_010_OUT).elf ov_SC04_010_MAPFILE := $(ov_SC04_010_OUT).map ov_SC04_010_LD_SCRIPT := $(ov_SC04_010_OUT).ld ov_SC04_010_SPLAT_YAML := config/splat.ov_SC04_010.yaml -ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010.o,tail2.data.o,ov_SC04_010_jr_8015AE2C.o,tail3.data.o,ov_SC04_010_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010.o,tail2.data.o,ov_SC04_010_jr_8015AE2C.o,tail3.data.o,ov_SC04_010_jr_801734BC.o,tail4.data.o,ov_SC04_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_010_CHECK_SHA := config/check.ov_SC04_010.sha ov_SC04_010_SYMBOLS := config/symbols.ov_SC04_010.txt ov_SC04_010_SIG := .run/sig.ov_SC04_010.jsonl @@ -2045,7 +2045,7 @@ ov_SC04_011_ELF := $(ov_SC04_011_OUT).elf ov_SC04_011_MAPFILE := $(ov_SC04_011_OUT).map ov_SC04_011_LD_SCRIPT := $(ov_SC04_011_OUT).ld ov_SC04_011_SPLAT_YAML := config/splat.ov_SC04_011.yaml -ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011.o,tail2.data.o,ov_SC04_011_jr_8015AE2C.o,tail3.data.o,ov_SC04_011_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011.o,tail2.data.o,ov_SC04_011_jr_8015AE2C.o,tail3.data.o,ov_SC04_011_jr_801734BC.o,tail4.data.o,ov_SC04_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_011_CHECK_SHA := config/check.ov_SC04_011.sha ov_SC04_011_SYMBOLS := config/symbols.ov_SC04_011.txt ov_SC04_011_SIG := .run/sig.ov_SC04_011.jsonl @@ -2067,7 +2067,7 @@ ov_SC04_012_ELF := $(ov_SC04_012_OUT).elf ov_SC04_012_MAPFILE := $(ov_SC04_012_OUT).map ov_SC04_012_LD_SCRIPT := $(ov_SC04_012_OUT).ld ov_SC04_012_SPLAT_YAML := config/splat.ov_SC04_012.yaml -ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012.o,tail2.data.o,ov_SC04_012_jr_8015AE2C.o,tail3.data.o,ov_SC04_012_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012.o,tail2.data.o,ov_SC04_012_jr_8015AE2C.o,tail3.data.o,ov_SC04_012_jr_801734BC.o,tail4.data.o,ov_SC04_012_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_012_CHECK_SHA := config/check.ov_SC04_012.sha ov_SC04_012_SYMBOLS := config/symbols.ov_SC04_012.txt ov_SC04_012_SIG := .run/sig.ov_SC04_012.jsonl @@ -2089,7 +2089,7 @@ ov_SC04_015_ELF := $(ov_SC04_015_OUT).elf ov_SC04_015_MAPFILE := $(ov_SC04_015_OUT).map ov_SC04_015_LD_SCRIPT := $(ov_SC04_015_OUT).ld ov_SC04_015_SPLAT_YAML := config/splat.ov_SC04_015.yaml -ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015.o,tail2.data.o,ov_SC04_015_jr_8015AE2C.o,tail3.data.o,ov_SC04_015_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015.o,tail2.data.o,ov_SC04_015_jr_8015AE2C.o,tail3.data.o,ov_SC04_015_jr_801734BC.o,tail4.data.o,ov_SC04_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_015_CHECK_SHA := config/check.ov_SC04_015.sha ov_SC04_015_SYMBOLS := config/symbols.ov_SC04_015.txt ov_SC04_015_SIG := .run/sig.ov_SC04_015.jsonl @@ -2111,7 +2111,7 @@ ov_SC04_016_ELF := $(ov_SC04_016_OUT).elf ov_SC04_016_MAPFILE := $(ov_SC04_016_OUT).map ov_SC04_016_LD_SCRIPT := $(ov_SC04_016_OUT).ld ov_SC04_016_SPLAT_YAML := config/splat.ov_SC04_016.yaml -ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016.o,tail2.data.o,ov_SC04_016_jr_8015AE2C.o,tail3.data.o,ov_SC04_016_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016.o,tail2.data.o,ov_SC04_016_jr_8015AE2C.o,tail3.data.o,ov_SC04_016_jr_801734BC.o,tail4.data.o,ov_SC04_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_016_CHECK_SHA := config/check.ov_SC04_016.sha ov_SC04_016_SYMBOLS := config/symbols.ov_SC04_016.txt ov_SC04_016_SIG := .run/sig.ov_SC04_016.jsonl @@ -2133,7 +2133,7 @@ ov_SC04_020_ELF := $(ov_SC04_020_OUT).elf ov_SC04_020_MAPFILE := $(ov_SC04_020_OUT).map ov_SC04_020_LD_SCRIPT := $(ov_SC04_020_OUT).ld ov_SC04_020_SPLAT_YAML := config/splat.ov_SC04_020.yaml -ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020.o,tail2.data.o,ov_SC04_020_jr_8015AE2C.o,tail3.data.o,ov_SC04_020_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020.o,tail2.data.o,ov_SC04_020_jr_8015AE2C.o,tail3.data.o,ov_SC04_020_jr_801734BC.o,tail4.data.o,ov_SC04_020_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_020_CHECK_SHA := config/check.ov_SC04_020.sha ov_SC04_020_SYMBOLS := config/symbols.ov_SC04_020.txt ov_SC04_020_SIG := .run/sig.ov_SC04_020.jsonl @@ -2155,7 +2155,7 @@ ov_SC04_021_ELF := $(ov_SC04_021_OUT).elf ov_SC04_021_MAPFILE := $(ov_SC04_021_OUT).map ov_SC04_021_LD_SCRIPT := $(ov_SC04_021_OUT).ld ov_SC04_021_SPLAT_YAML := config/splat.ov_SC04_021.yaml -ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021.o,tail2.data.o,ov_SC04_021_jr_8015AE2C.o,tail3.data.o,ov_SC04_021_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021.o,tail2.data.o,ov_SC04_021_jr_8015AE2C.o,tail3.data.o,ov_SC04_021_jr_801734BC.o,tail4.data.o,ov_SC04_021_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_021_CHECK_SHA := config/check.ov_SC04_021.sha ov_SC04_021_SYMBOLS := config/symbols.ov_SC04_021.txt ov_SC04_021_SIG := .run/sig.ov_SC04_021.jsonl @@ -2177,7 +2177,7 @@ ov_SC05_001_ELF := $(ov_SC05_001_OUT).elf ov_SC05_001_MAPFILE := $(ov_SC05_001_OUT).map ov_SC05_001_LD_SCRIPT := $(ov_SC05_001_OUT).ld ov_SC05_001_SPLAT_YAML := config/splat.ov_SC05_001.yaml -ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001.o,tail2.data.o,ov_SC05_001_jr_8015AE2C.o,tail3.data.o,ov_SC05_001_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001.o,tail2.data.o,ov_SC05_001_jr_8015AE2C.o,tail3.data.o,ov_SC05_001_jr_801734BC.o,tail4.data.o,ov_SC05_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_001_CHECK_SHA := config/check.ov_SC05_001.sha ov_SC05_001_SYMBOLS := config/symbols.ov_SC05_001.txt ov_SC05_001_SIG := .run/sig.ov_SC05_001.jsonl @@ -2199,7 +2199,7 @@ ov_SC05_002_ELF := $(ov_SC05_002_OUT).elf ov_SC05_002_MAPFILE := $(ov_SC05_002_OUT).map ov_SC05_002_LD_SCRIPT := $(ov_SC05_002_OUT).ld ov_SC05_002_SPLAT_YAML := config/splat.ov_SC05_002.yaml -ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002.o,tail2.data.o,ov_SC05_002_jr_8015AE2C.o,tail3.data.o,ov_SC05_002_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002.o,tail2.data.o,ov_SC05_002_jr_8015AE2C.o,tail3.data.o,ov_SC05_002_jr_801734BC.o,tail4.data.o,ov_SC05_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_002_CHECK_SHA := config/check.ov_SC05_002.sha ov_SC05_002_SYMBOLS := config/symbols.ov_SC05_002.txt ov_SC05_002_SIG := .run/sig.ov_SC05_002.jsonl @@ -2221,7 +2221,7 @@ ov_SC05_003_ELF := $(ov_SC05_003_OUT).elf ov_SC05_003_MAPFILE := $(ov_SC05_003_OUT).map ov_SC05_003_LD_SCRIPT := $(ov_SC05_003_OUT).ld ov_SC05_003_SPLAT_YAML := config/splat.ov_SC05_003.yaml -ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003.o,tail2.data.o,ov_SC05_003_jr_8015AE2C.o,tail3.data.o,ov_SC05_003_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003.o,tail2.data.o,ov_SC05_003_jr_8015AE2C.o,tail3.data.o,ov_SC05_003_jr_801734BC.o,tail4.data.o,ov_SC05_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_003_CHECK_SHA := config/check.ov_SC05_003.sha ov_SC05_003_SYMBOLS := config/symbols.ov_SC05_003.txt ov_SC05_003_SIG := .run/sig.ov_SC05_003.jsonl @@ -2243,7 +2243,7 @@ ov_SC05_004_ELF := $(ov_SC05_004_OUT).elf ov_SC05_004_MAPFILE := $(ov_SC05_004_OUT).map ov_SC05_004_LD_SCRIPT := $(ov_SC05_004_OUT).ld ov_SC05_004_SPLAT_YAML := config/splat.ov_SC05_004.yaml -ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004.o,tail2.data.o,ov_SC05_004_jr_8015AE2C.o,tail3.data.o,ov_SC05_004_jr_801734BC.o,tail4.data.o,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_jr_8015AE2C.o,tail3.data.o,ov_SC05_004_jr_801734BC.o,tail4.data.o,ov_SC05_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_004_CHECK_SHA := config/check.ov_SC05_004.sha ov_SC05_004_SYMBOLS := config/symbols.ov_SC05_004.txt ov_SC05_004_SIG := .run/sig.ov_SC05_004.jsonl @@ -2265,7 +2265,7 @@ ov_SC05_005_ELF := $(ov_SC05_005_OUT).elf ov_SC05_005_MAPFILE := $(ov_SC05_005_OUT).map ov_SC05_005_LD_SCRIPT := $(ov_SC05_005_OUT).ld ov_SC05_005_SPLAT_YAML := config/splat.ov_SC05_005.yaml -ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005.o,tail2.data.o,ov_SC05_005_jr_8015AE2C.o,tail3.data.o,ov_SC05_005_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005.o,tail2.data.o,ov_SC05_005_jr_8015AE2C.o,tail3.data.o,ov_SC05_005_jr_801734BC.o,tail4.data.o,ov_SC05_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_005_CHECK_SHA := config/check.ov_SC05_005.sha ov_SC05_005_SYMBOLS := config/symbols.ov_SC05_005.txt ov_SC05_005_SIG := .run/sig.ov_SC05_005.jsonl @@ -2287,7 +2287,7 @@ ov_SC05_006_ELF := $(ov_SC05_006_OUT).elf ov_SC05_006_MAPFILE := $(ov_SC05_006_OUT).map ov_SC05_006_LD_SCRIPT := $(ov_SC05_006_OUT).ld ov_SC05_006_SPLAT_YAML := config/splat.ov_SC05_006.yaml -ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006.o,tail2.data.o,ov_SC05_006_jr_8015AE2C.o,tail3.data.o,ov_SC05_006_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006.o,tail2.data.o,ov_SC05_006_jr_8015AE2C.o,tail3.data.o,ov_SC05_006_jr_801734BC.o,tail4.data.o,ov_SC05_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_006_CHECK_SHA := config/check.ov_SC05_006.sha ov_SC05_006_SYMBOLS := config/symbols.ov_SC05_006.txt ov_SC05_006_SIG := .run/sig.ov_SC05_006.jsonl @@ -2309,7 +2309,7 @@ ov_SC05_007_ELF := $(ov_SC05_007_OUT).elf ov_SC05_007_MAPFILE := $(ov_SC05_007_OUT).map ov_SC05_007_LD_SCRIPT := $(ov_SC05_007_OUT).ld ov_SC05_007_SPLAT_YAML := config/splat.ov_SC05_007.yaml -ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007.o,tail2.data.o,ov_SC05_007_jr_8015AE2C.o,tail3.data.o,ov_SC05_007_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007.o,tail2.data.o,ov_SC05_007_jr_8015AE2C.o,tail3.data.o,ov_SC05_007_jr_801734BC.o,tail4.data.o,ov_SC05_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_007_CHECK_SHA := config/check.ov_SC05_007.sha ov_SC05_007_SYMBOLS := config/symbols.ov_SC05_007.txt ov_SC05_007_SIG := .run/sig.ov_SC05_007.jsonl @@ -2331,7 +2331,7 @@ ov_SC05_008_ELF := $(ov_SC05_008_OUT).elf ov_SC05_008_MAPFILE := $(ov_SC05_008_OUT).map ov_SC05_008_LD_SCRIPT := $(ov_SC05_008_OUT).ld ov_SC05_008_SPLAT_YAML := config/splat.ov_SC05_008.yaml -ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008.o,tail2.data.o,ov_SC05_008_jr_8015AE2C.o,tail3.data.o,ov_SC05_008_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008.o,tail2.data.o,ov_SC05_008_jr_8015AE2C.o,tail3.data.o,ov_SC05_008_jr_801734BC.o,tail4.data.o,ov_SC05_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_008_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.o,tail2.data.o,ov_SC05_009_jr_8015AE2C.o,tail3.data.o,ov_SC05_009_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_009.o,tail2.data.o,ov_SC05_009_jr_8015AE2C.o,tail3.data.o,ov_SC05_009_jr_801734BC.o,tail4.data.o,ov_SC05_009_jr_80178D40.o,tail5.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.o,tail2.data.o,ov_SC05_010_jr_8015AE2C.o,tail3.data.o,ov_SC05_010_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,tail2.data.o,ov_SC05_010_jr_8015AE2C.o,tail3.data.o,ov_SC05_010_jr_801734BC.o,tail4.data.o,ov_SC05_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha ov_SC05_010_SYMBOLS := config/symbols.ov_SC05_010.txt ov_SC05_010_SIG := .run/sig.ov_SC05_010.jsonl @@ -2397,7 +2397,7 @@ ov_SC05_011_ELF := $(ov_SC05_011_OUT).elf ov_SC05_011_MAPFILE := $(ov_SC05_011_OUT).map ov_SC05_011_LD_SCRIPT := $(ov_SC05_011_OUT).ld ov_SC05_011_SPLAT_YAML := config/splat.ov_SC05_011.yaml -ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011.o,tail2.data.o,ov_SC05_011_jr_8015AE2C.o,tail3.data.o,ov_SC05_011_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011.o,tail2.data.o,ov_SC05_011_jr_8015AE2C.o,tail3.data.o,ov_SC05_011_jr_801734BC.o,tail4.data.o,ov_SC05_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_011_CHECK_SHA := config/check.ov_SC05_011.sha ov_SC05_011_SYMBOLS := config/symbols.ov_SC05_011.txt ov_SC05_011_SIG := .run/sig.ov_SC05_011.jsonl @@ -2419,7 +2419,7 @@ ov_SC05_017_ELF := $(ov_SC05_017_OUT).elf ov_SC05_017_MAPFILE := $(ov_SC05_017_OUT).map ov_SC05_017_LD_SCRIPT := $(ov_SC05_017_OUT).ld ov_SC05_017_SPLAT_YAML := config/splat.ov_SC05_017.yaml -ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,tail2.data.o,ov_SC05_017_jr_8015AE2C.o,tail3.data.o,ov_SC05_017_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,tail2.data.o,ov_SC05_017_jr_8015AE2C.o,tail3.data.o,ov_SC05_017_jr_801734BC.o,tail4.data.o,ov_SC05_017_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_017_CHECK_SHA := config/check.ov_SC05_017.sha ov_SC05_017_SYMBOLS := config/symbols.ov_SC05_017.txt ov_SC05_017_SIG := .run/sig.ov_SC05_017.jsonl @@ -2441,7 +2441,7 @@ ov_SC05_018_ELF := $(ov_SC05_018_OUT).elf ov_SC05_018_MAPFILE := $(ov_SC05_018_OUT).map ov_SC05_018_LD_SCRIPT := $(ov_SC05_018_OUT).ld ov_SC05_018_SPLAT_YAML := config/splat.ov_SC05_018.yaml -ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018.o,tail2.data.o,ov_SC05_018_jr_8015AE2C.o,tail3.data.o,ov_SC05_018_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018.o,tail2.data.o,ov_SC05_018_jr_8015AE2C.o,tail3.data.o,ov_SC05_018_jr_801734BC.o,tail4.data.o,ov_SC05_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_018_CHECK_SHA := config/check.ov_SC05_018.sha ov_SC05_018_SYMBOLS := config/symbols.ov_SC05_018.txt ov_SC05_018_SIG := .run/sig.ov_SC05_018.jsonl @@ -2463,7 +2463,7 @@ ov_SC05_019_ELF := $(ov_SC05_019_OUT).elf ov_SC05_019_MAPFILE := $(ov_SC05_019_OUT).map ov_SC05_019_LD_SCRIPT := $(ov_SC05_019_OUT).ld ov_SC05_019_SPLAT_YAML := config/splat.ov_SC05_019.yaml -ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019.o,tail2.data.o,ov_SC05_019_jr_8015AE2C.o,tail3.data.o,ov_SC05_019_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019.o,tail2.data.o,ov_SC05_019_jr_8015AE2C.o,tail3.data.o,ov_SC05_019_jr_801734BC.o,tail4.data.o,ov_SC05_019_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_019_CHECK_SHA := config/check.ov_SC05_019.sha ov_SC05_019_SYMBOLS := config/symbols.ov_SC05_019.txt ov_SC05_019_SIG := .run/sig.ov_SC05_019.jsonl @@ -2485,7 +2485,7 @@ ov_SC06_006_ELF := $(ov_SC06_006_OUT).elf ov_SC06_006_MAPFILE := $(ov_SC06_006_OUT).map ov_SC06_006_LD_SCRIPT := $(ov_SC06_006_OUT).ld ov_SC06_006_SPLAT_YAML := config/splat.ov_SC06_006.yaml -ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006.o,tail2.data.o,ov_SC06_006_jr_8015AE2C.o,tail3.data.o,ov_SC06_006_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006.o,tail2.data.o,ov_SC06_006_jr_8015AE2C.o,tail3.data.o,ov_SC06_006_jr_801734BC.o,tail4.data.o,ov_SC06_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_006_CHECK_SHA := config/check.ov_SC06_006.sha ov_SC06_006_SYMBOLS := config/symbols.ov_SC06_006.txt ov_SC06_006_SIG := .run/sig.ov_SC06_006.jsonl @@ -2507,7 +2507,7 @@ ov_SC06_008_ELF := $(ov_SC06_008_OUT).elf ov_SC06_008_MAPFILE := $(ov_SC06_008_OUT).map ov_SC06_008_LD_SCRIPT := $(ov_SC06_008_OUT).ld ov_SC06_008_SPLAT_YAML := config/splat.ov_SC06_008.yaml -ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008.o,tail2.data.o,ov_SC06_008_jr_8015AE2C.o,tail3.data.o,ov_SC06_008_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008.o,tail2.data.o,ov_SC06_008_jr_8015AE2C.o,tail3.data.o,ov_SC06_008_jr_801734BC.o,tail4.data.o,ov_SC06_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_008_CHECK_SHA := config/check.ov_SC06_008.sha ov_SC06_008_SYMBOLS := config/symbols.ov_SC06_008.txt ov_SC06_008_SIG := .run/sig.ov_SC06_008.jsonl @@ -2529,7 +2529,7 @@ ov_SC06_010_ELF := $(ov_SC06_010_OUT).elf ov_SC06_010_MAPFILE := $(ov_SC06_010_OUT).map ov_SC06_010_LD_SCRIPT := $(ov_SC06_010_OUT).ld ov_SC06_010_SPLAT_YAML := config/splat.ov_SC06_010.yaml -ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010.o,tail2.data.o,ov_SC06_010_jr_8015AE2C.o,tail3.data.o,ov_SC06_010_jr_801734BC.o,tail4.data.o,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_jr_8015AE2C.o,tail3.data.o,ov_SC06_010_jr_801734BC.o,tail4.data.o,ov_SC06_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_010_CHECK_SHA := config/check.ov_SC06_010.sha ov_SC06_010_SYMBOLS := config/symbols.ov_SC06_010.txt ov_SC06_010_SIG := .run/sig.ov_SC06_010.jsonl @@ -2551,7 +2551,7 @@ ov_SC06_011_ELF := $(ov_SC06_011_OUT).elf ov_SC06_011_MAPFILE := $(ov_SC06_011_OUT).map ov_SC06_011_LD_SCRIPT := $(ov_SC06_011_OUT).ld ov_SC06_011_SPLAT_YAML := config/splat.ov_SC06_011.yaml -ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011.o,tail2.data.o,ov_SC06_011_jr_8015AE2C.o,tail3.data.o,ov_SC06_011_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011.o,tail2.data.o,ov_SC06_011_jr_8015AE2C.o,tail3.data.o,ov_SC06_011_jr_801734BC.o,tail4.data.o,ov_SC06_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_011_CHECK_SHA := config/check.ov_SC06_011.sha ov_SC06_011_SYMBOLS := config/symbols.ov_SC06_011.txt ov_SC06_011_SIG := .run/sig.ov_SC06_011.jsonl @@ -2573,7 +2573,7 @@ ov_SC06_013_ELF := $(ov_SC06_013_OUT).elf ov_SC06_013_MAPFILE := $(ov_SC06_013_OUT).map ov_SC06_013_LD_SCRIPT := $(ov_SC06_013_OUT).ld ov_SC06_013_SPLAT_YAML := config/splat.ov_SC06_013.yaml -ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013.o,tail2.data.o,ov_SC06_013_jr_8015AE2C.o,tail3.data.o,ov_SC06_013_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013.o,tail2.data.o,ov_SC06_013_jr_8015AE2C.o,tail3.data.o,ov_SC06_013_jr_801734BC.o,tail4.data.o,ov_SC06_013_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_013_CHECK_SHA := config/check.ov_SC06_013.sha ov_SC06_013_SYMBOLS := config/symbols.ov_SC06_013.txt ov_SC06_013_SIG := .run/sig.ov_SC06_013.jsonl @@ -2595,7 +2595,7 @@ ov_SC06_014_ELF := $(ov_SC06_014_OUT).elf ov_SC06_014_MAPFILE := $(ov_SC06_014_OUT).map ov_SC06_014_LD_SCRIPT := $(ov_SC06_014_OUT).ld ov_SC06_014_SPLAT_YAML := config/splat.ov_SC06_014.yaml -ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014.o,tail2.data.o,ov_SC06_014_jr_8015AE2C.o,tail3.data.o,ov_SC06_014_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014.o,tail2.data.o,ov_SC06_014_jr_8015AE2C.o,tail3.data.o,ov_SC06_014_jr_801734BC.o,tail4.data.o,ov_SC06_014_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_014_CHECK_SHA := config/check.ov_SC06_014.sha ov_SC06_014_SYMBOLS := config/symbols.ov_SC06_014.txt ov_SC06_014_SIG := .run/sig.ov_SC06_014.jsonl @@ -2617,7 +2617,7 @@ ov_SC06_015_ELF := $(ov_SC06_015_OUT).elf ov_SC06_015_MAPFILE := $(ov_SC06_015_OUT).map ov_SC06_015_LD_SCRIPT := $(ov_SC06_015_OUT).ld ov_SC06_015_SPLAT_YAML := config/splat.ov_SC06_015.yaml -ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015.o,tail2.data.o,ov_SC06_015_jr_8015AE2C.o,tail3.data.o,ov_SC06_015_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015.o,tail2.data.o,ov_SC06_015_jr_8015AE2C.o,tail3.data.o,ov_SC06_015_jr_801734BC.o,tail4.data.o,ov_SC06_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_015_CHECK_SHA := config/check.ov_SC06_015.sha ov_SC06_015_SYMBOLS := config/symbols.ov_SC06_015.txt ov_SC06_015_SIG := .run/sig.ov_SC06_015.jsonl @@ -2639,7 +2639,7 @@ ov_SC06_016_ELF := $(ov_SC06_016_OUT).elf ov_SC06_016_MAPFILE := $(ov_SC06_016_OUT).map ov_SC06_016_LD_SCRIPT := $(ov_SC06_016_OUT).ld ov_SC06_016_SPLAT_YAML := config/splat.ov_SC06_016.yaml -ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016.o,tail2.data.o,ov_SC06_016_jr_8015AE2C.o,tail3.data.o,ov_SC06_016_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016.o,tail2.data.o,ov_SC06_016_jr_8015AE2C.o,tail3.data.o,ov_SC06_016_jr_801734BC.o,tail4.data.o,ov_SC06_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_016_CHECK_SHA := config/check.ov_SC06_016.sha ov_SC06_016_SYMBOLS := config/symbols.ov_SC06_016.txt ov_SC06_016_SIG := .run/sig.ov_SC06_016.jsonl @@ -2661,7 +2661,7 @@ ov_SC06_018_ELF := $(ov_SC06_018_OUT).elf ov_SC06_018_MAPFILE := $(ov_SC06_018_OUT).map ov_SC06_018_LD_SCRIPT := $(ov_SC06_018_OUT).ld ov_SC06_018_SPLAT_YAML := config/splat.ov_SC06_018.yaml -ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018.o,tail2.data.o,ov_SC06_018_jr_8015AE2C.o,tail3.data.o,ov_SC06_018_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018.o,tail2.data.o,ov_SC06_018_jr_8015AE2C.o,tail3.data.o,ov_SC06_018_jr_801734BC.o,tail4.data.o,ov_SC06_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_018_CHECK_SHA := config/check.ov_SC06_018.sha ov_SC06_018_SYMBOLS := config/symbols.ov_SC06_018.txt ov_SC06_018_SIG := .run/sig.ov_SC06_018.jsonl @@ -2683,7 +2683,7 @@ ov_SC06_020_ELF := $(ov_SC06_020_OUT).elf ov_SC06_020_MAPFILE := $(ov_SC06_020_OUT).map ov_SC06_020_LD_SCRIPT := $(ov_SC06_020_OUT).ld ov_SC06_020_SPLAT_YAML := config/splat.ov_SC06_020.yaml -ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020.o,tail2.data.o,ov_SC06_020_jr_8015AE2C.o,tail3.data.o,ov_SC06_020_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020.o,tail2.data.o,ov_SC06_020_jr_8015AE2C.o,tail3.data.o,ov_SC06_020_jr_801734BC.o,tail4.data.o,ov_SC06_020_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_020_CHECK_SHA := config/check.ov_SC06_020.sha ov_SC06_020_SYMBOLS := config/symbols.ov_SC06_020.txt ov_SC06_020_SIG := .run/sig.ov_SC06_020.jsonl @@ -2705,7 +2705,7 @@ ov_SC06_022_ELF := $(ov_SC06_022_OUT).elf ov_SC06_022_MAPFILE := $(ov_SC06_022_OUT).map ov_SC06_022_LD_SCRIPT := $(ov_SC06_022_OUT).ld ov_SC06_022_SPLAT_YAML := config/splat.ov_SC06_022.yaml -ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,tail2.data.o,ov_SC06_022_jr_8015AE2C.o,tail3.data.o,ov_SC06_022_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,tail2.data.o,ov_SC06_022_jr_8015AE2C.o,tail3.data.o,ov_SC06_022_jr_801734BC.o,tail4.data.o,ov_SC06_022_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_022_CHECK_SHA := config/check.ov_SC06_022.sha ov_SC06_022_SYMBOLS := config/symbols.ov_SC06_022.txt ov_SC06_022_SIG := .run/sig.ov_SC06_022.jsonl @@ -2727,7 +2727,7 @@ ov_SC06_024_ELF := $(ov_SC06_024_OUT).elf ov_SC06_024_MAPFILE := $(ov_SC06_024_OUT).map ov_SC06_024_LD_SCRIPT := $(ov_SC06_024_OUT).ld ov_SC06_024_SPLAT_YAML := config/splat.ov_SC06_024.yaml -ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024.o,tail2.data.o,ov_SC06_024_jr_8015AE2C.o,tail3.data.o,ov_SC06_024_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024.o,tail2.data.o,ov_SC06_024_jr_8015AE2C.o,tail3.data.o,ov_SC06_024_jr_801734BC.o,tail4.data.o,ov_SC06_024_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_024_CHECK_SHA := config/check.ov_SC06_024.sha ov_SC06_024_SYMBOLS := config/symbols.ov_SC06_024.txt ov_SC06_024_SIG := .run/sig.ov_SC06_024.jsonl @@ -2749,7 +2749,7 @@ ov_SC06_025_ELF := $(ov_SC06_025_OUT).elf ov_SC06_025_MAPFILE := $(ov_SC06_025_OUT).map ov_SC06_025_LD_SCRIPT := $(ov_SC06_025_OUT).ld ov_SC06_025_SPLAT_YAML := config/splat.ov_SC06_025.yaml -ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025.o,tail2.data.o,ov_SC06_025_jr_8015AE2C.o,tail3.data.o,ov_SC06_025_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025.o,tail2.data.o,ov_SC06_025_jr_8015AE2C.o,tail3.data.o,ov_SC06_025_jr_801734BC.o,tail4.data.o,ov_SC06_025_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_025_CHECK_SHA := config/check.ov_SC06_025.sha ov_SC06_025_SYMBOLS := config/symbols.ov_SC06_025.txt ov_SC06_025_SIG := .run/sig.ov_SC06_025.jsonl @@ -2771,7 +2771,7 @@ ov_SC06_027_ELF := $(ov_SC06_027_OUT).elf ov_SC06_027_MAPFILE := $(ov_SC06_027_OUT).map ov_SC06_027_LD_SCRIPT := $(ov_SC06_027_OUT).ld ov_SC06_027_SPLAT_YAML := config/splat.ov_SC06_027.yaml -ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027.o,tail2.data.o,ov_SC06_027_jr_8015AE2C.o,tail3.data.o,ov_SC06_027_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027.o,tail2.data.o,ov_SC06_027_jr_8015AE2C.o,tail3.data.o,ov_SC06_027_jr_801734BC.o,tail4.data.o,ov_SC06_027_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_027_CHECK_SHA := config/check.ov_SC06_027.sha ov_SC06_027_SYMBOLS := config/symbols.ov_SC06_027.txt ov_SC06_027_SIG := .run/sig.ov_SC06_027.jsonl @@ -2793,7 +2793,7 @@ ov_SC06_029_ELF := $(ov_SC06_029_OUT).elf ov_SC06_029_MAPFILE := $(ov_SC06_029_OUT).map ov_SC06_029_LD_SCRIPT := $(ov_SC06_029_OUT).ld ov_SC06_029_SPLAT_YAML := config/splat.ov_SC06_029.yaml -ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029.o,tail2.data.o,ov_SC06_029_jr_8015AE2C.o,tail3.data.o,ov_SC06_029_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029.o,tail2.data.o,ov_SC06_029_jr_8015AE2C.o,tail3.data.o,ov_SC06_029_jr_801734BC.o,tail4.data.o,ov_SC06_029_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_029_CHECK_SHA := config/check.ov_SC06_029.sha ov_SC06_029_SYMBOLS := config/symbols.ov_SC06_029.txt ov_SC06_029_SIG := .run/sig.ov_SC06_029.jsonl @@ -2815,7 +2815,7 @@ ov_SC06_030_ELF := $(ov_SC06_030_OUT).elf ov_SC06_030_MAPFILE := $(ov_SC06_030_OUT).map ov_SC06_030_LD_SCRIPT := $(ov_SC06_030_OUT).ld ov_SC06_030_SPLAT_YAML := config/splat.ov_SC06_030.yaml -ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030.o,tail2.data.o,ov_SC06_030_jr_8015AE2C.o,tail3.data.o,ov_SC06_030_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030.o,tail2.data.o,ov_SC06_030_jr_8015AE2C.o,tail3.data.o,ov_SC06_030_jr_801734BC.o,tail4.data.o,ov_SC06_030_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_030_CHECK_SHA := config/check.ov_SC06_030.sha ov_SC06_030_SYMBOLS := config/symbols.ov_SC06_030.txt ov_SC06_030_SIG := .run/sig.ov_SC06_030.jsonl @@ -2837,7 +2837,7 @@ ov_SC06_032_ELF := $(ov_SC06_032_OUT).elf ov_SC06_032_MAPFILE := $(ov_SC06_032_OUT).map ov_SC06_032_LD_SCRIPT := $(ov_SC06_032_OUT).ld ov_SC06_032_SPLAT_YAML := config/splat.ov_SC06_032.yaml -ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032.o,tail2.data.o,ov_SC06_032_jr_8015AE2C.o,tail3.data.o,ov_SC06_032_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032.o,tail2.data.o,ov_SC06_032_jr_8015AE2C.o,tail3.data.o,ov_SC06_032_jr_801734BC.o,tail4.data.o,ov_SC06_032_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_032_CHECK_SHA := config/check.ov_SC06_032.sha ov_SC06_032_SYMBOLS := config/symbols.ov_SC06_032.txt ov_SC06_032_SIG := .run/sig.ov_SC06_032.jsonl @@ -2859,7 +2859,7 @@ ov_SC06_033_ELF := $(ov_SC06_033_OUT).elf ov_SC06_033_MAPFILE := $(ov_SC06_033_OUT).map ov_SC06_033_LD_SCRIPT := $(ov_SC06_033_OUT).ld ov_SC06_033_SPLAT_YAML := config/splat.ov_SC06_033.yaml -ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033.o,tail2.data.o,ov_SC06_033_jr_8015AE2C.o,tail3.data.o,ov_SC06_033_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033.o,tail2.data.o,ov_SC06_033_jr_8015AE2C.o,tail3.data.o,ov_SC06_033_jr_801734BC.o,tail4.data.o,ov_SC06_033_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_033_CHECK_SHA := config/check.ov_SC06_033.sha ov_SC06_033_SYMBOLS := config/symbols.ov_SC06_033.txt ov_SC06_033_SIG := .run/sig.ov_SC06_033.jsonl @@ -2881,7 +2881,7 @@ ov_SC07_001_ELF := $(ov_SC07_001_OUT).elf ov_SC07_001_MAPFILE := $(ov_SC07_001_OUT).map ov_SC07_001_LD_SCRIPT := $(ov_SC07_001_OUT).ld ov_SC07_001_SPLAT_YAML := config/splat.ov_SC07_001.yaml -ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001.o,tail2.data.o,ov_SC07_001_jr_8015AE2C.o,tail3.data.o,ov_SC07_001_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001.o,tail2.data.o,ov_SC07_001_jr_8015AE2C.o,tail3.data.o,ov_SC07_001_jr_801734BC.o,tail4.data.o,ov_SC07_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_001_CHECK_SHA := config/check.ov_SC07_001.sha ov_SC07_001_SYMBOLS := config/symbols.ov_SC07_001.txt ov_SC07_001_SIG := .run/sig.ov_SC07_001.jsonl @@ -2903,7 +2903,7 @@ ov_SC07_002_ELF := $(ov_SC07_002_OUT).elf ov_SC07_002_MAPFILE := $(ov_SC07_002_OUT).map ov_SC07_002_LD_SCRIPT := $(ov_SC07_002_OUT).ld ov_SC07_002_SPLAT_YAML := config/splat.ov_SC07_002.yaml -ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002.o,tail2.data.o,ov_SC07_002_jr_8015AE2C.o,tail3.data.o,ov_SC07_002_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002.o,tail2.data.o,ov_SC07_002_jr_8015AE2C.o,tail3.data.o,ov_SC07_002_jr_801734BC.o,tail4.data.o,ov_SC07_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_002_CHECK_SHA := config/check.ov_SC07_002.sha ov_SC07_002_SYMBOLS := config/symbols.ov_SC07_002.txt ov_SC07_002_SIG := .run/sig.ov_SC07_002.jsonl @@ -2925,7 +2925,7 @@ ov_SC07_008_ELF := $(ov_SC07_008_OUT).elf ov_SC07_008_MAPFILE := $(ov_SC07_008_OUT).map ov_SC07_008_LD_SCRIPT := $(ov_SC07_008_OUT).ld ov_SC07_008_SPLAT_YAML := config/splat.ov_SC07_008.yaml -ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008.o,tail2.data.o,ov_SC07_008_jr_8015AE2C.o,tail3.data.o,ov_SC07_008_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008.o,tail2.data.o,ov_SC07_008_jr_8015AE2C.o,tail3.data.o,ov_SC07_008_jr_801734BC.o,tail4.data.o,ov_SC07_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_008_CHECK_SHA := config/check.ov_SC07_008.sha ov_SC07_008_SYMBOLS := config/symbols.ov_SC07_008.txt ov_SC07_008_SIG := .run/sig.ov_SC07_008.jsonl @@ -2947,7 +2947,7 @@ ov_SC07_009_ELF := $(ov_SC07_009_OUT).elf ov_SC07_009_MAPFILE := $(ov_SC07_009_OUT).map ov_SC07_009_LD_SCRIPT := $(ov_SC07_009_OUT).ld ov_SC07_009_SPLAT_YAML := config/splat.ov_SC07_009.yaml -ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009.o,tail2.data.o,ov_SC07_009_jr_8015AE2C.o,tail3.data.o,ov_SC07_009_jr_801734BC.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009.o,tail2.data.o,ov_SC07_009_jr_8015AE2C.o,tail3.data.o,ov_SC07_009_jr_801734BC.o,tail4.data.o,ov_SC07_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_009_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_001.yaml b/config/splat.ov_SC01_001.yaml index 8c2276407..440417244 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_001_after] - [0x32cd4, c, ov_SC01_001_jr_8015AE2C] - [0x4b364, c, ov_SC01_001_jr_801734BC] + - [0x50be8, c, ov_SC01_001_jr_80178D40] - [0x5b6b4, data, tail] - [0xc329c, .rodata, ov_SC01_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3368, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc3d94, data, tail3] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3ea0, data, tail4] + - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc41c0, data, tail5] - [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 194caf5ea..fcb3eafbc 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_004_after] - [0x32cd4, c, ov_SC01_004_jr_8015AE2C] - [0x4b364, c, ov_SC01_004_jr_801734BC] + - [0x50be8, c, ov_SC01_004_jr_80178D40] - [0x57078, data, tail] - [0x6567c, .rodata, ov_SC01_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65748, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x66174, data, tail3] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66280, data, tail4] + - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x665a0, data, tail5] - [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 6d60c93db..edb871247 100644 --- a/config/splat.ov_SC01_005.yaml +++ b/config/splat.ov_SC01_005.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_005_after] - [0x32cd4, c, ov_SC01_005_jr_8015AE2C] - [0x4b364, c, ov_SC01_005_jr_801734BC] + - [0x50be8, c, ov_SC01_005_jr_80178D40] - [0x5a20c, data, tail] - [0xa2ddc, .rodata, ov_SC01_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2ea8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa38d4, data, tail3] - [0xa39cc, .rodata, ov_SC01_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa39e0, data, tail4] + - [0xa3b88, .rodata, ov_SC01_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3d00, data, tail5] - [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 fa7768c30..98c360642 100644 --- a/config/splat.ov_SC01_006.yaml +++ b/config/splat.ov_SC01_006.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_006_after] - [0x32cd4, c, ov_SC01_006_jr_8015AE2C] - [0x4b364, c, ov_SC01_006_jr_801734BC] + - [0x50be8, c, ov_SC01_006_jr_80178D40] - [0x5a20c, data, tail] - [0xa2ddc, .rodata, ov_SC01_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2ea8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa38d4, data, tail3] - [0xa39cc, .rodata, ov_SC01_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa39e0, data, tail4] + - [0xa3b88, .rodata, ov_SC01_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3d00, data, tail5] - [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 be141699c..518e3e014 100644 --- a/config/splat.ov_SC01_008.yaml +++ b/config/splat.ov_SC01_008.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_008_after] - [0x32cd4, c, ov_SC01_008_jr_8015AE2C] - [0x4b364, c, ov_SC01_008_jr_801734BC] + - [0x50be8, c, ov_SC01_008_jr_80178D40] - [0x575ec, data, tail] - [0x7888c, .rodata, ov_SC01_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78958, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x79384, data, tail3] - [0x7947c, .rodata, ov_SC01_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79490, data, tail4] + - [0x79638, .rodata, ov_SC01_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x797b0, data, tail5] - [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 ecf7684cc..a2066b552 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_009_after] - [0x32cd4, c, ov_SC01_009_jr_8015AE2C] - [0x4b364, c, ov_SC01_009_jr_801734BC] + - [0x50be8, c, ov_SC01_009_jr_80178D40] - [0x5a7d4, data, tail] - [0xc8650, .rodata, ov_SC01_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc871c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc9148, data, tail3] - [0xc9240, .rodata, ov_SC01_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc9254, data, tail4] + - [0xc93fc, .rodata, ov_SC01_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc9574, data, tail5] - [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 53b0db400..8dc4bdfe0 100644 --- a/config/splat.ov_SC01_074.yaml +++ b/config/splat.ov_SC01_074.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_074_after] - [0x32cd4, c, ov_SC01_074_jr_8015AE2C] - [0x4b364, c, ov_SC01_074_jr_801734BC] + - [0x50be8, c, ov_SC01_074_jr_80178D40] - [0x56454, data, tail] - [0x716e0, .rodata, ov_SC01_074] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x717ac, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x721d8, data, tail3] - [0x722d0, .rodata, ov_SC01_074_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x722e4, data, tail4] + - [0x7248c, .rodata, ov_SC01_074_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x72604, data, tail5] - [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 d7d62d740..c7a7170f9 100644 --- a/config/splat.ov_SC01_080.yaml +++ b/config/splat.ov_SC01_080.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_080_after] - [0x32cd4, c, ov_SC01_080_jr_8015AE2C] - [0x4b364, c, ov_SC01_080_jr_801734BC] + - [0x50be8, c, ov_SC01_080_jr_80178D40] - [0x5b3b4, data, tail] - [0x9b500, .rodata, ov_SC01_080] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b5cc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9bff8, data, tail3] - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c104, data, tail4] + - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c424, data, tail5] - [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 9657f8e8a..b66193f55 100644 --- a/config/splat.ov_SC01_084.yaml +++ b/config/splat.ov_SC01_084.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC01_084_after] - [0x32cd4, c, ov_SC01_084_jr_8015AE2C] - [0x4b364, c, ov_SC01_084_jr_801734BC] + - [0x50be8, c, ov_SC01_084_jr_80178D40] - [0x5e6a8, data, tail] - [0x9ced0, .rodata, ov_SC01_084] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9cf9c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9d9c8, data, tail3] - [0x9dac0, .rodata, ov_SC01_084_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9dad4, data, tail4] + - [0x9dc7c, .rodata, ov_SC01_084_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ddf4, data, tail5] - [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 90dc534b6..bf7b3d6a1 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_000_after] - [0x32cd4, c, ov_SC02_000_jr_8015AE2C] - [0x4b364, c, ov_SC02_000_jr_801734BC] + - [0x50be8, c, ov_SC02_000_jr_80178D40] - [0x57b58, c, ov_SC02_000_jr_8017FCB0] - [0x62a58, data, tail] - [0xbd724, .rodata, ov_SC02_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -106,8 +107,10 @@ segments: - [0xbe21c, data, tail3] - [0xbe314, .rodata, ov_SC02_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe328, data, tail4] + - [0xbe4d0, .rodata, ov_SC02_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe648, data, tail5] - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail5] + - [0xbe964, data, tail6] - [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 27753c7db..3c7b480ee 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_003_after] - [0x32cd4, c, ov_SC02_003_jr_8015AE2C] - [0x4b364, c, ov_SC02_003_jr_801734BC] + - [0x50be8, c, ov_SC02_003_jr_80178D40] - [0x57b58, c, ov_SC02_003_jr_8017FCB0] - [0x62a58, data, tail] - [0xbd724, .rodata, ov_SC02_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -106,8 +107,10 @@ segments: - [0xbe21c, data, tail3] - [0xbe314, .rodata, ov_SC02_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe328, data, tail4] + - [0xbe4d0, .rodata, ov_SC02_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe648, data, tail5] - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail5] + - [0xbe964, data, tail6] - [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 ec652d7ed..beffce8a4 100644 --- a/config/splat.ov_SC02_004.yaml +++ b/config/splat.ov_SC02_004.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_004_after] - [0x32cd4, c, ov_SC02_004_jr_8015AE2C] - [0x4b364, c, ov_SC02_004_jr_801734BC] + - [0x50be8, c, ov_SC02_004_jr_80178D40] - [0x55b38, data, tail] - [0x6bd34, .rodata, ov_SC02_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6be00, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6c82c, data, tail3] - [0x6c924, .rodata, ov_SC02_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c938, data, tail4] + - [0x6cae0, .rodata, ov_SC02_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cc58, data, tail5] - [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 40e14f1c1..5ff4ced7e 100644 --- a/config/splat.ov_SC02_005.yaml +++ b/config/splat.ov_SC02_005.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_005_after] - [0x32cd4, c, ov_SC02_005_jr_8015AE2C] - [0x4b364, c, ov_SC02_005_jr_801734BC] + - [0x50be8, c, ov_SC02_005_jr_80178D40] - [0x6873c, data, tail] - [0xb9a68, .rodata, ov_SC02_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb9b34, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xba560, data, tail3] - [0xba658, .rodata, ov_SC02_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xba66c, data, tail4] + - [0xba814, .rodata, ov_SC02_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba98c, data, tail5] - [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 30bf2cb5b..8ec73e090 100644 --- a/config/splat.ov_SC02_011.yaml +++ b/config/splat.ov_SC02_011.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_011_after] - [0x32cd4, c, ov_SC02_011_jr_8015AE2C] - [0x4b364, c, ov_SC02_011_jr_801734BC] + - [0x50be8, c, ov_SC02_011_jr_80178D40] - [0x68b8c, data, tail] - [0xc0bc4, .rodata, ov_SC02_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0c90, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc16bc, data, tail3] - [0xc17b4, .rodata, ov_SC02_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc17c8, data, tail4] + - [0xc1970, .rodata, ov_SC02_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1ae8, data, tail5] - [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 03b895422..11f84936f 100644 --- a/config/splat.ov_SC02_015.yaml +++ b/config/splat.ov_SC02_015.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_015_after] - [0x32cd4, c, ov_SC02_015_jr_8015AE2C] - [0x4b364, c, ov_SC02_015_jr_801734BC] + - [0x50be8, c, ov_SC02_015_jr_80178D40] - [0x560a0, data, tail] - [0x65e1c, .rodata, ov_SC02_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65ee8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x66914, data, tail3] - [0x66a0c, .rodata, ov_SC02_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66a20, data, tail4] + - [0x66bc8, .rodata, ov_SC02_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66d40, data, tail5] - [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 45627a741..adb763885 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_016_after] - [0x32cd4, c, ov_SC02_016_jr_8015AE2C] - [0x4b364, c, ov_SC02_016_jr_801734BC] + - [0x50be8, c, ov_SC02_016_jr_80178D40] - [0x5c2d8, data, tail] - [0x899fc, .rodata, ov_SC02_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89ac8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8a4f4, data, tail3] - [0x8a5ec, .rodata, ov_SC02_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8a600, data, tail4] + - [0x8a7a8, .rodata, ov_SC02_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a920, data, tail5] - [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 03d2d05e3..feac7f1d9 100644 --- a/config/splat.ov_SC02_017.yaml +++ b/config/splat.ov_SC02_017.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_017_after] - [0x32cd4, c, ov_SC02_017_jr_8015AE2C] - [0x4b364, c, ov_SC02_017_jr_801734BC] + - [0x50be8, c, ov_SC02_017_jr_80178D40] - [0x62330, data, tail] - [0xc521c, .rodata, ov_SC02_017] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc52e8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc5d14, data, tail3] - [0xc5e0c, .rodata, ov_SC02_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5e20, data, tail4] + - [0xc5fc8, .rodata, ov_SC02_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc6140, data, tail5] - [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 61b560fcd..b3466ff08 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_021_after] - [0x32cd4, c, ov_SC02_021_jr_8015AE2C] - [0x4b364, c, ov_SC02_021_jr_801734BC] + - [0x50be8, c, ov_SC02_021_jr_80178D40] - [0x57924, data, tail] - [0x68798, .rodata, ov_SC02_021] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68864, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x69290, data, tail3] - [0x69388, .rodata, ov_SC02_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6939c, data, tail4] + - [0x69544, .rodata, ov_SC02_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x696bc, data, tail5] - [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 986b61d4f..f09a27b6b 100644 --- a/config/splat.ov_SC02_026.yaml +++ b/config/splat.ov_SC02_026.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_026_after] - [0x32cd4, c, ov_SC02_026_jr_8015AE2C] - [0x4b364, c, ov_SC02_026_jr_801734BC] + - [0x50be8, c, ov_SC02_026_jr_80178D40] - [0x5df78, data, tail] - [0xa5bcc, .rodata, ov_SC02_026] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5c98, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa66c4, data, tail3] - [0xa67bc, .rodata, ov_SC02_026_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa67d0, data, tail4] + - [0xa6978, .rodata, ov_SC02_026_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6af0, data, tail5] - [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 e288d843f..ddc37ff4f 100644 --- a/config/splat.ov_SC02_027.yaml +++ b/config/splat.ov_SC02_027.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_027_after] - [0x32cd4, c, ov_SC02_027_jr_8015AE2C] - [0x4b364, c, ov_SC02_027_jr_801734BC] + - [0x50be8, c, ov_SC02_027_jr_80178D40] - [0x6309c, data, tail] - [0xaf938, .rodata, ov_SC02_027] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xafa04, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb0430, data, tail3] - [0xb0528, .rodata, ov_SC02_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb053c, data, tail4] + - [0xb06e4, .rodata, ov_SC02_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb085c, data, tail5] - [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 87ac04eb3..d07357048 100644 --- a/config/splat.ov_SC02_028.yaml +++ b/config/splat.ov_SC02_028.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_028_after] - [0x32cd4, c, ov_SC02_028_jr_8015AE2C] - [0x4b364, c, ov_SC02_028_jr_801734BC] + - [0x50be8, c, ov_SC02_028_jr_80178D40] - [0x632a0, data, tail] - [0xa88bc, .rodata, ov_SC02_028] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8988, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa93b4, data, tail3] - [0xa94ac, .rodata, ov_SC02_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa94c0, data, tail4] + - [0xa9668, .rodata, ov_SC02_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa97e0, data, tail5] - [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 f010a58f7..d692b201e 100644 --- a/config/splat.ov_SC02_031.yaml +++ b/config/splat.ov_SC02_031.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_031_after] - [0x32cd4, c, ov_SC02_031_jr_8015AE2C] - [0x4b364, c, ov_SC02_031_jr_801734BC] + - [0x50be8, c, ov_SC02_031_jr_80178D40] - [0x5cacc, data, tail] - [0x8d0b8, .rodata, ov_SC02_031] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8d184, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8dbb0, data, tail3] - [0x8dca8, .rodata, ov_SC02_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8dcbc, data, tail4] + - [0x8de64, .rodata, ov_SC02_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8dfdc, data, tail5] - [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 bb69ace1c..43a4d8117 100644 --- a/config/splat.ov_SC02_035.yaml +++ b/config/splat.ov_SC02_035.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_035_after] - [0x32cd4, c, ov_SC02_035_jr_8015AE2C] - [0x4b364, c, ov_SC02_035_jr_801734BC] + - [0x50be8, c, ov_SC02_035_jr_80178D40] - [0x5c32c, data, tail] - [0x94380, .rodata, ov_SC02_035] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9444c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x94e78, data, tail3] - [0x94f70, .rodata, ov_SC02_035_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94f84, data, tail4] + - [0x9512c, .rodata, ov_SC02_035_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x952a4, data, tail5] - [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 c6110c3c9..e991a0922 100644 --- a/config/splat.ov_SC02_039.yaml +++ b/config/splat.ov_SC02_039.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_039_after] - [0x32cd4, c, ov_SC02_039_jr_8015AE2C] - [0x4b364, c, ov_SC02_039_jr_801734BC] + - [0x50be8, c, ov_SC02_039_jr_80178D40] - [0x56f58, data, tail] - [0x7676c, .rodata, ov_SC02_039] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76838, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x77264, data, tail3] - [0x7735c, .rodata, ov_SC02_039_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77370, data, tail4] + - [0x77518, .rodata, ov_SC02_039_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77690, data, tail5] - [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 4f369a794..aad9bec28 100644 --- a/config/splat.ov_SC02_041.yaml +++ b/config/splat.ov_SC02_041.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC02_041_after] - [0x32cd4, c, ov_SC02_041_jr_8015AE2C] - [0x4b364, c, ov_SC02_041_jr_801734BC] + - [0x50be8, c, ov_SC02_041_jr_80178D40] - [0x5cc28, data, tail] - [0x8ead8, .rodata, ov_SC02_041] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8eba4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8f5d0, data, tail3] - [0x8f6c8, .rodata, ov_SC02_041_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f6dc, data, tail4] + - [0x8f884, .rodata, ov_SC02_041_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f9fc, data, tail5] - [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 aefb4448e..ceca63bbc 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_001_after] - [0x32cd4, c, ov_SC03_001_jr_8015AE2C] - [0x4b364, c, ov_SC03_001_jr_801734BC] + - [0x50be8, c, ov_SC03_001_jr_80178D40] - [0x650c8, data, tail] - [0xc3bf8, .rodata, ov_SC03_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3cc4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc46f0, data, tail3] - [0xc47e8, .rodata, ov_SC03_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc47fc, data, tail4] + - [0xc49a4, .rodata, ov_SC03_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc4b1c, data, tail5] - [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 f308beeec..15f60effa 100644 --- a/config/splat.ov_SC03_002.yaml +++ b/config/splat.ov_SC03_002.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_002_after] - [0x32cd4, c, ov_SC03_002_jr_8015AE2C] - [0x4b364, c, ov_SC03_002_jr_801734BC] + - [0x50be8, c, ov_SC03_002_jr_80178D40] - [0x5d358, data, tail] - [0xa1154, .rodata, ov_SC03_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1220, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa1c4c, data, tail3] - [0xa1d44, .rodata, ov_SC03_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1d58, data, tail4] + - [0xa1f00, .rodata, ov_SC03_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2078, data, tail5] - [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 b067a7ea4..71242a95a 100644 --- a/config/splat.ov_SC03_003.yaml +++ b/config/splat.ov_SC03_003.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_003_after] - [0x32cd4, c, ov_SC03_003_jr_8015AE2C] - [0x4b364, c, ov_SC03_003_jr_801734BC] + - [0x50be8, c, ov_SC03_003_jr_80178D40] - [0x57120, data, tail] - [0x654d4, .rodata, ov_SC03_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x655a0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x65fcc, data, tail3] - [0x660c4, .rodata, ov_SC03_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x660d8, data, tail4] + - [0x66280, .rodata, ov_SC03_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x663f8, data, tail5] - [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 51aacf52e..308ac7e09 100644 --- a/config/splat.ov_SC03_006.yaml +++ b/config/splat.ov_SC03_006.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_006_after] - [0x32cd4, c, ov_SC03_006_jr_8015AE2C] - [0x4b364, c, ov_SC03_006_jr_801734BC] + - [0x50be8, c, ov_SC03_006_jr_80178D40] - [0x6443c, data, tail] - [0xccd90, .rodata, ov_SC03_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcce5c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xcd888, data, tail3] - [0xcd980, .rodata, ov_SC03_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcd994, data, tail4] + - [0xcdb3c, .rodata, ov_SC03_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcdcb4, data, tail5] - [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 c19abae04..9d5dafc30 100644 --- a/config/splat.ov_SC03_007.yaml +++ b/config/splat.ov_SC03_007.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_007_after] - [0x32cd4, c, ov_SC03_007_jr_8015AE2C] - [0x4b364, c, ov_SC03_007_jr_801734BC] + - [0x50be8, c, ov_SC03_007_jr_80178D40] - [0x5f234, data, tail] - [0xbf718, .rodata, ov_SC03_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbf7e4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc0210, data, tail3] - [0xc0308, .rodata, ov_SC03_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc031c, data, tail4] + - [0xc04c4, .rodata, ov_SC03_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc063c, data, tail5] - [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 1e6ca351e..e2e8da635 100644 --- a/config/splat.ov_SC03_010.yaml +++ b/config/splat.ov_SC03_010.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_010_after] - [0x32cd4, c, ov_SC03_010_jr_8015AE2C] - [0x4b364, c, ov_SC03_010_jr_801734BC] + - [0x50be8, c, ov_SC03_010_jr_80178D40] - [0x57d54, data, tail] - [0x759f4, .rodata, ov_SC03_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75ac0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x764ec, data, tail3] - [0x765e4, .rodata, ov_SC03_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x765f8, data, tail4] + - [0x767a0, .rodata, ov_SC03_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76918, data, tail5] - [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 e235856f1..521e56174 100644 --- a/config/splat.ov_SC03_011.yaml +++ b/config/splat.ov_SC03_011.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_011_after] - [0x32cd4, c, ov_SC03_011_jr_8015AE2C] - [0x4b364, c, ov_SC03_011_jr_801734BC] + - [0x50be8, c, ov_SC03_011_jr_80178D40] - [0x590c4, data, tail] - [0x77c64, .rodata, ov_SC03_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77d30, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7875c, data, tail3] - [0x78854, .rodata, ov_SC03_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78868, data, tail4] + - [0x78a10, .rodata, ov_SC03_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x78b88, data, tail5] - [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 2530ad55a..5851cc64a 100644 --- a/config/splat.ov_SC03_012.yaml +++ b/config/splat.ov_SC03_012.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_012_after] - [0x32cd4, c, ov_SC03_012_jr_8015AE2C] - [0x4b364, c, ov_SC03_012_jr_801734BC] + - [0x50be8, c, ov_SC03_012_jr_80178D40] - [0x55fa4, data, tail] - [0x6aac0, .rodata, ov_SC03_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab8c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6b5b8, data, tail3] - [0x6b6b0, .rodata, ov_SC03_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b6c4, data, tail4] + - [0x6b86c, .rodata, ov_SC03_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b9e4, data, tail5] - [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 615eeb5f2..fe5d58365 100644 --- a/config/splat.ov_SC03_013.yaml +++ b/config/splat.ov_SC03_013.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_013_after] - [0x32cd4, c, ov_SC03_013_jr_8015AE2C] - [0x4b364, c, ov_SC03_013_jr_801734BC] + - [0x50be8, c, ov_SC03_013_jr_80178D40] - [0x58d8c, data, tail] - [0x82d58, .rodata, ov_SC03_013] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82e24, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x83850, data, tail3] - [0x83948, .rodata, ov_SC03_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8395c, data, tail4] + - [0x83b04, .rodata, ov_SC03_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83c7c, data, tail5] - [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 b2900096f..af7b7c075 100644 --- a/config/splat.ov_SC03_014.yaml +++ b/config/splat.ov_SC03_014.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_014_after] - [0x32cd4, c, ov_SC03_014_jr_8015AE2C] - [0x4b364, c, ov_SC03_014_jr_801734BC] + - [0x50be8, c, ov_SC03_014_jr_80178D40] - [0x633c8, data, tail] - [0xc012c, .rodata, ov_SC03_014] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc01f8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc0c24, data, tail3] - [0xc0d1c, .rodata, ov_SC03_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0d30, data, tail4] + - [0xc0ed8, .rodata, ov_SC03_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1050, data, tail5] - [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 9fee5432d..4161a838e 100644 --- a/config/splat.ov_SC03_015.yaml +++ b/config/splat.ov_SC03_015.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_015_after] - [0x32cd4, c, ov_SC03_015_jr_8015AE2C] - [0x4b364, c, ov_SC03_015_jr_801734BC] + - [0x50be8, c, ov_SC03_015_jr_80178D40] - [0x633c8, data, tail] - [0xc012c, .rodata, ov_SC03_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc01f8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc0c24, data, tail3] - [0xc0d1c, .rodata, ov_SC03_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0d30, data, tail4] + - [0xc0ed8, .rodata, ov_SC03_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1050, data, tail5] - [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 fe5854bc7..162d3d23d 100644 --- a/config/splat.ov_SC03_023.yaml +++ b/config/splat.ov_SC03_023.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_023_after] - [0x32cd4, c, ov_SC03_023_jr_8015AE2C] - [0x4b364, c, ov_SC03_023_jr_801734BC] + - [0x50be8, c, ov_SC03_023_jr_80178D40] - [0x56d44, data, tail] - [0x6e704, .rodata, ov_SC03_023] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e7d0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6f1fc, data, tail3] - [0x6f2f4, .rodata, ov_SC03_023_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6f308, data, tail4] + - [0x6f4b0, .rodata, ov_SC03_023_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6f628, data, tail5] - [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 6c1d468b3..d6f7b6f63 100644 --- a/config/splat.ov_SC03_024.yaml +++ b/config/splat.ov_SC03_024.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_024_after] - [0x32cd4, c, ov_SC03_024_jr_8015AE2C] - [0x4b364, c, ov_SC03_024_jr_801734BC] + - [0x50be8, c, ov_SC03_024_jr_80178D40] - [0x5ed68, data, tail] - [0x96b8c, .rodata, ov_SC03_024] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96c58, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x97684, data, tail3] - [0x9777c, .rodata, ov_SC03_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97790, data, tail4] + - [0x97938, .rodata, ov_SC03_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97ab0, data, tail5] - [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 3388aa3f4..eacb5a626 100644 --- a/config/splat.ov_SC03_028.yaml +++ b/config/splat.ov_SC03_028.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_028_after] - [0x32cd4, c, ov_SC03_028_jr_8015AE2C] - [0x4b364, c, ov_SC03_028_jr_801734BC] + - [0x50be8, c, ov_SC03_028_jr_80178D40] - [0x63834, data, tail] - [0xc0d14, .rodata, ov_SC03_028] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0de0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc180c, data, tail3] - [0xc1904, .rodata, ov_SC03_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc1918, data, tail4] + - [0xc1ac0, .rodata, ov_SC03_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc1c38, data, tail5] - [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 ab059291d..49f136153 100644 --- a/config/splat.ov_SC03_029.yaml +++ b/config/splat.ov_SC03_029.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_029_after] - [0x32cd4, c, ov_SC03_029_jr_8015AE2C] - [0x4b364, c, ov_SC03_029_jr_801734BC] + - [0x50be8, c, ov_SC03_029_jr_80178D40] - [0x5f66c, data, tail] - [0xaee48, .rodata, ov_SC03_029] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaef14, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xaf940, data, tail3] - [0xafa38, .rodata, ov_SC03_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xafa4c, data, tail4] + - [0xafbf4, .rodata, ov_SC03_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xafd6c, data, tail5] - [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 d5058d643..a852461b7 100644 --- a/config/splat.ov_SC03_030.yaml +++ b/config/splat.ov_SC03_030.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_030_after] - [0x32cd4, c, ov_SC03_030_jr_8015AE2C] - [0x4b364, c, ov_SC03_030_jr_801734BC] + - [0x50be8, c, ov_SC03_030_jr_80178D40] - [0x59ca8, data, tail] - [0xb74ec, .rodata, ov_SC03_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb75b8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb7fe4, data, tail3] - [0xb80dc, .rodata, ov_SC03_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb80f0, data, tail4] + - [0xb8298, .rodata, ov_SC03_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb8410, data, tail5] - [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 cbddf78ac..52324a360 100644 --- a/config/splat.ov_SC03_031.yaml +++ b/config/splat.ov_SC03_031.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_031_after] - [0x32cd4, c, ov_SC03_031_jr_8015AE2C] - [0x4b364, c, ov_SC03_031_jr_801734BC] + - [0x50be8, c, ov_SC03_031_jr_80178D40] - [0x5a1c4, data, tail] - [0x9b990, .rodata, ov_SC03_031] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ba5c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9c488, data, tail3] - [0x9c580, .rodata, ov_SC03_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c594, data, tail4] + - [0x9c73c, .rodata, ov_SC03_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c8b4, data, tail5] - [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 8b95020af..0b787ae31 100644 --- a/config/splat.ov_SC03_089.yaml +++ b/config/splat.ov_SC03_089.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_089_after] - [0x32cd4, c, ov_SC03_089_jr_8015AE2C] - [0x4b364, c, ov_SC03_089_jr_801734BC] + - [0x50be8, c, ov_SC03_089_jr_80178D40] - [0x614c0, data, tail] - [0x9c1fc, .rodata, ov_SC03_089] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c2c8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9ccf4, data, tail3] - [0x9cdec, .rodata, ov_SC03_089_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ce00, data, tail4] + - [0x9cfa8, .rodata, ov_SC03_089_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d120, data, tail5] - [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 a55014797..bed06e27b 100644 --- a/config/splat.ov_SC03_090.yaml +++ b/config/splat.ov_SC03_090.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_090_after] - [0x32cd4, c, ov_SC03_090_jr_8015AE2C] - [0x4b364, c, ov_SC03_090_jr_801734BC] + - [0x50be8, c, ov_SC03_090_jr_80178D40] - [0x638e4, data, tail] - [0xa1668, .rodata, ov_SC03_090] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1734, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa2160, data, tail3] - [0xa2258, .rodata, ov_SC03_090_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa226c, data, tail4] + - [0xa2414, .rodata, ov_SC03_090_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa258c, data, tail5] - [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 9e5928a64..0846f0c51 100644 --- a/config/splat.ov_SC03_091.yaml +++ b/config/splat.ov_SC03_091.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_091_after] - [0x32cd4, c, ov_SC03_091_jr_8015AE2C] - [0x4b364, c, ov_SC03_091_jr_801734BC] + - [0x50be8, c, ov_SC03_091_jr_80178D40] - [0x5a110, c, ov_SC03_091_jr_80182268] - [0x6478c, data, tail] - [0xa7d34, .rodata, ov_SC03_091] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -106,6 +107,8 @@ segments: - [0xa882c, data, tail3] - [0xa8924, .rodata, ov_SC03_091_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8938, data, tail4] + - [0xa8ae0, .rodata, ov_SC03_091_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa8c58, data, tail5] - [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 d6ed1c3dc..3d5d6af07 100644 --- a/config/splat.ov_SC03_092.yaml +++ b/config/splat.ov_SC03_092.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_092_after] - [0x32cd4, c, ov_SC03_092_jr_8015AE2C] - [0x4b364, c, ov_SC03_092_jr_801734BC] + - [0x50be8, c, ov_SC03_092_jr_80178D40] - [0x5cb5c, data, tail] - [0x8890c, .rodata, ov_SC03_092] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x889d8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x89404, data, tail3] - [0x894fc, .rodata, ov_SC03_092_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89510, data, tail4] + - [0x896b8, .rodata, ov_SC03_092_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89830, data, tail5] - [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 3bc8c693c..98f7b1d0c 100644 --- a/config/splat.ov_SC03_093.yaml +++ b/config/splat.ov_SC03_093.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_093_after] - [0x32cd4, c, ov_SC03_093_jr_8015AE2C] - [0x4b364, c, ov_SC03_093_jr_801734BC] + - [0x50be8, c, ov_SC03_093_jr_80178D40] - [0x5dd34, data, tail] - [0xa1d60, .rodata, ov_SC03_093] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1e2c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa2858, data, tail3] - [0xa2950, .rodata, ov_SC03_093_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2964, data, tail4] + - [0xa2b0c, .rodata, ov_SC03_093_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2c84, data, tail5] - [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 a1c0771ef..9f2a95303 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_094_after] - [0x32cd4, c, ov_SC03_094_jr_8015AE2C] - [0x4b364, c, ov_SC03_094_jr_801734BC] + - [0x50be8, c, ov_SC03_094_jr_80178D40] - [0x5f730, data, tail] - [0xa8b9c, .rodata, ov_SC03_094] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8c68, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa9694, data, tail3] - [0xa978c, .rodata, ov_SC03_094_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa97a0, data, tail4] + - [0xa9948, .rodata, ov_SC03_094_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9ac0, data, tail5] - [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 9be195a28..dd64af5d0 100644 --- a/config/splat.ov_SC03_095.yaml +++ b/config/splat.ov_SC03_095.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_095_after] - [0x32cd4, c, ov_SC03_095_jr_8015AE2C] - [0x4b364, c, ov_SC03_095_jr_801734BC] + - [0x50be8, c, ov_SC03_095_jr_80178D40] - [0x58d90, data, tail] - [0x717c8, .rodata, ov_SC03_095] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71894, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x722c0, data, tail3] - [0x723b8, .rodata, ov_SC03_095_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x723cc, data, tail4] + - [0x72574, .rodata, ov_SC03_095_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x726ec, data, tail5] - [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 18fc3d253..7ccc743f4 100644 --- a/config/splat.ov_SC03_096.yaml +++ b/config/splat.ov_SC03_096.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_096_after] - [0x32cd4, c, ov_SC03_096_jr_8015AE2C] - [0x4b364, c, ov_SC03_096_jr_801734BC] + - [0x50be8, c, ov_SC03_096_jr_80178D40] - [0x58910, data, tail] - [0x7027c, .rodata, ov_SC03_096] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70348, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x70d74, data, tail3] - [0x70e6c, .rodata, ov_SC03_096_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70e80, data, tail4] + - [0x71028, .rodata, ov_SC03_096_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x711a0, data, tail5] - [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 0e67f33b5..93d79496f 100644 --- a/config/splat.ov_SC03_097.yaml +++ b/config/splat.ov_SC03_097.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_097_after] - [0x32cd4, c, ov_SC03_097_jr_8015AE2C] - [0x4b364, c, ov_SC03_097_jr_801734BC] + - [0x50be8, c, ov_SC03_097_jr_80178D40] - [0x5dcf0, data, tail] - [0x802ec, .rodata, ov_SC03_097] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x803b8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x80de4, data, tail3] - [0x80edc, .rodata, ov_SC03_097_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80ef0, data, tail4] + - [0x81098, .rodata, ov_SC03_097_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81210, data, tail5] - [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 e0ec4c095..b025d20be 100644 --- a/config/splat.ov_SC03_098.yaml +++ b/config/splat.ov_SC03_098.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_098_after] - [0x32cd4, c, ov_SC03_098_jr_8015AE2C] - [0x4b364, c, ov_SC03_098_jr_801734BC] + - [0x50be8, c, ov_SC03_098_jr_80178D40] - [0x5d17c, data, tail] - [0x9af70, .rodata, ov_SC03_098] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b03c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9ba68, data, tail3] - [0x9bb60, .rodata, ov_SC03_098_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bb74, data, tail4] + - [0x9bd1c, .rodata, ov_SC03_098_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9be94, data, tail5] - [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 1db5655a7..b13c5145b 100644 --- a/config/splat.ov_SC03_099.yaml +++ b/config/splat.ov_SC03_099.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_099_after] - [0x32cd4, c, ov_SC03_099_jr_8015AE2C] - [0x4b364, c, ov_SC03_099_jr_801734BC] + - [0x50be8, c, ov_SC03_099_jr_80178D40] - [0x5b27c, data, tail] - [0x94c44, .rodata, ov_SC03_099] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94d10, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9573c, data, tail3] - [0x95834, .rodata, ov_SC03_099_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95848, data, tail4] + - [0x959f0, .rodata, ov_SC03_099_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x95b68, data, tail5] - [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 6d5be47cb..18f10664a 100644 --- a/config/splat.ov_SC03_100.yaml +++ b/config/splat.ov_SC03_100.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_100_after] - [0x32cd4, c, ov_SC03_100_jr_8015AE2C] - [0x4b364, c, ov_SC03_100_jr_801734BC] + - [0x50be8, c, ov_SC03_100_jr_80178D40] - [0x5c748, data, tail] - [0x9dec8, .rodata, ov_SC03_100] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9df94, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9e9c0, data, tail3] - [0x9eab8, .rodata, ov_SC03_100_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9eacc, data, tail4] + - [0x9ec74, .rodata, ov_SC03_100_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9edec, data, tail5] - [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 0b9b00727..0d54d8f4a 100644 --- a/config/splat.ov_SC03_101.yaml +++ b/config/splat.ov_SC03_101.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_101_after] - [0x32cd4, c, ov_SC03_101_jr_8015AE2C] - [0x4b364, c, ov_SC03_101_jr_801734BC] + - [0x50be8, c, ov_SC03_101_jr_80178D40] - [0x5b724, data, tail] - [0x73790, .rodata, ov_SC03_101] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7385c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x74288, data, tail3] - [0x74380, .rodata, ov_SC03_101_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74394, data, tail4] + - [0x7453c, .rodata, ov_SC03_101_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x746b4, data, tail5] - [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 96a693b09..01c48f01c 100644 --- a/config/splat.ov_SC03_102.yaml +++ b/config/splat.ov_SC03_102.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_102_after] - [0x32cd4, c, ov_SC03_102_jr_8015AE2C] - [0x4b364, c, ov_SC03_102_jr_801734BC] + - [0x50be8, c, ov_SC03_102_jr_80178D40] - [0x5dfdc, data, tail] - [0x8f40c, .rodata, ov_SC03_102] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f4d8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8ff04, data, tail3] - [0x8fffc, .rodata, ov_SC03_102_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90010, data, tail4] + - [0x901b8, .rodata, ov_SC03_102_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90330, data, tail5] - [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 3da1cdae9..0162e9498 100644 --- a/config/splat.ov_SC03_103.yaml +++ b/config/splat.ov_SC03_103.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_103_after] - [0x32cd4, c, ov_SC03_103_jr_8015AE2C] - [0x4b364, c, ov_SC03_103_jr_801734BC] + - [0x50be8, c, ov_SC03_103_jr_80178D40] - [0x5bf8c, data, tail] - [0x9a5c0, .rodata, ov_SC03_103] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a68c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9b0b8, data, tail3] - [0x9b1b0, .rodata, ov_SC03_103_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b1c4, data, tail4] + - [0x9b36c, .rodata, ov_SC03_103_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b4e4, data, tail5] - [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 a1d90dd6f..13156a0b3 100644 --- a/config/splat.ov_SC03_104.yaml +++ b/config/splat.ov_SC03_104.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_104_after] - [0x32cd4, c, ov_SC03_104_jr_8015AE2C] - [0x4b364, c, ov_SC03_104_jr_801734BC] + - [0x50be8, c, ov_SC03_104_jr_80178D40] - [0x62b1c, data, tail] - [0x95b20, .rodata, ov_SC03_104] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95bec, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x96618, data, tail3] - [0x96710, .rodata, ov_SC03_104_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96724, data, tail4] + - [0x968cc, .rodata, ov_SC03_104_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x96a44, data, tail5] - [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 3d0e5e328..f396eff50 100644 --- a/config/splat.ov_SC03_105.yaml +++ b/config/splat.ov_SC03_105.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_105_after] - [0x32cd4, c, ov_SC03_105_jr_8015AE2C] - [0x4b364, c, ov_SC03_105_jr_801734BC] + - [0x50be8, c, ov_SC03_105_jr_80178D40] - [0x621a4, data, tail] - [0x8ee18, .rodata, ov_SC03_105] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8eee4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8f910, data, tail3] - [0x8fa08, .rodata, ov_SC03_105_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fa1c, data, tail4] + - [0x8fbc4, .rodata, ov_SC03_105_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fd3c, data, tail5] - [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 17adf961b..98ceea828 100644 --- a/config/splat.ov_SC03_108.yaml +++ b/config/splat.ov_SC03_108.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_108_after] - [0x32cd4, c, ov_SC03_108_jr_8015AE2C] - [0x4b364, c, ov_SC03_108_jr_801734BC] + - [0x50be8, c, ov_SC03_108_jr_80178D40] - [0x58afc, data, tail] - [0x77320, .rodata, ov_SC03_108] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x773ec, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x77e18, data, tail3] - [0x77f10, .rodata, ov_SC03_108_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77f24, data, tail4] + - [0x780cc, .rodata, ov_SC03_108_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x78244, data, tail5] - [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 4d3906c09..20f6e567c 100644 --- a/config/splat.ov_SC03_109.yaml +++ b/config/splat.ov_SC03_109.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_109_after] - [0x32cd4, c, ov_SC03_109_jr_8015AE2C] - [0x4b364, c, ov_SC03_109_jr_801734BC] + - [0x50be8, c, ov_SC03_109_jr_80178D40] - [0x561a8, data, tail] - [0x6fe30, .rodata, ov_SC03_109] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6fefc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x70928, data, tail3] - [0x70a20, .rodata, ov_SC03_109_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70a34, data, tail4] + - [0x70bdc, .rodata, ov_SC03_109_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70d54, data, tail5] - [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 b0ca638ed..d722fba4e 100644 --- a/config/splat.ov_SC03_110.yaml +++ b/config/splat.ov_SC03_110.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_110_after] - [0x32cd4, c, ov_SC03_110_jr_8015AE2C] - [0x4b364, c, ov_SC03_110_jr_801734BC] + - [0x50be8, c, ov_SC03_110_jr_80178D40] - [0x59bc8, data, tail] - [0x77acc, .rodata, ov_SC03_110] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77b98, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x785c4, data, tail3] - [0x786bc, .rodata, ov_SC03_110_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x786d0, data, tail4] + - [0x78878, .rodata, ov_SC03_110_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x789f0, data, tail5] - [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 31854e7e9..31a99c66f 100644 --- a/config/splat.ov_SC03_111.yaml +++ b/config/splat.ov_SC03_111.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_111_after] - [0x32cd4, c, ov_SC03_111_jr_8015AE2C] - [0x4b364, c, ov_SC03_111_jr_801734BC] + - [0x50be8, c, ov_SC03_111_jr_80178D40] - [0x5c77c, data, tail] - [0x8f04c, .rodata, ov_SC03_111] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f118, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8fb44, data, tail3] - [0x8fc3c, .rodata, ov_SC03_111_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fc50, data, tail4] + - [0x8fdf8, .rodata, ov_SC03_111_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8ff70, data, tail5] - [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 e58aa8d59..1038496e8 100644 --- a/config/splat.ov_SC03_112.yaml +++ b/config/splat.ov_SC03_112.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_112_after] - [0x32cd4, c, ov_SC03_112_jr_8015AE2C] - [0x4b364, c, ov_SC03_112_jr_801734BC] + - [0x50be8, c, ov_SC03_112_jr_80178D40] - [0x5d584, data, tail] - [0x827b4, .rodata, ov_SC03_112] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82880, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x832ac, data, tail3] - [0x833a4, .rodata, ov_SC03_112_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x833b8, data, tail4] + - [0x83560, .rodata, ov_SC03_112_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x836d8, data, tail5] - [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 61ebb1182..179fb69ea 100644 --- a/config/splat.ov_SC03_113.yaml +++ b/config/splat.ov_SC03_113.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_113_after] - [0x32cd4, c, ov_SC03_113_jr_8015AE2C] - [0x4b364, c, ov_SC03_113_jr_801734BC] + - [0x50be8, c, ov_SC03_113_jr_80178D40] - [0x5ac34, data, tail] - [0x7b43c, .rodata, ov_SC03_113] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7b508, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7bf34, data, tail3] - [0x7c02c, .rodata, ov_SC03_113_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7c040, data, tail4] + - [0x7c1e8, .rodata, ov_SC03_113_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7c360, data, tail5] - [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 5cf500b6b..de7a3a221 100644 --- a/config/splat.ov_SC03_114.yaml +++ b/config/splat.ov_SC03_114.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_114_after] - [0x32cd4, c, ov_SC03_114_jr_8015AE2C] - [0x4b364, c, ov_SC03_114_jr_801734BC] + - [0x50be8, c, ov_SC03_114_jr_80178D40] - [0x5689c, data, tail] - [0x7f148, .rodata, ov_SC03_114] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f214, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7fc40, data, tail3] - [0x7fd38, .rodata, ov_SC03_114_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fd4c, data, tail4] + - [0x7fef4, .rodata, ov_SC03_114_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8006c, data, tail5] - [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 ddbae4622..99212de90 100644 --- a/config/splat.ov_SC03_115.yaml +++ b/config/splat.ov_SC03_115.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_115_after] - [0x32cd4, c, ov_SC03_115_jr_8015AE2C] - [0x4b364, c, ov_SC03_115_jr_801734BC] + - [0x50be8, c, ov_SC03_115_jr_80178D40] - [0x58308, data, tail] - [0x6aabc, .rodata, ov_SC03_115] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab88, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6b5b4, data, tail3] - [0x6b6ac, .rodata, ov_SC03_115_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b6c0, data, tail4] + - [0x6b868, .rodata, ov_SC03_115_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b9e0, data, tail5] - [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 b6a415e91..2864ea992 100644 --- a/config/splat.ov_SC03_116.yaml +++ b/config/splat.ov_SC03_116.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_116_after] - [0x32cd4, c, ov_SC03_116_jr_8015AE2C] - [0x4b364, c, ov_SC03_116_jr_801734BC] + - [0x50be8, c, ov_SC03_116_jr_80178D40] - [0x5a70c, data, tail] - [0x6d658, .rodata, ov_SC03_116] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6d724, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6e150, data, tail3] - [0x6e248, .rodata, ov_SC03_116_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e25c, data, tail4] + - [0x6e404, .rodata, ov_SC03_116_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e57c, data, tail5] - [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 00d6028e4..5051a2840 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_117_after] - [0x32cd4, c, ov_SC03_117_jr_8015AE2C] - [0x4b364, c, ov_SC03_117_jr_801734BC] + - [0x50be8, c, ov_SC03_117_jr_80178D40] - [0x5c718, data, tail] - [0xa3cf8, .rodata, ov_SC03_117] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3dc4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa47f0, data, tail3] - [0xa48e8, .rodata, ov_SC03_117_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa48fc, data, tail4] + - [0xa4aa4, .rodata, ov_SC03_117_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa4c1c, data, tail5] - [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 ea77a7d24..81d29507d 100644 --- a/config/splat.ov_SC03_118.yaml +++ b/config/splat.ov_SC03_118.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_118_after] - [0x32cd4, c, ov_SC03_118_jr_8015AE2C] - [0x4b364, c, ov_SC03_118_jr_801734BC] + - [0x50be8, c, ov_SC03_118_jr_80178D40] - [0x617c4, data, tail] - [0xa9c54, .rodata, ov_SC03_118] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9d20, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xaa74c, data, tail3] - [0xaa844, .rodata, ov_SC03_118_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa858, data, tail4] + - [0xaaa00, .rodata, ov_SC03_118_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaab78, data, tail5] - [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 963687a5e..fcb2c4b17 100644 --- a/config/splat.ov_SC03_119.yaml +++ b/config/splat.ov_SC03_119.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_119_after] - [0x32cd4, c, ov_SC03_119_jr_8015AE2C] - [0x4b364, c, ov_SC03_119_jr_801734BC] + - [0x50be8, c, ov_SC03_119_jr_80178D40] - [0x617c4, data, tail] - [0xa9c54, .rodata, ov_SC03_119] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9d20, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xaa74c, data, tail3] - [0xaa844, .rodata, ov_SC03_119_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa858, data, tail4] + - [0xaaa00, .rodata, ov_SC03_119_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaab78, data, tail5] - [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 0d4b8a18e..e7870af44 100644 --- a/config/splat.ov_SC03_121.yaml +++ b/config/splat.ov_SC03_121.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_121_after] - [0x32cd4, c, ov_SC03_121_jr_8015AE2C] - [0x4b364, c, ov_SC03_121_jr_801734BC] + - [0x50be8, c, ov_SC03_121_jr_80178D40] - [0x59fe0, data, tail] - [0x8475c, .rodata, ov_SC03_121] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84828, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x85254, data, tail3] - [0x8534c, .rodata, ov_SC03_121_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x85360, data, tail4] + - [0x85508, .rodata, ov_SC03_121_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85680, data, tail5] - [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 3cab68b0c..b16319d40 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_124_after] - [0x32cd4, c, ov_SC03_124_jr_8015AE2C] - [0x4b364, c, ov_SC03_124_jr_801734BC] + - [0x50be8, c, ov_SC03_124_jr_80178D40] - [0x6276c, data, tail] - [0xb6eb0, .rodata, ov_SC03_124] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb6f7c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb79a8, data, tail3] - [0xb7aa0, .rodata, ov_SC03_124_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7ab4, data, tail4] + - [0xb7c5c, .rodata, ov_SC03_124_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7dd4, data, tail5] - [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 a6ec5cd2b..ae9af3f67 100644 --- a/config/splat.ov_SC03_125.yaml +++ b/config/splat.ov_SC03_125.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_125_after] - [0x32cd4, c, ov_SC03_125_jr_8015AE2C] - [0x4b364, c, ov_SC03_125_jr_801734BC] + - [0x50be8, c, ov_SC03_125_jr_80178D40] - [0x5bbdc, data, tail] - [0x99b9c, .rodata, ov_SC03_125] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x99c68, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9a694, data, tail3] - [0x9a78c, .rodata, ov_SC03_125_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a7a0, data, tail4] + - [0x9a948, .rodata, ov_SC03_125_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9aac0, data, tail5] - [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 149745949..482bdd56c 100644 --- a/config/splat.ov_SC03_126.yaml +++ b/config/splat.ov_SC03_126.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC03_126_after] - [0x32cd4, c, ov_SC03_126_jr_8015AE2C] - [0x4b364, c, ov_SC03_126_jr_801734BC] + - [0x50be8, c, ov_SC03_126_jr_80178D40] - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC03_126] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x65f80, data, tail3] - [0x66078, .rodata, ov_SC03_126_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6608c, data, tail4] + - [0x66234, .rodata, ov_SC03_126_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x663ac, data, tail5] - [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 f41d5c4d6..3e9e30e87 100644 --- a/config/splat.ov_SC04_000.yaml +++ b/config/splat.ov_SC04_000.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_000_after] - [0x32cd4, c, ov_SC04_000_jr_8015AE2C] - [0x4b364, c, ov_SC04_000_jr_801734BC] + - [0x50be8, c, ov_SC04_000_jr_80178D40] - [0x5b0e0, data, tail] - [0x7f504, .rodata, ov_SC04_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f5d0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7fffc, data, tail3] - [0x800f4, .rodata, ov_SC04_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80108, data, tail4] + - [0x802b0, .rodata, ov_SC04_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80428, data, tail5] - [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 560437e34..c6ec9da18 100644 --- a/config/splat.ov_SC04_002.yaml +++ b/config/splat.ov_SC04_002.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_002_after] - [0x32cd4, c, ov_SC04_002_jr_8015AE2C] - [0x4b364, c, ov_SC04_002_jr_801734BC] + - [0x50be8, c, ov_SC04_002_jr_80178D40] - [0x6024c, data, tail] - [0x96854, .rodata, ov_SC04_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96920, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9734c, data, tail3] - [0x97444, .rodata, ov_SC04_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97458, data, tail4] + - [0x97600, .rodata, ov_SC04_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97778, data, tail5] - [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 760ad34c3..79fa87ed3 100644 --- a/config/splat.ov_SC04_003.yaml +++ b/config/splat.ov_SC04_003.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_003_after] - [0x32cd4, c, ov_SC04_003_jr_8015AE2C] - [0x4b364, c, ov_SC04_003_jr_801734BC] + - [0x50be8, c, ov_SC04_003_jr_80178D40] - [0x59fe8, data, tail] - [0x714d0, .rodata, ov_SC04_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7159c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x71fc8, data, tail3] - [0x720c0, .rodata, ov_SC04_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x720d4, data, tail4] + - [0x7227c, .rodata, ov_SC04_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x723f4, data, tail5] - [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 8087d083c..0b6c2527c 100644 --- a/config/splat.ov_SC04_004.yaml +++ b/config/splat.ov_SC04_004.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_004_after] - [0x32cd4, c, ov_SC04_004_jr_8015AE2C] - [0x4b364, c, ov_SC04_004_jr_801734BC] + - [0x50be8, c, ov_SC04_004_jr_80178D40] - [0x5c51c, data, tail] - [0x892cc, .rodata, ov_SC04_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89398, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x89dc4, data, tail3] - [0x89ebc, .rodata, ov_SC04_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89ed0, data, tail4] + - [0x8a078, .rodata, ov_SC04_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a1f0, data, tail5] - [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 b25e3fc38..7f4f2ab5e 100644 --- a/config/splat.ov_SC04_005.yaml +++ b/config/splat.ov_SC04_005.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_005_after] - [0x32cd4, c, ov_SC04_005_jr_8015AE2C] - [0x4b364, c, ov_SC04_005_jr_801734BC] + - [0x50be8, c, ov_SC04_005_jr_80178D40] - [0x5f950, data, tail] - [0x97490, .rodata, ov_SC04_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9755c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x97f88, data, tail3] - [0x98080, .rodata, ov_SC04_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x98094, data, tail4] + - [0x9823c, .rodata, ov_SC04_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x983b4, data, tail5] - [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 385bd6724..30e580409 100644 --- a/config/splat.ov_SC04_006.yaml +++ b/config/splat.ov_SC04_006.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_006_after] - [0x32cd4, c, ov_SC04_006_jr_8015AE2C] - [0x4b364, c, ov_SC04_006_jr_801734BC] + - [0x50be8, c, ov_SC04_006_jr_80178D40] - [0x57a30, data, tail] - [0x73738, .rodata, ov_SC04_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73804, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x74230, data, tail3] - [0x74328, .rodata, ov_SC04_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7433c, data, tail4] + - [0x744e4, .rodata, ov_SC04_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7465c, data, tail5] - [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 5ec243853..63f1b9f26 100644 --- a/config/splat.ov_SC04_007.yaml +++ b/config/splat.ov_SC04_007.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_007_after] - [0x32cd4, c, ov_SC04_007_jr_8015AE2C] - [0x4b364, c, ov_SC04_007_jr_801734BC] + - [0x50be8, c, ov_SC04_007_jr_80178D40] - [0x5d9e8, data, tail] - [0x8acf4, .rodata, ov_SC04_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8adc0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8b7ec, data, tail3] - [0x8b8e4, .rodata, ov_SC04_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b8f8, data, tail4] + - [0x8baa0, .rodata, ov_SC04_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8bc18, data, tail5] - [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 255880d55..bd23482e9 100644 --- a/config/splat.ov_SC04_008.yaml +++ b/config/splat.ov_SC04_008.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_008_after] - [0x32cd4, c, ov_SC04_008_jr_8015AE2C] - [0x4b364, c, ov_SC04_008_jr_801734BC] + - [0x50be8, c, ov_SC04_008_jr_80178D40] - [0x56920, data, tail] - [0x679dc, .rodata, ov_SC04_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x67aa8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x684d4, data, tail3] - [0x685cc, .rodata, ov_SC04_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x685e0, data, tail4] + - [0x68788, .rodata, ov_SC04_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68900, data, tail5] - [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 4c1a36c8f..520955af2 100644 --- a/config/splat.ov_SC04_009.yaml +++ b/config/splat.ov_SC04_009.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_009_after] - [0x32cd4, c, ov_SC04_009_jr_8015AE2C] - [0x4b364, c, ov_SC04_009_jr_801734BC] + - [0x50be8, c, ov_SC04_009_jr_80178D40] - [0x5694c, data, tail] - [0x6dbf0, .rodata, ov_SC04_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6dcbc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6e6e8, data, tail3] - [0x6e7e0, .rodata, ov_SC04_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e7f4, data, tail4] + - [0x6e99c, .rodata, ov_SC04_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6eb14, data, tail5] - [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 848cf3586..6d92c6b8b 100644 --- a/config/splat.ov_SC04_010.yaml +++ b/config/splat.ov_SC04_010.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_010_after] - [0x32cd4, c, ov_SC04_010_jr_8015AE2C] - [0x4b364, c, ov_SC04_010_jr_801734BC] + - [0x50be8, c, ov_SC04_010_jr_80178D40] - [0x55ff8, data, tail] - [0x6507c, .rodata, ov_SC04_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65148, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x65b74, data, tail3] - [0x65c6c, .rodata, ov_SC04_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65c80, data, tail4] + - [0x65e28, .rodata, ov_SC04_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65fa0, data, tail5] - [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 a631229b5..e53721bc8 100644 --- a/config/splat.ov_SC04_011.yaml +++ b/config/splat.ov_SC04_011.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_011_after] - [0x32cd4, c, ov_SC04_011_jr_8015AE2C] - [0x4b364, c, ov_SC04_011_jr_801734BC] + - [0x50be8, c, ov_SC04_011_jr_80178D40] - [0x68288, data, tail] - [0xc4618, .rodata, ov_SC04_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc46e4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc5110, data, tail3] - [0xc5208, .rodata, ov_SC04_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc521c, data, tail4] + - [0xc53c4, .rodata, ov_SC04_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc553c, data, tail5] - [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 937987201..1960947d7 100644 --- a/config/splat.ov_SC04_012.yaml +++ b/config/splat.ov_SC04_012.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_012_after] - [0x32cd4, c, ov_SC04_012_jr_8015AE2C] - [0x4b364, c, ov_SC04_012_jr_801734BC] + - [0x50be8, c, ov_SC04_012_jr_80178D40] - [0x5645c, data, tail] - [0x6775c, .rodata, ov_SC04_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x67828, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x68254, data, tail3] - [0x6834c, .rodata, ov_SC04_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68360, data, tail4] + - [0x68508, .rodata, ov_SC04_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68680, data, tail5] - [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 4eca4cc50..5b947ad3d 100644 --- a/config/splat.ov_SC04_015.yaml +++ b/config/splat.ov_SC04_015.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_015_after] - [0x32cd4, c, ov_SC04_015_jr_8015AE2C] - [0x4b364, c, ov_SC04_015_jr_801734BC] + - [0x50be8, c, ov_SC04_015_jr_80178D40] - [0x5c38c, data, tail] - [0x9e3f4, .rodata, ov_SC04_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e4c0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9eeec, data, tail3] - [0x9efe4, .rodata, ov_SC04_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9eff8, data, tail4] + - [0x9f1a0, .rodata, ov_SC04_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9f318, data, tail5] - [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 ce59015f6..14592b4bb 100644 --- a/config/splat.ov_SC04_016.yaml +++ b/config/splat.ov_SC04_016.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_016_after] - [0x32cd4, c, ov_SC04_016_jr_8015AE2C] - [0x4b364, c, ov_SC04_016_jr_801734BC] + - [0x50be8, c, ov_SC04_016_jr_80178D40] - [0x57e58, data, tail] - [0x7c5ac, .rodata, ov_SC04_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7c678, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7d0a4, data, tail3] - [0x7d19c, .rodata, ov_SC04_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7d1b0, data, tail4] + - [0x7d358, .rodata, ov_SC04_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7d4d0, data, tail5] - [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 6f53cabba..51bbe19c8 100644 --- a/config/splat.ov_SC04_018.yaml +++ b/config/splat.ov_SC04_018.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_018_after] - [0x32cd4, c, ov_SC04_018_jr_8015AE2C] - [0x4b364, c, ov_SC04_018_jr_801734BC] + - [0x50be8, c, ov_SC04_018_jr_80178D40] - [0x64dd0, data, tail] - [0xbc3c4, .rodata, ov_SC04_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc490, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xbcebc, data, tail3] - [0xbcfb4, .rodata, ov_SC04_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcfc8, data, tail4] + - [0xbd170, .rodata, ov_SC04_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbd2e8, data, tail5] - [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 d82abff72..d8ffa3bc6 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_019_after] - [0x32cd4, c, ov_SC04_019_jr_8015AE2C] - [0x4b364, c, ov_SC04_019_jr_801734BC] + - [0x50be8, c, ov_SC04_019_jr_80178D40] - [0x64dd0, data, tail] - [0xbc3c4, .rodata, ov_SC04_019] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc490, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xbcebc, data, tail3] - [0xbcfb4, .rodata, ov_SC04_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcfc8, data, tail4] + - [0xbd170, .rodata, ov_SC04_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbd2e8, data, tail5] - [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 b92acd826..0e61640f7 100644 --- a/config/splat.ov_SC04_020.yaml +++ b/config/splat.ov_SC04_020.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_020_after] - [0x32cd4, c, ov_SC04_020_jr_8015AE2C] - [0x4b364, c, ov_SC04_020_jr_801734BC] + - [0x50be8, c, ov_SC04_020_jr_80178D40] - [0x5b1a8, data, tail] - [0x91dec, .rodata, ov_SC04_020] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x91eb8, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x928e4, data, tail3] - [0x929dc, .rodata, ov_SC04_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x929f0, data, tail4] + - [0x92b98, .rodata, ov_SC04_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x92d10, data, tail5] - [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 a477e326b..5836c17a2 100644 --- a/config/splat.ov_SC04_021.yaml +++ b/config/splat.ov_SC04_021.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC04_021_after] - [0x32cd4, c, ov_SC04_021_jr_8015AE2C] - [0x4b364, c, ov_SC04_021_jr_801734BC] + - [0x50be8, c, ov_SC04_021_jr_80178D40] - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC04_021] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x65f80, data, tail3] - [0x66078, .rodata, ov_SC04_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6608c, data, tail4] + - [0x66234, .rodata, ov_SC04_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x663ac, data, tail5] - [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 a59f4ab7e..2180c4225 100644 --- a/config/splat.ov_SC05_000.yaml +++ b/config/splat.ov_SC05_000.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_000_after] - [0x32cd4, c, ov_SC05_000_jr_8015AE2C] - [0x4b364, c, ov_SC05_000_jr_801734BC] + - [0x50be8, c, ov_SC05_000_jr_80178D40] - [0x560e8, data, tail] - [0x705d8, .rodata, ov_SC05_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x706a4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x710d0, data, tail3] - [0x711c8, .rodata, ov_SC05_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x711dc, data, tail4] + - [0x71384, .rodata, ov_SC05_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x714fc, data, tail5] - [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 6f36d7a13..00c4f974e 100644 --- a/config/splat.ov_SC05_001.yaml +++ b/config/splat.ov_SC05_001.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_001_after] - [0x32cd4, c, ov_SC05_001_jr_8015AE2C] - [0x4b364, c, ov_SC05_001_jr_801734BC] + - [0x50be8, c, ov_SC05_001_jr_80178D40] - [0x5d8c4, data, tail] - [0x8b58c, .rodata, ov_SC05_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b658, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8c084, data, tail3] - [0x8c17c, .rodata, ov_SC05_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8c190, data, tail4] + - [0x8c338, .rodata, ov_SC05_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8c4b0, data, tail5] - [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 fa95bedb9..556e23427 100644 --- a/config/splat.ov_SC05_002.yaml +++ b/config/splat.ov_SC05_002.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_002_after] - [0x32cd4, c, ov_SC05_002_jr_8015AE2C] - [0x4b364, c, ov_SC05_002_jr_801734BC] + - [0x50be8, c, ov_SC05_002_jr_80178D40] - [0x58084, data, tail] - [0x75938, .rodata, ov_SC05_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75a04, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x76430, data, tail3] - [0x76528, .rodata, ov_SC05_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7653c, data, tail4] + - [0x766e4, .rodata, ov_SC05_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7685c, data, tail5] - [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 87af23717..a252b29af 100644 --- a/config/splat.ov_SC05_003.yaml +++ b/config/splat.ov_SC05_003.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_003_after] - [0x32cd4, c, ov_SC05_003_jr_8015AE2C] - [0x4b364, c, ov_SC05_003_jr_801734BC] + - [0x50be8, c, ov_SC05_003_jr_80178D40] - [0x5a3bc, data, tail] - [0x82434, .rodata, ov_SC05_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82500, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x82f2c, data, tail3] - [0x83024, .rodata, ov_SC05_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83038, data, tail4] + - [0x831e0, .rodata, ov_SC05_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83358, data, tail5] - [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 e2b859e95..e830bde3a 100644 --- a/config/splat.ov_SC05_004.yaml +++ b/config/splat.ov_SC05_004.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_004_after] - [0x32cd4, c, ov_SC05_004_jr_8015AE2C] - [0x4b364, c, ov_SC05_004_jr_801734BC] + - [0x50be8, c, ov_SC05_004_jr_80178D40] - [0x594c8, data, tail] - [0x74a28, .rodata, ov_SC05_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74af4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x75520, data, tail3] - [0x75618, .rodata, ov_SC05_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7562c, data, tail4] + - [0x757d4, .rodata, ov_SC05_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7594c, data, tail5] - [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 94d842c9a..15a4b8099 100644 --- a/config/splat.ov_SC05_005.yaml +++ b/config/splat.ov_SC05_005.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_005_after] - [0x32cd4, c, ov_SC05_005_jr_8015AE2C] - [0x4b364, c, ov_SC05_005_jr_801734BC] + - [0x50be8, c, ov_SC05_005_jr_80178D40] - [0x5a29c, data, tail] - [0x87710, .rodata, ov_SC05_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x877dc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x88208, data, tail3] - [0x88300, .rodata, ov_SC05_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x88314, data, tail4] + - [0x884bc, .rodata, ov_SC05_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x88634, data, tail5] - [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 1fd419559..70c58673a 100644 --- a/config/splat.ov_SC05_006.yaml +++ b/config/splat.ov_SC05_006.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_006_after] - [0x32cd4, c, ov_SC05_006_jr_8015AE2C] - [0x4b364, c, ov_SC05_006_jr_801734BC] + - [0x50be8, c, ov_SC05_006_jr_80178D40] - [0x572bc, data, tail] - [0x65860, .rodata, ov_SC05_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6592c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x66358, data, tail3] - [0x66450, .rodata, ov_SC05_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66464, data, tail4] + - [0x6660c, .rodata, ov_SC05_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66784, data, tail5] - [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 05cd9b56e..dbae2817f 100644 --- a/config/splat.ov_SC05_007.yaml +++ b/config/splat.ov_SC05_007.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_007_after] - [0x32cd4, c, ov_SC05_007_jr_8015AE2C] - [0x4b364, c, ov_SC05_007_jr_801734BC] + - [0x50be8, c, ov_SC05_007_jr_80178D40] - [0x588b8, data, tail] - [0x72838, .rodata, ov_SC05_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72904, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x73330, data, tail3] - [0x73428, .rodata, ov_SC05_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7343c, data, tail4] + - [0x735e4, .rodata, ov_SC05_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7375c, data, tail5] - [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 5b9f98cf0..97cd8af1d 100644 --- a/config/splat.ov_SC05_008.yaml +++ b/config/splat.ov_SC05_008.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_008_after] - [0x32cd4, c, ov_SC05_008_jr_8015AE2C] - [0x4b364, c, ov_SC05_008_jr_801734BC] + - [0x50be8, c, ov_SC05_008_jr_80178D40] - [0x5a810, data, tail] - [0x76b6c, .rodata, ov_SC05_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76c38, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x77664, data, tail3] - [0x7775c, .rodata, ov_SC05_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77770, data, tail4] + - [0x77918, .rodata, ov_SC05_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77a90, data, tail5] - [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 4f5b734ef..0b7d25371 100644 --- a/config/splat.ov_SC05_009.yaml +++ b/config/splat.ov_SC05_009.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_009_after] - [0x32cd4, c, ov_SC05_009_jr_8015AE2C] - [0x4b364, c, ov_SC05_009_jr_801734BC] + - [0x50be8, c, ov_SC05_009_jr_80178D40] - [0x56920, data, tail] - [0x6c580, .rodata, ov_SC05_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c64c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6d078, data, tail3] - [0x6d170, .rodata, ov_SC05_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6d184, data, tail4] + - [0x6d32c, .rodata, ov_SC05_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6d4a4, data, tail5] - [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 0d9a825b5..0a131539e 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_010_after] - [0x32cd4, c, ov_SC05_010_jr_8015AE2C] - [0x4b364, c, ov_SC05_010_jr_801734BC] + - [0x50be8, c, ov_SC05_010_jr_80178D40] - [0x607fc, data, tail] - [0x9c7b4, .rodata, ov_SC05_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c880, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x9d2ac, data, tail3] - [0x9d3a4, .rodata, ov_SC05_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d3b8, data, tail4] + - [0x9d560, .rodata, ov_SC05_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d6d8, data, tail5] - [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 5ca7dd970..1e5c89813 100644 --- a/config/splat.ov_SC05_011.yaml +++ b/config/splat.ov_SC05_011.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_011_after] - [0x32cd4, c, ov_SC05_011_jr_8015AE2C] - [0x4b364, c, ov_SC05_011_jr_801734BC] + - [0x50be8, c, ov_SC05_011_jr_80178D40] - [0x55b74, data, tail] - [0x72b18, .rodata, ov_SC05_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72be4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x73610, data, tail3] - [0x73708, .rodata, ov_SC05_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7371c, data, tail4] + - [0x738c4, .rodata, ov_SC05_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73a3c, data, tail5] - [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 68a09b756..8c2f6ea8e 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_017_after] - [0x32cd4, c, ov_SC05_017_jr_8015AE2C] - [0x4b364, c, ov_SC05_017_jr_801734BC] + - [0x50be8, c, ov_SC05_017_jr_80178D40] - [0x64d94, data, tail] - [0xc2200, .rodata, ov_SC05_017] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc22cc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xc2cf8, data, tail3] - [0xc2df0, .rodata, ov_SC05_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2e04, data, tail4] + - [0xc2fac, .rodata, ov_SC05_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3124, data, tail5] - [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 b00a4b028..669386a40 100644 --- a/config/splat.ov_SC05_018.yaml +++ b/config/splat.ov_SC05_018.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_018_after] - [0x32cd4, c, ov_SC05_018_jr_8015AE2C] - [0x4b364, c, ov_SC05_018_jr_801734BC] + - [0x50be8, c, ov_SC05_018_jr_80178D40] - [0x5e790, data, tail] - [0xbbd74, .rodata, ov_SC05_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbbe40, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xbc86c, data, tail3] - [0xbc964, .rodata, ov_SC05_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc978, data, tail4] + - [0xbcb20, .rodata, ov_SC05_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbcc98, data, tail5] - [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 6433fdd5a..1653a7b58 100644 --- a/config/splat.ov_SC05_019.yaml +++ b/config/splat.ov_SC05_019.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC05_019_after] - [0x32cd4, c, ov_SC05_019_jr_8015AE2C] - [0x4b364, c, ov_SC05_019_jr_801734BC] + - [0x50be8, c, ov_SC05_019_jr_80178D40] - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC05_019] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x65f80, data, tail3] - [0x66078, .rodata, ov_SC05_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6608c, data, tail4] + - [0x66234, .rodata, ov_SC05_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x663ac, data, tail5] - [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 69792a995..f4cd190d9 100644 --- a/config/splat.ov_SC06_000.yaml +++ b/config/splat.ov_SC06_000.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_000_after] - [0x32cd4, c, ov_SC06_000_jr_8015AE2C] - [0x4b364, c, ov_SC06_000_jr_801734BC] + - [0x50be8, c, ov_SC06_000_jr_80178D40] - [0x600e4, data, tail] - [0x84100, .rodata, ov_SC06_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x841cc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x84bf8, data, tail3] - [0x84cf0, .rodata, ov_SC06_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84d04, data, tail4] + - [0x84eac, .rodata, ov_SC06_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85024, data, tail5] - [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 92cb68c07..54035a18b 100644 --- a/config/splat.ov_SC06_006.yaml +++ b/config/splat.ov_SC06_006.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_006_after] - [0x32cd4, c, ov_SC06_006_jr_8015AE2C] - [0x4b364, c, ov_SC06_006_jr_801734BC] + - [0x50be8, c, ov_SC06_006_jr_80178D40] - [0x59c08, data, tail] - [0xcda08, .rodata, ov_SC06_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcdad4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xce500, data, tail3] - [0xce5f8, .rodata, ov_SC06_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xce60c, data, tail4] + - [0xce7b4, .rodata, ov_SC06_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce92c, data, tail5] - [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 040f6e223..823b8dad4 100644 --- a/config/splat.ov_SC06_008.yaml +++ b/config/splat.ov_SC06_008.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_008_after] - [0x32cd4, c, ov_SC06_008_jr_8015AE2C] - [0x4b364, c, ov_SC06_008_jr_801734BC] + - [0x50be8, c, ov_SC06_008_jr_80178D40] - [0x5d670, data, tail] - [0x7fae0, .rodata, ov_SC06_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fbac, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x805d8, data, tail3] - [0x806d0, .rodata, ov_SC06_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x806e4, data, tail4] + - [0x8088c, .rodata, ov_SC06_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80a04, data, tail5] - [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 050eb5d9c..943aefac3 100644 --- a/config/splat.ov_SC06_010.yaml +++ b/config/splat.ov_SC06_010.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_010_after] - [0x32cd4, c, ov_SC06_010_jr_8015AE2C] - [0x4b364, c, ov_SC06_010_jr_801734BC] + - [0x50be8, c, ov_SC06_010_jr_80178D40] - [0x5e84c, data, tail] - [0x87b34, .rodata, ov_SC06_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87c00, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8862c, data, tail3] - [0x88724, .rodata, ov_SC06_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x88738, data, tail4] + - [0x888e0, .rodata, ov_SC06_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x88a58, data, tail5] - [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 032dc3013..ec5ce3793 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_011_after] - [0x32cd4, c, ov_SC06_011_jr_8015AE2C] - [0x4b364, c, ov_SC06_011_jr_801734BC] + - [0x50be8, c, ov_SC06_011_jr_80178D40] - [0x582ac, data, tail] - [0x81694, .rodata, ov_SC06_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81760, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x8218c, data, tail3] - [0x82284, .rodata, ov_SC06_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82298, data, tail4] + - [0x82440, .rodata, ov_SC06_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x825b8, data, tail5] - [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 1e03cb31e..468ceaa68 100644 --- a/config/splat.ov_SC06_013.yaml +++ b/config/splat.ov_SC06_013.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_013_after] - [0x32cd4, c, ov_SC06_013_jr_8015AE2C] - [0x4b364, c, ov_SC06_013_jr_801734BC] + - [0x50be8, c, ov_SC06_013_jr_80178D40] - [0x56a28, data, tail] - [0x70568, .rodata, ov_SC06_013] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70634, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x71060, data, tail3] - [0x71158, .rodata, ov_SC06_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7116c, data, tail4] + - [0x71314, .rodata, ov_SC06_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7148c, data, tail5] - [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 0f680ff52..818a32dcb 100644 --- a/config/splat.ov_SC06_014.yaml +++ b/config/splat.ov_SC06_014.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_014_after] - [0x32cd4, c, ov_SC06_014_jr_8015AE2C] - [0x4b364, c, ov_SC06_014_jr_801734BC] + - [0x50be8, c, ov_SC06_014_jr_80178D40] - [0x57d8c, data, tail] - [0x76f58, .rodata, ov_SC06_014] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77024, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x77a50, data, tail3] - [0x77b48, .rodata, ov_SC06_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77b5c, data, tail4] + - [0x77d04, .rodata, ov_SC06_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77e7c, data, tail5] - [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 665da3c61..5ab285786 100644 --- a/config/splat.ov_SC06_015.yaml +++ b/config/splat.ov_SC06_015.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_015_after] - [0x32cd4, c, ov_SC06_015_jr_8015AE2C] - [0x4b364, c, ov_SC06_015_jr_801734BC] + - [0x50be8, c, ov_SC06_015_jr_80178D40] - [0x568e4, data, tail] - [0x6a338, .rodata, ov_SC06_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6a404, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6ae30, data, tail3] - [0x6af28, .rodata, ov_SC06_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6af3c, data, tail4] + - [0x6b0e4, .rodata, ov_SC06_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b25c, data, tail5] - [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 e8560c01e..3fbe37d90 100644 --- a/config/splat.ov_SC06_016.yaml +++ b/config/splat.ov_SC06_016.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_016_after] - [0x32cd4, c, ov_SC06_016_jr_8015AE2C] - [0x4b364, c, ov_SC06_016_jr_801734BC] + - [0x50be8, c, ov_SC06_016_jr_80178D40] - [0x5ccf4, data, tail] - [0x74f80, .rodata, ov_SC06_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7504c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x75a78, data, tail3] - [0x75b70, .rodata, ov_SC06_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75b84, data, tail4] + - [0x75d2c, .rodata, ov_SC06_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75ea4, data, tail5] - [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 3489cc54e..3baa85cb9 100644 --- a/config/splat.ov_SC06_018.yaml +++ b/config/splat.ov_SC06_018.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_018_after] - [0x32cd4, c, ov_SC06_018_jr_8015AE2C] - [0x4b364, c, ov_SC06_018_jr_801734BC] + - [0x50be8, c, ov_SC06_018_jr_80178D40] - [0x6b430, data, tail] - [0xaa810, .rodata, ov_SC06_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa8dc, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xab308, data, tail3] - [0xab400, .rodata, ov_SC06_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xab414, data, tail4] + - [0xab5bc, .rodata, ov_SC06_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab734, data, tail5] - [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 cc4d91d2d..bb456fe4e 100644 --- a/config/splat.ov_SC06_020.yaml +++ b/config/splat.ov_SC06_020.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_020_after] - [0x32cd4, c, ov_SC06_020_jr_8015AE2C] - [0x4b364, c, ov_SC06_020_jr_801734BC] + - [0x50be8, c, ov_SC06_020_jr_80178D40] - [0x5ceb8, data, tail] - [0x900f8, .rodata, ov_SC06_020] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x901c4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x90bf0, data, tail3] - [0x90ce8, .rodata, ov_SC06_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x90cfc, data, tail4] + - [0x90ea4, .rodata, ov_SC06_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9101c, data, tail5] - [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 bb549cecb..ac4a5ae5d 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_022_after] - [0x32cd4, c, ov_SC06_022_jr_8015AE2C] - [0x4b364, c, ov_SC06_022_jr_801734BC] + - [0x50be8, c, ov_SC06_022_jr_80178D40] - [0x65174, data, tail] - [0xb7908, .rodata, ov_SC06_022] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb79d4, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb8400, data, tail3] - [0xb84f8, .rodata, ov_SC06_022_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb850c, data, tail4] + - [0xb86b4, .rodata, ov_SC06_022_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb882c, data, tail5] - [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 36d7a7ded..3fb660314 100644 --- a/config/splat.ov_SC06_024.yaml +++ b/config/splat.ov_SC06_024.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_024_after] - [0x32cd4, c, ov_SC06_024_jr_8015AE2C] - [0x4b364, c, ov_SC06_024_jr_801734BC] + - [0x50be8, c, ov_SC06_024_jr_80178D40] - [0x6764c, data, tail] - [0xb6a4c, .rodata, ov_SC06_024] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb6b18, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb7544, data, tail3] - [0xb763c, .rodata, ov_SC06_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7650, data, tail4] + - [0xb77f8, .rodata, ov_SC06_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7970, data, tail5] - [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 93e8a5223..fca70e86f 100644 --- a/config/splat.ov_SC06_025.yaml +++ b/config/splat.ov_SC06_025.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_025_after] - [0x32cd4, c, ov_SC06_025_jr_8015AE2C] - [0x4b364, c, ov_SC06_025_jr_801734BC] + - [0x50be8, c, ov_SC06_025_jr_80178D40] - [0x5caf0, data, tail] - [0x86d6c, .rodata, ov_SC06_025] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x86e38, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x87864, data, tail3] - [0x8795c, .rodata, ov_SC06_025_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87970, data, tail4] + - [0x87b18, .rodata, ov_SC06_025_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87c90, data, tail5] - [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 25bd39c5e..e9c496714 100644 --- a/config/splat.ov_SC06_027.yaml +++ b/config/splat.ov_SC06_027.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_027_after] - [0x32cd4, c, ov_SC06_027_jr_8015AE2C] - [0x4b364, c, ov_SC06_027_jr_801734BC] + - [0x50be8, c, ov_SC06_027_jr_80178D40] - [0x55e30, data, tail] - [0x72da8, .rodata, ov_SC06_027] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72e74, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x738a0, data, tail3] - [0x73998, .rodata, ov_SC06_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x739ac, data, tail4] + - [0x73b54, .rodata, ov_SC06_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73ccc, data, tail5] - [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 df2205ced..4a301d49a 100644 --- a/config/splat.ov_SC06_029.yaml +++ b/config/splat.ov_SC06_029.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_029_after] - [0x32cd4, c, ov_SC06_029_jr_8015AE2C] - [0x4b364, c, ov_SC06_029_jr_801734BC] + - [0x50be8, c, ov_SC06_029_jr_80178D40] - [0x643c0, data, tail] - [0xb2424, .rodata, ov_SC06_029] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb24f0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xb2f1c, data, tail3] - [0xb3014, .rodata, ov_SC06_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb3028, data, tail4] + - [0xb31d0, .rodata, ov_SC06_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb3348, data, tail5] - [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 f7d2380ae..484b828f3 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_030_after] - [0x32cd4, c, ov_SC06_030_jr_8015AE2C] - [0x4b364, c, ov_SC06_030_jr_801734BC] + - [0x50be8, c, ov_SC06_030_jr_80178D40] - [0x59cb4, data, tail] - [0x8f788, .rodata, ov_SC06_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f854, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x90280, data, tail3] - [0x90378, .rodata, ov_SC06_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9038c, data, tail4] + - [0x90534, .rodata, ov_SC06_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x906ac, data, tail5] - [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 65648688b..004af6237 100644 --- a/config/splat.ov_SC06_032.yaml +++ b/config/splat.ov_SC06_032.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_032_after] - [0x32cd4, c, ov_SC06_032_jr_8015AE2C] - [0x4b364, c, ov_SC06_032_jr_801734BC] + - [0x50be8, c, ov_SC06_032_jr_80178D40] - [0x6b180, data, tail] - [0xa5de4, .rodata, ov_SC06_032] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5eb0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa68dc, data, tail3] - [0xa69d4, .rodata, ov_SC06_032_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa69e8, data, tail4] + - [0xa6b90, .rodata, ov_SC06_032_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6d08, data, tail5] - [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 0223b2455..8c3836255 100644 --- a/config/splat.ov_SC06_033.yaml +++ b/config/splat.ov_SC06_033.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC06_033_after] - [0x32cd4, c, ov_SC06_033_jr_8015AE2C] - [0x4b364, c, ov_SC06_033_jr_801734BC] + - [0x50be8, c, ov_SC06_033_jr_80178D40] - [0x69690, data, tail] - [0xa5e98, .rodata, ov_SC06_033] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5f64, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa6990, data, tail3] - [0xa6a88, .rodata, ov_SC06_033_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6a9c, data, tail4] + - [0xa6c44, .rodata, ov_SC06_033_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6dbc, data, tail5] - [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 3c45445a9..7955f509b 100644 --- a/config/splat.ov_SC07_000.yaml +++ b/config/splat.ov_SC07_000.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC07_000_after] - [0x32cd4, c, ov_SC07_000_jr_8015AE2C] - [0x4b364, c, ov_SC07_000_jr_801734BC] + - [0x50be8, c, ov_SC07_000_jr_80178D40] - [0x5a4d8, data, tail] - [0xa54f4, .rodata, ov_SC07_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa55c0, data, tail2] @@ -105,6 +106,8 @@ segments: - [0xa5fec, data, tail3] - [0xa60e4, .rodata, ov_SC07_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa60f8, data, tail4] + - [0xa62a0, .rodata, ov_SC07_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6418, data, tail5] - [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 f6dde6d0b..885cdb22d 100644 --- a/config/splat.ov_SC07_001.yaml +++ b/config/splat.ov_SC07_001.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC07_001_after] - [0x32cd4, c, ov_SC07_001_jr_8015AE2C] - [0x4b364, c, ov_SC07_001_jr_801734BC] + - [0x50be8, c, ov_SC07_001_jr_80178D40] - [0x59388, data, tail] - [0x80690, .rodata, ov_SC07_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8075c, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x81188, data, tail3] - [0x81280, .rodata, ov_SC07_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81294, data, tail4] + - [0x8143c, .rodata, ov_SC07_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x815b4, data, tail5] - [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 35bda2703..5a08fd1a9 100644 --- a/config/splat.ov_SC07_002.yaml +++ b/config/splat.ov_SC07_002.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC07_002_after] - [0x32cd4, c, ov_SC07_002_jr_8015AE2C] - [0x4b364, c, ov_SC07_002_jr_801734BC] + - [0x50be8, c, ov_SC07_002_jr_80178D40] - [0x5e644, data, tail] - [0x71078, .rodata, ov_SC07_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71144, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x71b70, data, tail3] - [0x71c68, .rodata, ov_SC07_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71c7c, data, tail4] + - [0x71e24, .rodata, ov_SC07_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71f9c, data, tail5] - [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 e172265f1..0e5860ef0 100644 --- a/config/splat.ov_SC07_008.yaml +++ b/config/splat.ov_SC07_008.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC07_008_after] - [0x32cd4, c, ov_SC07_008_jr_8015AE2C] - [0x4b364, c, ov_SC07_008_jr_801734BC] + - [0x50be8, c, ov_SC07_008_jr_80178D40] - [0x5515c, data, tail] - [0x6c0c8, .rodata, ov_SC07_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c194, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x6cbc0, data, tail3] - [0x6ccb8, .rodata, ov_SC07_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6cccc, data, tail4] + - [0x6ce74, .rodata, ov_SC07_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cfec, data, tail5] - [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 992369354..373db868a 100644 --- a/config/splat.ov_SC07_009.yaml +++ b/config/splat.ov_SC07_009.yaml @@ -98,6 +98,7 @@ segments: - [0x1d64c, c, ov_SC07_009_after] - [0x32cd4, c, ov_SC07_009_jr_8015AE2C] - [0x4b364, c, ov_SC07_009_jr_801734BC] + - [0x50be8, c, ov_SC07_009_jr_80178D40] - [0x55c00, data, tail] - [0x79754, .rodata, ov_SC07_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79820, data, tail2] @@ -105,6 +106,8 @@ segments: - [0x7a24c, data, tail3] - [0x7a344, .rodata, ov_SC07_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7a358, data, tail4] + - [0x7a500, .rodata, ov_SC07_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7a678, data, tail5] - [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/docs/progress.fleet.md b/docs/progress.fleet.md index 5551fca5f..c68f489db 100644 --- a/docs/progress.fleet.md +++ b/docs/progress.fleet.md @@ -4,151 +4,151 @@ # cross-binary collapsible-byte leverage: docs/duplicates.cross.md. # THREE progress metrics (all matter — see the labels): -FLEET fn-count byte-ident: 283329 / 343904 = 82.39% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) -FLEET instr-weighted : 8104159 / 12707182 = 63.8% (shipped .text across resident+134 overlays; the decomp.dev-DISPLAY number) -FLEET distinct-code(uniq): 2204606 / 5410077 = 40.7% (51080/84996 unique fns; the DISTINCT-RE number; main EXE not sig'd) +FLEET fn-count byte-ident: 283463 / 343904 = 82.43% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) +FLEET instr-weighted : 8223419 / 12707182 = 64.7% (shipped .text across resident+134 overlays; the decomp.dev-DISPLAY number) +FLEET distinct-code(uniq): 2317636 / 5410077 = 42.8% (51207/84996 unique fns; the DISTINCT-RE number; main EXE not sig'd) -FLEET REAL substantive : 281800 (of which dedup-shared 223275 via 1813 groups / 223725 instances) +FLEET REAL substantive : 281934 (of which dedup-shared 223275 via 1813 groups / 223725 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) -FLEET INCLUDE_ASM stubs : 60568 +FLEET INCLUDE_ASM stubs : 60434 FLEET matchable : 343904 | binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % | |---|---:|---:|---:|---:|---:|---:| | main | 54 | 2 | 959 | 1055 | 2096 | 50.3% | | resident | 123 | 0 | 0 | 125 | 146 | 85.6% | -| ov_SC01_000 | 2076 | 1669 | 0 | 2076 | 2404 | 86.4% | -| ov_SC01_001 | 2080 | 1669 | 0 | 2082 | 2468 | 84.4% | -| ov_SC01_004 | 2072 | 1660 | 0 | 2073 | 2415 | 85.8% | -| ov_SC01_005 | 2098 | 1682 | 0 | 2098 | 2505 | 83.8% | -| ov_SC01_006 | 2098 | 1682 | 0 | 2098 | 2505 | 83.8% | -| ov_SC01_008 | 2071 | 1660 | 0 | 2073 | 2427 | 85.4% | -| ov_SC01_009 | 2092 | 1661 | 0 | 2093 | 2509 | 83.4% | -| ov_SC01_074 | 2076 | 1661 | 0 | 2078 | 2426 | 85.7% | -| ov_SC01_077 | 2311 | 1624 | 0 | 2313 | 2583 | 89.5% | -| ov_SC01_080 | 2108 | 1664 | 0 | 2108 | 2514 | 83.9% | -| ov_SC01_084 | 2115 | 1664 | 0 | 2120 | 2580 | 82.2% | -| ov_SC02_000 | 2161 | 1699 | 0 | 2161 | 2685 | 80.5% | -| ov_SC02_003 | 2161 | 1699 | 0 | 2161 | 2685 | 80.5% | -| ov_SC02_004 | 2077 | 1664 | 0 | 2077 | 2402 | 86.5% | -| ov_SC02_005 | 2178 | 1660 | 0 | 2188 | 2929 | 74.7% | -| ov_SC02_011 | 2183 | 1667 | 0 | 2194 | 2895 | 75.8% | -| ov_SC02_015 | 2082 | 1666 | 0 | 2082 | 2415 | 86.2% | -| ov_SC02_016 | 2107 | 1666 | 0 | 2110 | 2547 | 82.8% | -| ov_SC02_017 | 2150 | 1666 | 0 | 2158 | 2734 | 78.9% | -| ov_SC02_021 | 2088 | 1666 | 0 | 2088 | 2438 | 85.6% | -| ov_SC02_026 | 2097 | 1664 | 0 | 2103 | 2574 | 81.7% | -| ov_SC02_027 | 2122 | 1664 | 0 | 2131 | 2694 | 79.1% | -| ov_SC02_028 | 2123 | 1664 | 0 | 2133 | 2703 | 78.9% | -| ov_SC02_031 | 2111 | 1665 | 0 | 2116 | 2564 | 82.5% | -| ov_SC02_035 | 2088 | 1664 | 0 | 2091 | 2522 | 82.9% | -| ov_SC02_039 | 2072 | 1664 | 0 | 2072 | 2417 | 85.7% | -| ov_SC02_041 | 2099 | 1664 | 0 | 2102 | 2562 | 82.0% | -| ov_SC03_001 | 2204 | 1665 | 0 | 2221 | 2871 | 77.4% | -| ov_SC03_002 | 2134 | 1669 | 0 | 2149 | 2633 | 81.6% | -| ov_SC03_003 | 2077 | 1664 | 0 | 2078 | 2424 | 85.7% | -| ov_SC03_006 | 2144 | 1670 | 0 | 2153 | 2769 | 77.8% | -| ov_SC03_007 | 2124 | 1664 | 0 | 2128 | 2625 | 81.1% | -| ov_SC03_010 | 2087 | 1664 | 0 | 2087 | 2471 | 84.5% | -| ov_SC03_011 | 2092 | 1664 | 0 | 2098 | 2529 | 83.0% | -| ov_SC03_012 | 2071 | 1664 | 0 | 2072 | 2407 | 86.1% | -| ov_SC03_013 | 2088 | 1664 | 0 | 2088 | 2494 | 83.7% | -| ov_SC03_014 | 2136 | 1689 | 0 | 2136 | 2687 | 79.5% | -| ov_SC03_015 | 2139 | 1689 | 0 | 2139 | 2687 | 79.6% | -| ov_SC03_023 | 2077 | 1664 | 0 | 2078 | 2436 | 85.3% | -| ov_SC03_024 | 2131 | 1669 | 0 | 2138 | 2643 | 80.9% | -| ov_SC03_028 | 2114 | 1664 | 0 | 2118 | 2666 | 79.4% | -| ov_SC03_029 | 2115 | 1666 | 0 | 2125 | 2646 | 80.3% | -| ov_SC03_030 | 2094 | 1668 | 0 | 2096 | 2497 | 83.9% | -| ov_SC03_031 | 2088 | 1664 | 0 | 2092 | 2516 | 83.1% | -| ov_SC03_089 | 2105 | 1664 | 0 | 2112 | 2583 | 81.8% | -| ov_SC03_090 | 2107 | 1664 | 0 | 2115 | 2627 | 80.5% | -| ov_SC03_091 | 2108 | 1664 | 0 | 2116 | 2642 | 80.1% | -| ov_SC03_092 | 2114 | 1664 | 0 | 2126 | 2589 | 82.1% | -| ov_SC03_093 | 2095 | 1664 | 0 | 2099 | 2565 | 81.8% | -| ov_SC03_094 | 2090 | 1664 | 0 | 2096 | 2578 | 81.3% | -| ov_SC03_095 | 2081 | 1664 | 0 | 2084 | 2476 | 84.2% | -| ov_SC03_096 | 2081 | 1664 | 0 | 2084 | 2467 | 84.5% | -| ov_SC03_097 | 2104 | 1664 | 0 | 2111 | 2605 | 81.0% | -| ov_SC03_098 | 2088 | 1664 | 0 | 2091 | 2543 | 82.2% | -| ov_SC03_099 | 2082 | 1664 | 0 | 2085 | 2506 | 83.2% | -| ov_SC03_100 | 2089 | 1664 | 0 | 2093 | 2541 | 82.4% | -| ov_SC03_101 | 2090 | 1664 | 0 | 2094 | 2530 | 82.8% | -| ov_SC03_102 | 2085 | 1664 | 0 | 2088 | 2494 | 83.7% | -| ov_SC03_103 | 2089 | 1666 | 0 | 2092 | 2512 | 83.3% | -| ov_SC03_104 | 2108 | 1664 | 0 | 2115 | 2618 | 80.8% | -| ov_SC03_105 | 2102 | 1664 | 0 | 2109 | 2599 | 81.1% | -| ov_SC03_108 | 2074 | 1664 | 0 | 2074 | 2445 | 84.8% | -| ov_SC03_109 | 2075 | 1664 | 0 | 2077 | 2425 | 85.6% | -| ov_SC03_110 | 2080 | 1664 | 0 | 2080 | 2470 | 84.2% | -| ov_SC03_111 | 2088 | 1664 | 0 | 2091 | 2512 | 83.2% | -| ov_SC03_112 | 2086 | 1666 | 0 | 2088 | 2528 | 82.6% | -| ov_SC03_113 | 2080 | 1666 | 0 | 2083 | 2470 | 84.3% | -| ov_SC03_114 | 2070 | 1664 | 0 | 2072 | 2416 | 85.8% | -| ov_SC03_115 | 2084 | 1664 | 0 | 2086 | 2474 | 84.3% | -| ov_SC03_116 | 2078 | 1664 | 0 | 2081 | 2440 | 85.3% | -| ov_SC03_117 | 2096 | 1664 | 0 | 2102 | 2559 | 82.1% | -| ov_SC03_118 | 2139 | 1688 | 0 | 2140 | 2687 | 79.6% | -| ov_SC03_119 | 2136 | 1688 | 0 | 2137 | 2687 | 79.5% | -| ov_SC03_121 | 2081 | 1664 | 0 | 2084 | 2461 | 84.7% | -| ov_SC03_124 | 2153 | 1660 | 0 | 2173 | 2743 | 79.2% | -| ov_SC03_125 | 2116 | 1664 | 0 | 2128 | 2590 | 82.2% | -| ov_SC03_126 | 2078 | 1666 | 0 | 2078 | 2424 | 85.7% | -| ov_SC04_000 | 2095 | 1668 | 0 | 2104 | 2548 | 82.6% | -| ov_SC04_002 | 2109 | 1664 | 0 | 2113 | 2638 | 80.1% | -| ov_SC04_003 | 2087 | 1664 | 0 | 2091 | 2504 | 83.5% | -| ov_SC04_004 | 2101 | 1664 | 0 | 2103 | 2560 | 82.1% | -| ov_SC04_005 | 2102 | 1664 | 0 | 2108 | 2614 | 80.6% | -| ov_SC04_006 | 2078 | 1664 | 0 | 2080 | 2455 | 84.7% | -| ov_SC04_007 | 2097 | 1664 | 0 | 2101 | 2571 | 81.7% | -| ov_SC04_008 | 2074 | 1664 | 0 | 2074 | 2416 | 85.8% | -| ov_SC04_009 | 2082 | 1664 | 0 | 2085 | 2442 | 85.4% | -| ov_SC04_010 | 2078 | 1664 | 0 | 2079 | 2420 | 85.9% | -| ov_SC04_011 | 2128 | 1664 | 0 | 2134 | 2805 | 76.1% | -| ov_SC04_012 | 2076 | 1664 | 0 | 2077 | 2421 | 85.8% | -| ov_SC04_015 | 2136 | 1665 | 0 | 2147 | 2613 | 82.2% | -| ov_SC04_016 | 2075 | 1664 | 0 | 2077 | 2441 | 85.1% | -| ov_SC04_018 | 2182 | 1699 | 0 | 2182 | 2859 | 76.3% | -| ov_SC04_019 | 2188 | 1699 | 0 | 2188 | 2859 | 76.5% | -| ov_SC04_020 | 2105 | 1664 | 0 | 2117 | 2569 | 82.4% | -| ov_SC04_021 | 2077 | 1666 | 0 | 2077 | 2424 | 85.7% | -| ov_SC05_000 | 2081 | 1668 | 0 | 2084 | 2423 | 86.0% | -| ov_SC05_001 | 2097 | 1664 | 0 | 2102 | 2576 | 81.6% | -| ov_SC05_002 | 2080 | 1664 | 0 | 2083 | 2444 | 85.2% | -| ov_SC05_003 | 2080 | 1664 | 0 | 2081 | 2483 | 83.8% | -| ov_SC05_004 | 2078 | 1664 | 0 | 2080 | 2466 | 84.3% | -| ov_SC05_005 | 2082 | 1664 | 0 | 2083 | 2493 | 83.6% | -| ov_SC05_006 | 2076 | 1664 | 0 | 2076 | 2431 | 85.4% | -| ov_SC05_007 | 2083 | 1664 | 0 | 2088 | 2484 | 84.1% | -| ov_SC05_008 | 2102 | 1664 | 0 | 2104 | 2545 | 82.7% | -| ov_SC05_009 | 2078 | 1664 | 0 | 2082 | 2439 | 85.4% | -| ov_SC05_010 | 2102 | 1664 | 0 | 2106 | 2590 | 81.3% | -| ov_SC05_011 | 2079 | 1664 | 0 | 2080 | 2410 | 86.3% | -| ov_SC05_017 | 2178 | 1661 | 0 | 2189 | 2844 | 77.0% | -| ov_SC05_018 | 2128 | 1664 | 0 | 2141 | 2675 | 80.0% | -| ov_SC05_019 | 2077 | 1666 | 0 | 2077 | 2424 | 85.7% | -| ov_SC06_000 | 2138 | 1673 | 0 | 2141 | 2693 | 79.5% | -| ov_SC06_006 | 2086 | 1664 | 0 | 2087 | 2513 | 83.0% | -| ov_SC06_008 | 2102 | 1666 | 0 | 2108 | 2543 | 82.9% | -| ov_SC06_010 | 2089 | 1664 | 0 | 2094 | 2519 | 83.1% | -| ov_SC06_011 | 2086 | 1664 | 0 | 2090 | 2470 | 84.6% | -| ov_SC06_013 | 2079 | 1664 | 0 | 2080 | 2426 | 85.7% | -| ov_SC06_014 | 2083 | 1664 | 0 | 2085 | 2454 | 85.0% | -| ov_SC06_015 | 2080 | 1664 | 0 | 2080 | 2422 | 85.9% | -| ov_SC06_016 | 2098 | 1664 | 0 | 2100 | 2551 | 82.3% | -| ov_SC06_018 | 2096 | 1667 | 0 | 2103 | 2667 | 78.9% | -| ov_SC06_020 | 2086 | 1666 | 0 | 2087 | 2520 | 82.8% | -| ov_SC06_022 | 2102 | 1664 | 0 | 2110 | 2644 | 79.8% | -| ov_SC06_024 | 2108 | 1664 | 0 | 2114 | 2669 | 79.2% | -| ov_SC06_025 | 2095 | 1664 | 0 | 2100 | 2574 | 81.6% | -| ov_SC06_027 | 2070 | 1664 | 0 | 2071 | 2409 | 86.0% | -| ov_SC06_029 | 2123 | 1664 | 0 | 2135 | 2664 | 80.1% | -| ov_SC06_030 | 2081 | 1664 | 0 | 2081 | 2458 | 84.7% | -| ov_SC06_032 | 2092 | 1665 | 0 | 2099 | 2660 | 78.9% | -| ov_SC06_033 | 2096 | 1665 | 0 | 2103 | 2633 | 79.9% | -| ov_SC07_000 | 2095 | 1668 | 0 | 2097 | 2523 | 83.1% | -| ov_SC07_001 | 2082 | 1664 | 0 | 2084 | 2456 | 84.9% | -| ov_SC07_002 | 2099 | 1664 | 0 | 2103 | 2581 | 81.5% | -| ov_SC07_008 | 2066 | 1664 | 0 | 2066 | 2387 | 86.6% | -| ov_SC07_009 | 2077 | 1664 | 0 | 2079 | 2431 | 85.5% | +| ov_SC01_000 | 2077 | 1669 | 0 | 2077 | 2404 | 86.4% | +| ov_SC01_001 | 2081 | 1669 | 0 | 2083 | 2468 | 84.4% | +| ov_SC01_004 | 2073 | 1660 | 0 | 2074 | 2415 | 85.9% | +| ov_SC01_005 | 2099 | 1682 | 0 | 2099 | 2505 | 83.8% | +| ov_SC01_006 | 2099 | 1682 | 0 | 2099 | 2505 | 83.8% | +| ov_SC01_008 | 2072 | 1660 | 0 | 2074 | 2427 | 85.5% | +| ov_SC01_009 | 2093 | 1661 | 0 | 2094 | 2509 | 83.5% | +| ov_SC01_074 | 2077 | 1661 | 0 | 2079 | 2426 | 85.7% | +| ov_SC01_077 | 2312 | 1624 | 0 | 2314 | 2583 | 89.6% | +| ov_SC01_080 | 2109 | 1664 | 0 | 2109 | 2514 | 83.9% | +| ov_SC01_084 | 2116 | 1664 | 0 | 2121 | 2580 | 82.2% | +| ov_SC02_000 | 2162 | 1699 | 0 | 2162 | 2685 | 80.5% | +| ov_SC02_003 | 2162 | 1699 | 0 | 2162 | 2685 | 80.5% | +| ov_SC02_004 | 2078 | 1664 | 0 | 2078 | 2402 | 86.5% | +| ov_SC02_005 | 2179 | 1660 | 0 | 2189 | 2929 | 74.7% | +| ov_SC02_011 | 2184 | 1667 | 0 | 2195 | 2895 | 75.8% | +| ov_SC02_015 | 2083 | 1666 | 0 | 2083 | 2415 | 86.3% | +| ov_SC02_016 | 2108 | 1666 | 0 | 2111 | 2547 | 82.9% | +| ov_SC02_017 | 2151 | 1666 | 0 | 2159 | 2734 | 79.0% | +| ov_SC02_021 | 2089 | 1666 | 0 | 2089 | 2438 | 85.7% | +| ov_SC02_026 | 2098 | 1664 | 0 | 2104 | 2574 | 81.7% | +| ov_SC02_027 | 2123 | 1664 | 0 | 2132 | 2694 | 79.1% | +| ov_SC02_028 | 2124 | 1664 | 0 | 2134 | 2703 | 78.9% | +| ov_SC02_031 | 2112 | 1665 | 0 | 2117 | 2564 | 82.6% | +| ov_SC02_035 | 2089 | 1664 | 0 | 2092 | 2522 | 83.0% | +| ov_SC02_039 | 2073 | 1664 | 0 | 2073 | 2417 | 85.8% | +| ov_SC02_041 | 2100 | 1664 | 0 | 2103 | 2562 | 82.1% | +| ov_SC03_001 | 2205 | 1665 | 0 | 2222 | 2871 | 77.4% | +| ov_SC03_002 | 2135 | 1669 | 0 | 2150 | 2633 | 81.7% | +| ov_SC03_003 | 2078 | 1664 | 0 | 2079 | 2424 | 85.8% | +| ov_SC03_006 | 2145 | 1670 | 0 | 2154 | 2769 | 77.8% | +| ov_SC03_007 | 2125 | 1664 | 0 | 2129 | 2625 | 81.1% | +| ov_SC03_010 | 2088 | 1664 | 0 | 2088 | 2471 | 84.5% | +| ov_SC03_011 | 2093 | 1664 | 0 | 2099 | 2529 | 83.0% | +| ov_SC03_012 | 2072 | 1664 | 0 | 2073 | 2407 | 86.1% | +| ov_SC03_013 | 2089 | 1664 | 0 | 2089 | 2494 | 83.8% | +| ov_SC03_014 | 2137 | 1689 | 0 | 2137 | 2687 | 79.5% | +| ov_SC03_015 | 2140 | 1689 | 0 | 2140 | 2687 | 79.6% | +| ov_SC03_023 | 2078 | 1664 | 0 | 2079 | 2436 | 85.3% | +| ov_SC03_024 | 2132 | 1669 | 0 | 2139 | 2643 | 80.9% | +| ov_SC03_028 | 2115 | 1664 | 0 | 2119 | 2666 | 79.5% | +| ov_SC03_029 | 2116 | 1666 | 0 | 2126 | 2646 | 80.3% | +| ov_SC03_030 | 2095 | 1668 | 0 | 2097 | 2497 | 84.0% | +| ov_SC03_031 | 2089 | 1664 | 0 | 2093 | 2516 | 83.2% | +| ov_SC03_089 | 2106 | 1664 | 0 | 2113 | 2583 | 81.8% | +| ov_SC03_090 | 2108 | 1664 | 0 | 2116 | 2627 | 80.5% | +| ov_SC03_091 | 2109 | 1664 | 0 | 2117 | 2642 | 80.1% | +| ov_SC03_092 | 2115 | 1664 | 0 | 2127 | 2589 | 82.2% | +| ov_SC03_093 | 2096 | 1664 | 0 | 2100 | 2565 | 81.9% | +| ov_SC03_094 | 2091 | 1664 | 0 | 2097 | 2578 | 81.3% | +| ov_SC03_095 | 2082 | 1664 | 0 | 2085 | 2476 | 84.2% | +| ov_SC03_096 | 2082 | 1664 | 0 | 2085 | 2467 | 84.5% | +| ov_SC03_097 | 2105 | 1664 | 0 | 2112 | 2605 | 81.1% | +| ov_SC03_098 | 2089 | 1664 | 0 | 2092 | 2543 | 82.3% | +| ov_SC03_099 | 2083 | 1664 | 0 | 2086 | 2506 | 83.2% | +| ov_SC03_100 | 2090 | 1664 | 0 | 2094 | 2541 | 82.4% | +| ov_SC03_101 | 2091 | 1664 | 0 | 2095 | 2530 | 82.8% | +| ov_SC03_102 | 2086 | 1664 | 0 | 2089 | 2494 | 83.8% | +| ov_SC03_103 | 2090 | 1666 | 0 | 2093 | 2512 | 83.3% | +| ov_SC03_104 | 2109 | 1664 | 0 | 2116 | 2618 | 80.8% | +| ov_SC03_105 | 2103 | 1664 | 0 | 2110 | 2599 | 81.2% | +| ov_SC03_108 | 2075 | 1664 | 0 | 2075 | 2445 | 84.9% | +| ov_SC03_109 | 2076 | 1664 | 0 | 2078 | 2425 | 85.7% | +| ov_SC03_110 | 2081 | 1664 | 0 | 2081 | 2470 | 84.3% | +| ov_SC03_111 | 2089 | 1664 | 0 | 2092 | 2512 | 83.3% | +| ov_SC03_112 | 2087 | 1666 | 0 | 2089 | 2528 | 82.6% | +| ov_SC03_113 | 2081 | 1666 | 0 | 2084 | 2470 | 84.4% | +| ov_SC03_114 | 2071 | 1664 | 0 | 2073 | 2416 | 85.8% | +| ov_SC03_115 | 2085 | 1664 | 0 | 2087 | 2474 | 84.4% | +| ov_SC03_116 | 2079 | 1664 | 0 | 2082 | 2440 | 85.3% | +| ov_SC03_117 | 2097 | 1664 | 0 | 2103 | 2559 | 82.2% | +| ov_SC03_118 | 2140 | 1688 | 0 | 2141 | 2687 | 79.7% | +| ov_SC03_119 | 2137 | 1688 | 0 | 2138 | 2687 | 79.6% | +| ov_SC03_121 | 2082 | 1664 | 0 | 2085 | 2461 | 84.7% | +| ov_SC03_124 | 2154 | 1660 | 0 | 2174 | 2743 | 79.3% | +| ov_SC03_125 | 2117 | 1664 | 0 | 2129 | 2590 | 82.2% | +| ov_SC03_126 | 2079 | 1666 | 0 | 2079 | 2424 | 85.8% | +| ov_SC04_000 | 2096 | 1668 | 0 | 2105 | 2548 | 82.6% | +| ov_SC04_002 | 2110 | 1664 | 0 | 2114 | 2638 | 80.1% | +| ov_SC04_003 | 2088 | 1664 | 0 | 2092 | 2504 | 83.5% | +| ov_SC04_004 | 2102 | 1664 | 0 | 2104 | 2560 | 82.2% | +| ov_SC04_005 | 2103 | 1664 | 0 | 2109 | 2614 | 80.7% | +| ov_SC04_006 | 2079 | 1664 | 0 | 2081 | 2455 | 84.8% | +| ov_SC04_007 | 2098 | 1664 | 0 | 2102 | 2571 | 81.8% | +| ov_SC04_008 | 2075 | 1664 | 0 | 2075 | 2416 | 85.9% | +| ov_SC04_009 | 2083 | 1664 | 0 | 2086 | 2442 | 85.4% | +| ov_SC04_010 | 2079 | 1664 | 0 | 2080 | 2420 | 86.0% | +| ov_SC04_011 | 2129 | 1664 | 0 | 2135 | 2805 | 76.1% | +| ov_SC04_012 | 2077 | 1664 | 0 | 2078 | 2421 | 85.8% | +| ov_SC04_015 | 2137 | 1665 | 0 | 2148 | 2613 | 82.2% | +| ov_SC04_016 | 2076 | 1664 | 0 | 2078 | 2441 | 85.1% | +| ov_SC04_018 | 2183 | 1699 | 0 | 2183 | 2859 | 76.4% | +| ov_SC04_019 | 2189 | 1699 | 0 | 2189 | 2859 | 76.6% | +| ov_SC04_020 | 2106 | 1664 | 0 | 2118 | 2569 | 82.4% | +| ov_SC04_021 | 2078 | 1666 | 0 | 2078 | 2424 | 85.7% | +| ov_SC05_000 | 2082 | 1668 | 0 | 2085 | 2423 | 86.1% | +| ov_SC05_001 | 2098 | 1664 | 0 | 2103 | 2576 | 81.6% | +| ov_SC05_002 | 2081 | 1664 | 0 | 2084 | 2444 | 85.3% | +| ov_SC05_003 | 2081 | 1664 | 0 | 2082 | 2483 | 83.9% | +| ov_SC05_004 | 2079 | 1664 | 0 | 2081 | 2466 | 84.4% | +| ov_SC05_005 | 2083 | 1664 | 0 | 2084 | 2493 | 83.6% | +| ov_SC05_006 | 2077 | 1664 | 0 | 2077 | 2431 | 85.4% | +| ov_SC05_007 | 2084 | 1664 | 0 | 2089 | 2484 | 84.1% | +| ov_SC05_008 | 2103 | 1664 | 0 | 2105 | 2545 | 82.7% | +| ov_SC05_009 | 2079 | 1664 | 0 | 2083 | 2439 | 85.4% | +| ov_SC05_010 | 2103 | 1664 | 0 | 2107 | 2590 | 81.4% | +| ov_SC05_011 | 2080 | 1664 | 0 | 2081 | 2410 | 86.3% | +| ov_SC05_017 | 2179 | 1661 | 0 | 2190 | 2844 | 77.0% | +| ov_SC05_018 | 2129 | 1664 | 0 | 2142 | 2675 | 80.1% | +| ov_SC05_019 | 2078 | 1666 | 0 | 2078 | 2424 | 85.7% | +| ov_SC06_000 | 2139 | 1673 | 0 | 2142 | 2693 | 79.5% | +| ov_SC06_006 | 2087 | 1664 | 0 | 2088 | 2513 | 83.1% | +| ov_SC06_008 | 2103 | 1666 | 0 | 2109 | 2543 | 82.9% | +| ov_SC06_010 | 2090 | 1664 | 0 | 2095 | 2519 | 83.2% | +| ov_SC06_011 | 2087 | 1664 | 0 | 2091 | 2470 | 84.7% | +| ov_SC06_013 | 2080 | 1664 | 0 | 2081 | 2426 | 85.8% | +| ov_SC06_014 | 2084 | 1664 | 0 | 2086 | 2454 | 85.0% | +| ov_SC06_015 | 2081 | 1664 | 0 | 2081 | 2422 | 85.9% | +| ov_SC06_016 | 2099 | 1664 | 0 | 2101 | 2551 | 82.4% | +| ov_SC06_018 | 2097 | 1667 | 0 | 2104 | 2667 | 78.9% | +| ov_SC06_020 | 2087 | 1666 | 0 | 2088 | 2520 | 82.9% | +| ov_SC06_022 | 2103 | 1664 | 0 | 2111 | 2644 | 79.8% | +| ov_SC06_024 | 2109 | 1664 | 0 | 2115 | 2669 | 79.2% | +| ov_SC06_025 | 2096 | 1664 | 0 | 2101 | 2574 | 81.6% | +| ov_SC06_027 | 2071 | 1664 | 0 | 2072 | 2409 | 86.0% | +| ov_SC06_029 | 2124 | 1664 | 0 | 2136 | 2664 | 80.2% | +| ov_SC06_030 | 2082 | 1664 | 0 | 2082 | 2458 | 84.7% | +| ov_SC06_032 | 2093 | 1665 | 0 | 2100 | 2660 | 78.9% | +| ov_SC06_033 | 2097 | 1665 | 0 | 2104 | 2633 | 79.9% | +| ov_SC07_000 | 2096 | 1668 | 0 | 2098 | 2523 | 83.2% | +| ov_SC07_001 | 2083 | 1664 | 0 | 2085 | 2456 | 84.9% | +| ov_SC07_002 | 2100 | 1664 | 0 | 2104 | 2581 | 81.5% | +| ov_SC07_008 | 2067 | 1664 | 0 | 2067 | 2387 | 86.6% | +| ov_SC07_009 | 2078 | 1664 | 0 | 2080 | 2431 | 85.6% | diff --git a/src/ov_SC01_001/ov_SC01_001_jr_801734BC.c b/src/ov_SC01_001/ov_SC01_001_jr_801734BC.c index e3fcf0cc4..01b65ce51 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_801734BC.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_801734BC.c @@ -3104,1002 +3104,3 @@ void func_80178D18(void) { D_801F31C4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ED91C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801ED91C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ED91C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801ED91C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801ED944; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801ED944 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801ED900; - -s32 func_8017A3B0(void) { - switch (D_801ED900) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801ED93C; -extern short D_801ED938; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801ED93C) { - case 0: - func_800D0CA0(1); - D_801ED93C = D_801ED93C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801ED938; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801ED93C = D_801ED93C + 1; - if (D_801ED93C < 0x1E) { - return 0; - } - D_801ED93C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801ED97C; - extern s16 D_801ED97E; - extern s16 D_801ED980; - extern s16 D_801ED974; - extern s16 D_801ED976; - extern s16 D_801ED978; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ED97C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ED97E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ED980, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ED974, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ED976, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ED978, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801ED904; -extern u16 D_801ED984; -extern u16 D_801ED986; -extern u16 D_801ED988; -extern s16 D_801F3150; - -void func_8017B1D8(void) { - func_8012A418(); - D_801F3150 = 0; - D_801ED904 = 0; - D_801ED984 = D_80126B5E; - D_801ED986 = D_80126B62; - D_801ED988 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187198[]; - extern s16 D_801ED97C; - extern s16 D_801ED974; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187198[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187198[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ED97C; - s16 *p78C = &D_801ED974; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801F3150 = 1; - D_801ED904 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801ED924; - extern SV4_8017B368 D_801ED92C; - extern s16 D_801ED97C; - extern s16 D_801ED974; - extern u16 D_80187198; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801ED924; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801ED92C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187198)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187198)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801ED97C) = loc0; - (*(SV4_8017B368 *)&D_801ED974) = loc1; - D_801F3150 = 1; - D_801ED904 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187198[]; - extern s16 D_801ED97C; - extern s16 D_801ED97E; - extern s16 D_801ED980; - extern s16 D_801ED974; - extern s16 D_801ED976; - extern s16 D_801ED978; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187198[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187198[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ED97C; - s16 *p78C = &D_801ED974; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801ED97E; - v798 = D_801ED980; - v78C = *p78C; - v78E = D_801ED976; - v790 = D_801ED978; - __asm__ __volatile__(""); - D_801F3150 = 1; - D_801ED904 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ED904; -extern s16 D_801ED97C; -extern s16 D_801ED97E; -extern s16 D_801ED980; -extern s16 D_801ED974; -extern s16 D_801ED976; -extern s16 D_801ED978; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801ED904 = 0; - D_801ED97C = (s16) D_80114F30; - D_801ED97E = (s16) D_80114F34; - D_801ED980 = (s16) D_80114F38; - D_801ED974 = (s16) D_80114F24; - D_801ED976 = (s16) D_80114F28; - D_801ED978 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801ED994; -extern s16 D_801ED996; -extern s16 D_801ED998; -extern s16 D_801ED99C; -extern s16 D_801ED99E; -extern s16 D_801ED9A0; - -void func_8017B824(void) { - D_801ED994 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801ED996 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801ED998 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801ED99C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801ED99E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801ED9A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801ED994; -extern s16 D_801ED996; -extern s16 D_801ED998; -extern s16 D_801ED99C; -extern s16 D_801ED99E; -extern s16 D_801ED9A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801ED994; - D_80114F34 = D_801ED996; - D_80114F38 = D_801ED998; - D_80114F24 = D_801ED99C; - D_80114F28 = D_801ED99E; - D_80114F2C = D_801ED9A0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801ED97C), src[8..15] -> (*(S8_8017B8E8 *)&D_801ED974) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801ED97C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801ED974) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801ED984; -extern u16 D_801ED986; -extern u16 D_801ED988; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ED904; -extern short D_801ED98C; -extern short D_801ED98E; -extern short D_801ED990; -extern s16 D_801ED97C; -extern s16 D_801ED97E; -extern s16 D_801ED980; -extern s16 D_801ED974; -extern s16 D_801ED976; -extern s16 D_801ED978; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ED984); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ED986); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ED988); - (*(s16 *)&D_801ED98C) = buf[0]; - (*(s16 *)&D_801ED98E) = buf[1]; - (*(s16 *)&D_801ED990) = buf[2]; - D_801ED97C = D_80114F30 + buf[0]; - D_801ED904 = 0; - D_801ED97E = D_80114F34 + buf[1]; - D_801ED980 = D_80114F38 + buf[2]; - D_801ED974 = D_80114F24 + buf[0]; - D_801ED976 = D_80114F28 + buf[1]; - D_801ED978 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801ED924; -extern SV4 D_801ED92C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ED92C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801ED924 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801ED92C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ED92C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801ED924) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801ED92C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801ED94C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801ED94C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801ED904; -extern s16 D_801F3150; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801ED904 = D_801ED904 + 1; - if (D_801ED904 >= 0x1F) { - D_801F3150 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801ED904; -extern s16 D_801F3150; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ED904 = D_801ED904 + 1; - if (0x18 < D_801ED904) { - func_8012A4BC(); - D_801F3150 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801ED904; -extern void (*D_801ED948)(void); -extern short D_801ED98C; -extern short D_801ED98E; -extern short D_801ED990; -extern s16 D_801F3150; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ED904 = D_801ED904 + 1; - if (D_801ED904 >= 0x19) { - if (D_801ED948 != 0) { - (*D_801ED948)(); - } else { - D_80114F30 = D_80114F30 + D_801ED98C; - D_80114F34 = D_80114F34 + D_801ED98E; - D_80114F38 = D_80114F38 + D_801ED990; - D_80114F24 = D_80114F24 + D_801ED98C; - D_80114F28 = D_80114F28 + D_801ED98E; - D_80114F2C = D_80114F2C + D_801ED990; - func_8012A4BC(); - } - D_801F3150 = 0; - } -} - - - -extern void (*D_80187238[])(void); - -void func_8017BE60(void *a0) { - D_80187238[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017BEBC); - - -extern void (*D_80187294[])(void); - -void func_8017CD9C(void *a0) { - D_80187294[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CDD8); - -DEFINE_func_8017CE24() /* dedup: shared engine-core @0x8017CE24 (src/shared) */ - - -extern void (*D_8018729C[])(void); - -void func_8017CE48(void *a0) { - D_8018729C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CE84); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CEC4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CF78); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CFA0); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017CFC8); - - -extern void (*D_801872B8[])(void); - -void func_8017D060(void *a0) { - D_801872B8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017D09C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017D13C); - - -s32 func_8017D2D4(void) { - return 143; -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017D2DC); - -extern s32 func_8013767C(s32 a0); -extern s32 D_801EDA20; - -void func_8017EBA4(void) { - D_801EDA20 = (void *)((s32 (*)(void))func_8013767C)(); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017EBCC); - -extern s32 D_801EDA20; - s32 func_8017EC18(void) { - return D_801EDA20 != 0; - } - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017EC28); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F1F8); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F238); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F28C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F328); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F7F4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F830); - - -extern void (*D_80188DE0[])(void); - -void func_8017F878(void *a0) { - D_80188DE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F8B4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017F950); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017FD70); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017FDAC); - - -extern void (*D_80188DF0[])(void); - -void func_8017FE08(void *a0) { - D_80188DF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017FE44); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8017FEE0); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801803A4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801803E0); - - -extern void (*D_80188E00[])(void); - -void func_8018043C(void *a0) { - D_80188E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180478); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180514); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180854); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180890); - - -extern void (*D_80188E10[])(void); - -void func_801808D8(void *a0) { - D_80188E10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180914); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801809B0); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180E54); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180E90); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180EEC); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80180F64); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80181000); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801810A4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8018150C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8018153C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80181584); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801815D8); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801815F8); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8018164C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801816A4); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80181784); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801817BC); - -void func_80181834(void) { -} - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8018183C); - -extern s32 D_801EDA44; - void func_80181A28(void) { - s32 i = 0x4FB0; - do { - *(s32 *)((s32)&D_801EDA44 + i) = 0; - i -= 0x50; - } while (i >= 0); - } - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80181A4C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80181E04); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182238); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182284); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801824EC); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_8018275C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182974); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182A14); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182A48); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182B00); - -void func_80182B60(s32 *a0, s32 a1) { - *(s32*)((s32)a0 + 0xCC) = a1; - } - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182B68); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182B9C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182BD0); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182C10); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182C58); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182D04); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182EB0); - - -extern void (*D_80188E58[])(void); - -void func_80182F58(void *a0) { - D_80188E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80182F94); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80183034); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801830A8); - -void func_80183120(void) { -} - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80183128); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801831EC); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801832BC); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801833A0); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_801835C8); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_801734BC", func_80183748); - diff --git a/src/ov_SC01_001/ov_SC01_001_jr_80178D40.c b/src/ov_SC01_001/ov_SC01_001_jr_80178D40.c new file mode 100644 index 000000000..397d8888f --- /dev/null +++ b/src/ov_SC01_001/ov_SC01_001_jr_80178D40.c @@ -0,0 +1,4469 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186A40[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801ECC70; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186A34[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80186A78[]; +extern unsigned short D_80186A80[]; +extern unsigned short D_80186A88[]; +extern unsigned char D_801ECC78[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801ECC70; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186A90[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ECDAC; +extern M2C_UNK D_801ECDB0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801ECD38; +extern void (*D_80186AC0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801ECDB4[]; +extern u8 D_801ECDBC[]; +extern u8 D_801ECD6C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80186AC8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80186AE4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80186AEC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186B54[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186AF8; +extern u8 D_80186B04; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80186B88[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186B90[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80186BE4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80186C18[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80186C08[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80186C34; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80186CAC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80186CB4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80186CBC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80186CC4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80186CCC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80186CD4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80186CE0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80186CEC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80186CF8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80186D08[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80186D18[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80186D20[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80186D28[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80186D30[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80186D38[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80186D40[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80186D48[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80186D50[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80186D58[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80186D60[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80186D68[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80186D70[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80186D78[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186D80[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80186D88[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186D90[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80186D98[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186DA0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80186DA8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80186DB0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80186DB8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80186DC0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80186DC8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80186E0C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80186DD0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186E3C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80186E78[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80186ED0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186EE0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186EE8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187050[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018705C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801EC184; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801F3150; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801ED4F0; +extern short D_801F31C4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801F31C4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801F31C4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801ED4F0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801F31C4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801F3120 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801F3120 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801F31C4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801F31C4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801ED94C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801ED4F4; + extern s32 D_801ED908; + extern s16 D_801ED90C; + extern s16 D_801ED910; + extern s16 D_801ED914; + extern s16 D_801ED918; + extern s32 D_801ED920; + extern s32 D_801ED924; + extern s32 D_801ED934; + extern s16 D_801ED938; + extern s16 D_801ED93C; + extern s32 D_801ED940; + extern s32 D_801ED948; + extern s32 D_801ED94C[10]; + extern s32 D_801F3068; + extern s16 D_801F3120; + extern s32 D_801F314C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801F3120; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801ED908); + D_801ED908 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ED914, D_801ED918 ? 0x48 : 0x40); + (*(s16*)&D_801F31C4) = 2; + break; + case 0: + func_80179B28(D_801ED908); + D_801ED908 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ED90C, D_801ED910 ? 0x48 : 0x40); + (*(s16*)&D_801F31C4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801F3068 != 0) { + func_80179B28(D_801ED908); + D_801ED908 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801ED90C, D_801ED910 ? 0x48 : 0x40); + (*(s16*)&D_801F31C4) = 1; + } else { + (*(s16*)&D_801F31C4) = 3; + } + break; + case 0x32: + func_80179B28(D_801ED908); + D_801ED908 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801ED90C, + D_801ED910 ? 0x48 : 0x40); + (*(s16*)&D_801F31C4) = 1; + break; + case 2: + func_80179B28(D_801ED908); + if (D_801ED920 != 0) { + D_801ED4F0 = D_801ED920; + D_801ED920 = 0; + (*(s16*)&D_801F31C4) = 3; + return; + } + (*(s16*)&D_801F31C4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801F31C4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801F31C4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F31C4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801F31C4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F31C4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x1B: + D_801ED940 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801F31C4) = 4; + D_801ED4F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801F31C4) = 5; + D_801ED934 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801ED934 = (s32)func_8017A3B0; + (*(s16*)&D_801F31C4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x24: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F31C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F31C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801F31C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F31C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F31C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F31C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F31C4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F31C4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801F31C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ED924); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ED924); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ED924); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ED924); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x4E: + D_801ED948 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x2B: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801F31C4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801F314C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x34: + (*(s16*)&D_801F31C4) = 3; + D_801ED4F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801ED920 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801F31C4) = 3; + D_801ED4F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801F31C4) = 3; + D_801ED4F0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801ED4F0 = *(s32 *)(D_801ED4F0 + 4); + return; + case 0x37: + (*(s16*)&D_801F31C4) = 3; + D_801ED90C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ED910 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801F31C4) = 3; + D_801ED914 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ED918 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801F31C4) = 3; + D_801ED90C = w1; + D_801ED910 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801F31C4) = 3; + D_801ED914 = w2; + D_801ED918 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x43: + D_801ED934 = (s32)func_8017A3D8; + D_801ED93C = 0; + (*(s16*)&D_801F31C4) = 5; + D_801ED938 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F31C4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F31C4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801ED94C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801F31C4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801ED94C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801F31C4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801ED94C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801F31C4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801ED94C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801F31C4) = 3; + break; + default: + break; + } +Lend: + D_801ED4F0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ED91C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801ED91C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ED91C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801ED91C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801ED944; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801ED944 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801ED900; + +s32 func_8017A3B0(void) { + switch (D_801ED900) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801ED93C; +extern short D_801ED938; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801ED93C) { + case 0: + func_800D0CA0(1); + D_801ED93C = D_801ED93C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801ED938; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801ED93C = D_801ED93C + 1; + if (D_801ED93C < 0x1E) { + return 0; + } + D_801ED93C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801ED97C; + extern s16 D_801ED97E; + extern s16 D_801ED980; + extern s16 D_801ED974; + extern s16 D_801ED976; + extern s16 D_801ED978; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ED97C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ED97E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ED980, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ED974, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ED976, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ED978, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801ED904; +extern u16 D_801ED984; +extern u16 D_801ED986; +extern u16 D_801ED988; +extern s16 D_801F3150; + +void func_8017B1D8(void) { + func_8012A418(); + D_801F3150 = 0; + D_801ED904 = 0; + D_801ED984 = D_80126B5E; + D_801ED986 = D_80126B62; + D_801ED988 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187198[]; + extern s16 D_801ED97C; + extern s16 D_801ED974; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187198[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187198[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ED97C; + s16 *p78C = &D_801ED974; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801F3150 = 1; + D_801ED904 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801ED924; + extern SV4_8017B368 D_801ED92C; + extern s16 D_801ED97C; + extern s16 D_801ED974; + extern u16 D_80187198; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801ED924; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801ED92C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187198)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187198)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801ED97C) = loc0; + (*(SV4_8017B368 *)&D_801ED974) = loc1; + D_801F3150 = 1; + D_801ED904 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187198[]; + extern s16 D_801ED97C; + extern s16 D_801ED97E; + extern s16 D_801ED980; + extern s16 D_801ED974; + extern s16 D_801ED976; + extern s16 D_801ED978; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187198[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187198[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ED97C; + s16 *p78C = &D_801ED974; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801ED97E; + v798 = D_801ED980; + v78C = *p78C; + v78E = D_801ED976; + v790 = D_801ED978; + __asm__ __volatile__(""); + D_801F3150 = 1; + D_801ED904 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ED904; +extern s16 D_801ED97C; +extern s16 D_801ED97E; +extern s16 D_801ED980; +extern s16 D_801ED974; +extern s16 D_801ED976; +extern s16 D_801ED978; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801ED904 = 0; + D_801ED97C = (s16) D_80114F30; + D_801ED97E = (s16) D_80114F34; + D_801ED980 = (s16) D_80114F38; + D_801ED974 = (s16) D_80114F24; + D_801ED976 = (s16) D_80114F28; + D_801ED978 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801ED994; +extern s16 D_801ED996; +extern s16 D_801ED998; +extern s16 D_801ED99C; +extern s16 D_801ED99E; +extern s16 D_801ED9A0; + +void func_8017B824(void) { + D_801ED994 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801ED996 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801ED998 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801ED99C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801ED99E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801ED9A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801ED994; +extern s16 D_801ED996; +extern s16 D_801ED998; +extern s16 D_801ED99C; +extern s16 D_801ED99E; +extern s16 D_801ED9A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801ED994; + D_80114F34 = D_801ED996; + D_80114F38 = D_801ED998; + D_80114F24 = D_801ED99C; + D_80114F28 = D_801ED99E; + D_80114F2C = D_801ED9A0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801ED97C), src[8..15] -> (*(S8_8017B8E8 *)&D_801ED974) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801ED97C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801ED974) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801ED984; +extern u16 D_801ED986; +extern u16 D_801ED988; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ED904; +extern short D_801ED98C; +extern short D_801ED98E; +extern short D_801ED990; +extern s16 D_801ED97C; +extern s16 D_801ED97E; +extern s16 D_801ED980; +extern s16 D_801ED974; +extern s16 D_801ED976; +extern s16 D_801ED978; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ED984); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ED986); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ED988); + (*(s16 *)&D_801ED98C) = buf[0]; + (*(s16 *)&D_801ED98E) = buf[1]; + (*(s16 *)&D_801ED990) = buf[2]; + D_801ED97C = D_80114F30 + buf[0]; + D_801ED904 = 0; + D_801ED97E = D_80114F34 + buf[1]; + D_801ED980 = D_80114F38 + buf[2]; + D_801ED974 = D_80114F24 + buf[0]; + D_801ED976 = D_80114F28 + buf[1]; + D_801ED978 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801ED924; +extern SV4 D_801ED92C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ED92C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801ED924 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801ED92C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ED92C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801ED924) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801ED92C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801ED94C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801ED94C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801ED904; +extern s16 D_801F3150; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801ED904 = D_801ED904 + 1; + if (D_801ED904 >= 0x1F) { + D_801F3150 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801ED904; +extern s16 D_801F3150; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ED904 = D_801ED904 + 1; + if (0x18 < D_801ED904) { + func_8012A4BC(); + D_801F3150 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801ED904; +extern void (*D_801ED948)(void); +extern short D_801ED98C; +extern short D_801ED98E; +extern short D_801ED990; +extern s16 D_801F3150; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ED904 = D_801ED904 + 1; + if (D_801ED904 >= 0x19) { + if (D_801ED948 != 0) { + (*D_801ED948)(); + } else { + D_80114F30 = D_80114F30 + D_801ED98C; + D_80114F34 = D_80114F34 + D_801ED98E; + D_80114F38 = D_80114F38 + D_801ED990; + D_80114F24 = D_80114F24 + D_801ED98C; + D_80114F28 = D_80114F28 + D_801ED98E; + D_80114F2C = D_80114F2C + D_801ED990; + func_8012A4BC(); + } + D_801F3150 = 0; + } +} + + + +extern void (*D_80187238[])(void); + +void func_8017BE60(void *a0) { + D_80187238[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017BEBC); + + +extern void (*D_80187294[])(void); + +void func_8017CD9C(void *a0) { + D_80187294[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CDD8); + +DEFINE_func_8017CE24() /* dedup: shared engine-core @0x8017CE24 (src/shared) */ + + +extern void (*D_8018729C[])(void); + +void func_8017CE48(void *a0) { + D_8018729C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CE84); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CEC4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CF78); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CFA0); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017CFC8); + + +extern void (*D_801872B8[])(void); + +void func_8017D060(void *a0) { + D_801872B8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017D09C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017D13C); + + +s32 func_8017D2D4(void) { + return 143; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017D2DC); + +extern s32 func_8013767C(s32 a0); +extern s32 D_801EDA20; + +void func_8017EBA4(void) { + D_801EDA20 = (void *)((s32 (*)(void))func_8013767C)(); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017EBCC); + +extern s32 D_801EDA20; + s32 func_8017EC18(void) { + return D_801EDA20 != 0; + } + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017EC28); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F1F8); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F238); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F28C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F328); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F7F4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F830); + + +extern void (*D_80188DE0[])(void); + +void func_8017F878(void *a0) { + D_80188DE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F8B4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017F950); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017FD70); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017FDAC); + + +extern void (*D_80188DF0[])(void); + +void func_8017FE08(void *a0) { + D_80188DF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017FE44); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8017FEE0); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801803A4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801803E0); + + +extern void (*D_80188E00[])(void); + +void func_8018043C(void *a0) { + D_80188E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180478); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180514); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180854); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180890); + + +extern void (*D_80188E10[])(void); + +void func_801808D8(void *a0) { + D_80188E10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180914); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801809B0); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180E54); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180E90); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180EEC); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80180F64); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80181000); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801810A4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8018150C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8018153C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80181584); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801815D8); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801815F8); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8018164C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801816A4); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80181784); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801817BC); + +void func_80181834(void) { +} + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8018183C); + +extern s32 D_801EDA44; + void func_80181A28(void) { + s32 i = 0x4FB0; + do { + *(s32 *)((s32)&D_801EDA44 + i) = 0; + i -= 0x50; + } while (i >= 0); + } + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80181A4C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80181E04); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182238); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182284); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801824EC); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_8018275C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182974); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182A14); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182A48); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182B00); + +void func_80182B60(s32 *a0, s32 a1) { + *(s32*)((s32)a0 + 0xCC) = a1; + } + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182B68); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182B9C); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182BD0); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182C10); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182C58); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182D04); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182EB0); + + +extern void (*D_80188E58[])(void); + +void func_80182F58(void *a0) { + D_80188E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80182F94); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80183034); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801830A8); + +void func_80183120(void) { +} + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80183128); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801831EC); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801832BC); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801833A0); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_801835C8); + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_80178D40", func_80183748); + + diff --git a/src/ov_SC01_004/ov_SC01_004_jr_801734BC.c b/src/ov_SC01_004/ov_SC01_004_jr_801734BC.c index c38e672b5..4a6198749 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_801734BC.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_801734BC.c @@ -3104,902 +3104,3 @@ void func_80178D18(void) { D_801903CC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80190084; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80190084 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80190084; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80190084 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801900AC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801900AC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80190068; - -s32 func_8017A3B0(void) { - switch (D_80190068) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801900A4; -extern short D_801900A0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801900A4) { - case 0: - func_800D0CA0(1); - D_801900A4 = D_801900A4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801900A0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801900A4 = D_801900A4 + 1; - if (D_801900A4 < 0x1E) { - return 0; - } - D_801900A4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801900E4; - extern s16 D_801900E6; - extern s16 D_801900E8; - extern s16 D_801900DC; - extern s16 D_801900DE; - extern s16 D_801900E0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801900E4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801900E6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801900E8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801900DC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801900DE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801900E0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019006C; -extern u16 D_801900EC; -extern u16 D_801900EE; -extern u16 D_801900F0; -extern s16 D_80190358; - -void func_8017B1D8(void) { - func_8012A418(); - D_80190358 = 0; - D_8019006C = 0; - D_801900EC = D_80126B5E; - D_801900EE = D_80126B62; - D_801900F0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182B5C[]; - extern s16 D_801900E4; - extern s16 D_801900DC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182B5C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182B5C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801900E4; - s16 *p78C = &D_801900DC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80190358 = 1; - D_8019006C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019008C; - extern SV4_8017B368 D_80190094; - extern s16 D_801900E4; - extern s16 D_801900DC; - extern u16 D_80182B5C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019008C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80190094; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182B5C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182B5C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801900E4) = loc0; - (*(SV4_8017B368 *)&D_801900DC) = loc1; - D_80190358 = 1; - D_8019006C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182B5C[]; - extern s16 D_801900E4; - extern s16 D_801900E6; - extern s16 D_801900E8; - extern s16 D_801900DC; - extern s16 D_801900DE; - extern s16 D_801900E0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182B5C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182B5C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801900E4; - s16 *p78C = &D_801900DC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801900E6; - v798 = D_801900E8; - v78C = *p78C; - v78E = D_801900DE; - v790 = D_801900E0; - __asm__ __volatile__(""); - D_80190358 = 1; - D_8019006C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019006C; -extern s16 D_801900E4; -extern s16 D_801900E6; -extern s16 D_801900E8; -extern s16 D_801900DC; -extern s16 D_801900DE; -extern s16 D_801900E0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019006C = 0; - D_801900E4 = (s16) D_80114F30; - D_801900E6 = (s16) D_80114F34; - D_801900E8 = (s16) D_80114F38; - D_801900DC = (s16) D_80114F24; - D_801900DE = (s16) D_80114F28; - D_801900E0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801900FC; -extern s16 D_801900FE; -extern s16 D_80190100; -extern s16 D_80190104; -extern s16 D_80190106; -extern s16 D_80190108; - -void func_8017B824(void) { - D_801900FC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801900FE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80190100 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80190104 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80190106 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80190108 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801900FC; -extern s16 D_801900FE; -extern s16 D_80190100; -extern s16 D_80190104; -extern s16 D_80190106; -extern s16 D_80190108; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801900FC; - D_80114F34 = D_801900FE; - D_80114F38 = D_80190100; - D_80114F24 = D_80190104; - D_80114F28 = D_80190106; - D_80114F2C = D_80190108; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801900E4), src[8..15] -> (*(S8_8017B8E8 *)&D_801900DC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801900E4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801900DC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801900EC; -extern u16 D_801900EE; -extern u16 D_801900F0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019006C; -extern short D_801900F4; -extern short D_801900F6; -extern short D_801900F8; -extern s16 D_801900E4; -extern s16 D_801900E6; -extern s16 D_801900E8; -extern s16 D_801900DC; -extern s16 D_801900DE; -extern s16 D_801900E0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801900EC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801900EE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801900F0); - (*(s16 *)&D_801900F4) = buf[0]; - (*(s16 *)&D_801900F6) = buf[1]; - (*(s16 *)&D_801900F8) = buf[2]; - D_801900E4 = D_80114F30 + buf[0]; - D_8019006C = 0; - D_801900E6 = D_80114F34 + buf[1]; - D_801900E8 = D_80114F38 + buf[2]; - D_801900DC = D_80114F24 + buf[0]; - D_801900DE = D_80114F28 + buf[1]; - D_801900E0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019008C; -extern SV4 D_80190094; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80190094) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019008C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80190094 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80190094)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019008C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80190094) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801900B4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801900B4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019006C; -extern s16 D_80190358; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019006C = D_8019006C + 1; - if (D_8019006C >= 0x1F) { - D_80190358 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019006C; -extern s16 D_80190358; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019006C = D_8019006C + 1; - if (0x18 < D_8019006C) { - func_8012A4BC(); - D_80190358 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019006C; -extern void (*D_801900B0)(void); -extern short D_801900F4; -extern short D_801900F6; -extern short D_801900F8; -extern s16 D_80190358; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019006C = D_8019006C + 1; - if (D_8019006C >= 0x19) { - if (D_801900B0 != 0) { - (*D_801900B0)(); - } else { - D_80114F30 = D_80114F30 + D_801900F4; - D_80114F34 = D_80114F34 + D_801900F6; - D_80114F38 = D_80114F38 + D_801900F8; - D_80114F24 = D_80114F24 + D_801900F4; - D_80114F28 = D_80114F28 + D_801900F6; - D_80114F2C = D_80114F2C + D_801900F8; - func_8012A4BC(); - } - D_80190358 = 0; - } -} - - - -extern void (*D_80182BFC[])(void); - -void func_8017BE60(void *a0) { - D_80182BFC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017BE9C); - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_8017CD7C(void) { - if ((func_80029504() - 0x47EU) < 0x14U) { - func_80029514(0x488); - } - } - - - -extern void (*D_80182CF8[])(void); - -void func_8017CDB4(void *a0) { - D_80182CF8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017CDF0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE34(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017CE58); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CE98(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF14(void) { - func_800D1EBC(); - } - - - -extern void (*D_80182D0C[])(void); - -void func_8017CF34(void *a0) { - D_80182D0C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017CF70); - - -extern void (*D_80182D18[])(void); - -void func_8017CFE4(void *a0) { - D_80182D18[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D020); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D060); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D13C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D164); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D18C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D1B4); - - -extern void (*D_80182E0C[])(void); - -void func_8017D1F8(void *a0) { - D_80182E0C[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_8017D254(void); - void func_8017D234(void) { - func_8017D254(); - } - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D254); - - -s32 func_8017D2F0(void) { - return 61; -} - - -extern s16 D_80190110; - s32 func_8017D2F8(void) { - return D_80190110; - } - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D308); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D35C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D3AC); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D41C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D4A4); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D758); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D948); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017D964); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017DAB4); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017DBE0); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017DC38); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017DF18); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017E1D4); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017E3A0); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017E5B8); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017E804); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017EB30); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017EF8C); - - -extern void (*D_8018C2EC[])(void); - -void func_8017EFEC(void *a0) { - D_8018C2EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017F028); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017F078); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017F0E0); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_801734BC", func_8017F138); - -void func_8017F1C8(void) { -} - diff --git a/src/ov_SC01_004/ov_SC01_004_jr_80178D40.c b/src/ov_SC01_004/ov_SC01_004_jr_80178D40.c new file mode 100644 index 000000000..d7890380b --- /dev/null +++ b/src/ov_SC01_004/ov_SC01_004_jr_80178D40.c @@ -0,0 +1,4369 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182404[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018F3D8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801823F8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018243C[]; +extern unsigned short D_80182444[]; +extern unsigned short D_8018244C[]; +extern unsigned char D_8018F3E0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018F3D8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182454[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F514; +extern M2C_UNK D_8018F518; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F4A0; +extern void (*D_80182484[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018F51C[]; +extern u8 D_8018F524[]; +extern u8 D_8018F4D4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018248C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801824A8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801824B0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182518[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801824BC; +extern u8 D_801824C8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018254C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182554[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801825A8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801825DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801825CC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801825F8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182670[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182678[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182680[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182688[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182690[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182698[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801826A4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801826B0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801826BC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801826CC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801826DC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801826E4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801826EC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801826F4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801826FC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182704[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018270C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182714[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018271C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182724[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018272C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182734[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018273C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182744[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018274C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182754[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018275C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182764[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018276C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182774[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018277C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182784[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018278C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801827D0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182794; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80182800[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018283C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182894[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801828A4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801828AC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182A14[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182A20[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E564; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80190358; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018FC58; +extern short D_801903CC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801903CC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801903CC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018FC58 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801903CC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80190328 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80190328 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801903CC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801903CC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801900B4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018FC5C; + extern s32 D_80190070; + extern s16 D_80190074; + extern s16 D_80190078; + extern s16 D_8019007C; + extern s16 D_80190080; + extern s32 D_80190088; + extern s32 D_8019008C; + extern s32 D_8019009C; + extern s16 D_801900A0; + extern s16 D_801900A4; + extern s32 D_801900A8; + extern s32 D_801900B0; + extern s32 D_801900B4[10]; + extern s32 D_80190270; + extern s16 D_80190328; + extern s32 D_80190354; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80190328; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80190070); + D_80190070 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019007C, D_80190080 ? 0x48 : 0x40); + (*(s16*)&D_801903CC) = 2; + break; + case 0: + func_80179B28(D_80190070); + D_80190070 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80190074, D_80190078 ? 0x48 : 0x40); + (*(s16*)&D_801903CC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80190270 != 0) { + func_80179B28(D_80190070); + D_80190070 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80190074, D_80190078 ? 0x48 : 0x40); + (*(s16*)&D_801903CC) = 1; + } else { + (*(s16*)&D_801903CC) = 3; + } + break; + case 0x32: + func_80179B28(D_80190070); + D_80190070 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80190074, + D_80190078 ? 0x48 : 0x40); + (*(s16*)&D_801903CC) = 1; + break; + case 2: + func_80179B28(D_80190070); + if (D_80190088 != 0) { + D_8018FC58 = D_80190088; + D_80190088 = 0; + (*(s16*)&D_801903CC) = 3; + return; + } + (*(s16*)&D_801903CC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801903CC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801903CC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801903CC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801903CC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801903CC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801903CC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801903CC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801903CC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801903CC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801903CC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801903CC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x1B: + D_801900A8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801903CC) = 4; + D_8018FC5C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801903CC) = 5; + D_8019009C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019009C = (s32)func_8017A3B0; + (*(s16*)&D_801903CC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x24: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801903CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801903CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801903CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801903CC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801903CC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801903CC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801903CC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801903CC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801903CC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019008C); + (*(s16*)&D_801903CC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019008C); + (*(s16*)&D_801903CC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019008C); + (*(s16*)&D_801903CC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019008C); + (*(s16*)&D_801903CC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + break; + case 0x4E: + D_801900B0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x2B: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801903CC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80190354 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801903CC) = 3; + break; + case 0x34: + (*(s16*)&D_801903CC) = 3; + D_8018FC58 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80190088 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801903CC) = 3; + D_8018FC58 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801903CC) = 3; + D_8018FC58 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018FC58 = *(s32 *)(D_8018FC58 + 4); + return; + case 0x37: + (*(s16*)&D_801903CC) = 3; + D_80190074 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80190078 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801903CC) = 3; + D_8019007C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80190080 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801903CC) = 3; + D_80190074 = w1; + D_80190078 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801903CC) = 3; + D_8019007C = w2; + D_80190080 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + case 0x43: + D_8019009C = (s32)func_8017A3D8; + D_801900A4 = 0; + (*(s16*)&D_801903CC) = 5; + D_801900A0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801903CC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801903CC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801903CC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801900B4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801903CC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801900B4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801903CC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801900B4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801903CC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801900B4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801903CC) = 3; + break; + default: + break; + } +Lend: + D_8018FC58 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80190084; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80190084 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80190084; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80190084 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801900AC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801900AC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80190068; + +s32 func_8017A3B0(void) { + switch (D_80190068) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801900A4; +extern short D_801900A0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801900A4) { + case 0: + func_800D0CA0(1); + D_801900A4 = D_801900A4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801900A0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801900A4 = D_801900A4 + 1; + if (D_801900A4 < 0x1E) { + return 0; + } + D_801900A4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801900E4; + extern s16 D_801900E6; + extern s16 D_801900E8; + extern s16 D_801900DC; + extern s16 D_801900DE; + extern s16 D_801900E0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801900E4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801900E6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801900E8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801900DC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801900DE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801900E0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019006C; +extern u16 D_801900EC; +extern u16 D_801900EE; +extern u16 D_801900F0; +extern s16 D_80190358; + +void func_8017B1D8(void) { + func_8012A418(); + D_80190358 = 0; + D_8019006C = 0; + D_801900EC = D_80126B5E; + D_801900EE = D_80126B62; + D_801900F0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182B5C[]; + extern s16 D_801900E4; + extern s16 D_801900DC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182B5C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182B5C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801900E4; + s16 *p78C = &D_801900DC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80190358 = 1; + D_8019006C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019008C; + extern SV4_8017B368 D_80190094; + extern s16 D_801900E4; + extern s16 D_801900DC; + extern u16 D_80182B5C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019008C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80190094; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182B5C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182B5C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801900E4) = loc0; + (*(SV4_8017B368 *)&D_801900DC) = loc1; + D_80190358 = 1; + D_8019006C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182B5C[]; + extern s16 D_801900E4; + extern s16 D_801900E6; + extern s16 D_801900E8; + extern s16 D_801900DC; + extern s16 D_801900DE; + extern s16 D_801900E0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182B5C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182B5C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801900E4; + s16 *p78C = &D_801900DC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801900E6; + v798 = D_801900E8; + v78C = *p78C; + v78E = D_801900DE; + v790 = D_801900E0; + __asm__ __volatile__(""); + D_80190358 = 1; + D_8019006C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019006C; +extern s16 D_801900E4; +extern s16 D_801900E6; +extern s16 D_801900E8; +extern s16 D_801900DC; +extern s16 D_801900DE; +extern s16 D_801900E0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019006C = 0; + D_801900E4 = (s16) D_80114F30; + D_801900E6 = (s16) D_80114F34; + D_801900E8 = (s16) D_80114F38; + D_801900DC = (s16) D_80114F24; + D_801900DE = (s16) D_80114F28; + D_801900E0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801900FC; +extern s16 D_801900FE; +extern s16 D_80190100; +extern s16 D_80190104; +extern s16 D_80190106; +extern s16 D_80190108; + +void func_8017B824(void) { + D_801900FC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801900FE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80190100 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80190104 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80190106 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80190108 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801900FC; +extern s16 D_801900FE; +extern s16 D_80190100; +extern s16 D_80190104; +extern s16 D_80190106; +extern s16 D_80190108; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801900FC; + D_80114F34 = D_801900FE; + D_80114F38 = D_80190100; + D_80114F24 = D_80190104; + D_80114F28 = D_80190106; + D_80114F2C = D_80190108; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801900E4), src[8..15] -> (*(S8_8017B8E8 *)&D_801900DC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801900E4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801900DC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801900EC; +extern u16 D_801900EE; +extern u16 D_801900F0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019006C; +extern short D_801900F4; +extern short D_801900F6; +extern short D_801900F8; +extern s16 D_801900E4; +extern s16 D_801900E6; +extern s16 D_801900E8; +extern s16 D_801900DC; +extern s16 D_801900DE; +extern s16 D_801900E0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801900EC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801900EE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801900F0); + (*(s16 *)&D_801900F4) = buf[0]; + (*(s16 *)&D_801900F6) = buf[1]; + (*(s16 *)&D_801900F8) = buf[2]; + D_801900E4 = D_80114F30 + buf[0]; + D_8019006C = 0; + D_801900E6 = D_80114F34 + buf[1]; + D_801900E8 = D_80114F38 + buf[2]; + D_801900DC = D_80114F24 + buf[0]; + D_801900DE = D_80114F28 + buf[1]; + D_801900E0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019008C; +extern SV4 D_80190094; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80190094) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019008C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80190094 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80190094)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019008C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80190094) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801900B4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801900B4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019006C; +extern s16 D_80190358; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019006C = D_8019006C + 1; + if (D_8019006C >= 0x1F) { + D_80190358 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019006C; +extern s16 D_80190358; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019006C = D_8019006C + 1; + if (0x18 < D_8019006C) { + func_8012A4BC(); + D_80190358 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019006C; +extern void (*D_801900B0)(void); +extern short D_801900F4; +extern short D_801900F6; +extern short D_801900F8; +extern s16 D_80190358; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019006C = D_8019006C + 1; + if (D_8019006C >= 0x19) { + if (D_801900B0 != 0) { + (*D_801900B0)(); + } else { + D_80114F30 = D_80114F30 + D_801900F4; + D_80114F34 = D_80114F34 + D_801900F6; + D_80114F38 = D_80114F38 + D_801900F8; + D_80114F24 = D_80114F24 + D_801900F4; + D_80114F28 = D_80114F28 + D_801900F6; + D_80114F2C = D_80114F2C + D_801900F8; + func_8012A4BC(); + } + D_80190358 = 0; + } +} + + + +extern void (*D_80182BFC[])(void); + +void func_8017BE60(void *a0) { + D_80182BFC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017BE9C); + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_8017CD7C(void) { + if ((func_80029504() - 0x47EU) < 0x14U) { + func_80029514(0x488); + } + } + + + +extern void (*D_80182CF8[])(void); + +void func_8017CDB4(void *a0) { + D_80182CF8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017CDF0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE34(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017CE58); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CE98(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF14(void) { + func_800D1EBC(); + } + + + +extern void (*D_80182D0C[])(void); + +void func_8017CF34(void *a0) { + D_80182D0C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017CF70); + + +extern void (*D_80182D18[])(void); + +void func_8017CFE4(void *a0) { + D_80182D18[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D020); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D060); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D13C); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D164); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D18C); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D1B4); + + +extern void (*D_80182E0C[])(void); + +void func_8017D1F8(void *a0) { + D_80182E0C[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_8017D254(void); + void func_8017D234(void) { + func_8017D254(); + } + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D254); + + +s32 func_8017D2F0(void) { + return 61; +} + + +extern s16 D_80190110; + s32 func_8017D2F8(void) { + return D_80190110; + } + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D308); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D35C); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D3AC); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D41C); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D4A4); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D758); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D948); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017D964); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017DAB4); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017DBE0); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017DC38); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017DF18); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017E1D4); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017E3A0); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017E5B8); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017E804); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017EB30); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017EF8C); + + +extern void (*D_8018C2EC[])(void); + +void func_8017EFEC(void *a0) { + D_8018C2EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017F028); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017F078); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017F0E0); + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_80178D40", func_8017F138); + +void func_8017F1C8(void) { +} + + diff --git a/src/ov_SC01_005/ov_SC01_005_jr_801734BC.c b/src/ov_SC01_005/ov_SC01_005_jr_801734BC.c index cc3021092..d3b646fa5 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_801734BC.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_801734BC.c @@ -3105,1142 +3105,3 @@ void func_80178D18(void) { D_801CE02C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CD7E4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CD7E4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CD7E4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CD7E4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CD80C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CD80C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CD7C8; - -s32 func_8017A3B0(void) { - switch (D_801CD7C8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CD804; -extern short D_801CD800; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CD804) { - case 0: - func_800D0CA0(1); - D_801CD804 = D_801CD804 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CD800; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CD804 = D_801CD804 + 1; - if (D_801CD804 < 0x1E) { - return 0; - } - D_801CD804 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CD844; - extern s16 D_801CD846; - extern s16 D_801CD848; - extern s16 D_801CD83C; - extern s16 D_801CD83E; - extern s16 D_801CD840; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CD844, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CD846, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CD848, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CD83C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CD83E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CD840, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CD7CC; -extern u16 D_801CD84C; -extern u16 D_801CD84E; -extern u16 D_801CD850; -extern s16 D_801CDFB8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CDFB8 = 0; - D_801CD7CC = 0; - D_801CD84C = D_80126B5E; - D_801CD84E = D_80126B62; - D_801CD850 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CF0[]; - extern s16 D_801CD844; - extern s16 D_801CD83C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CD844; - s16 *p78C = &D_801CD83C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CDFB8 = 1; - D_801CD7CC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CD7EC; - extern SV4_8017B368 D_801CD7F4; - extern s16 D_801CD844; - extern s16 D_801CD83C; - extern u16 D_80185CF0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CD7EC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CD7F4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CD844) = loc0; - (*(SV4_8017B368 *)&D_801CD83C) = loc1; - D_801CDFB8 = 1; - D_801CD7CC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CF0[]; - extern s16 D_801CD844; - extern s16 D_801CD846; - extern s16 D_801CD848; - extern s16 D_801CD83C; - extern s16 D_801CD83E; - extern s16 D_801CD840; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CD844; - s16 *p78C = &D_801CD83C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CD846; - v798 = D_801CD848; - v78C = *p78C; - v78E = D_801CD83E; - v790 = D_801CD840; - __asm__ __volatile__(""); - D_801CDFB8 = 1; - D_801CD7CC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CD7CC; -extern s16 D_801CD844; -extern s16 D_801CD846; -extern s16 D_801CD848; -extern s16 D_801CD83C; -extern s16 D_801CD83E; -extern s16 D_801CD840; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CD7CC = 0; - D_801CD844 = (s16) D_80114F30; - D_801CD846 = (s16) D_80114F34; - D_801CD848 = (s16) D_80114F38; - D_801CD83C = (s16) D_80114F24; - D_801CD83E = (s16) D_80114F28; - D_801CD840 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CD85C; -extern s16 D_801CD85E; -extern s16 D_801CD860; -extern s16 D_801CD864; -extern s16 D_801CD866; -extern s16 D_801CD868; - -void func_8017B824(void) { - D_801CD85C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CD85E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CD860 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CD864 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CD866 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CD868 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CD85C; -extern s16 D_801CD85E; -extern s16 D_801CD860; -extern s16 D_801CD864; -extern s16 D_801CD866; -extern s16 D_801CD868; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CD85C; - D_80114F34 = D_801CD85E; - D_80114F38 = D_801CD860; - D_80114F24 = D_801CD864; - D_80114F28 = D_801CD866; - D_80114F2C = D_801CD868; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CD844), src[8..15] -> (*(S8_8017B8E8 *)&D_801CD83C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CD844) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CD83C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CD84C; -extern u16 D_801CD84E; -extern u16 D_801CD850; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CD7CC; -extern short D_801CD854; -extern short D_801CD856; -extern short D_801CD858; -extern s16 D_801CD844; -extern s16 D_801CD846; -extern s16 D_801CD848; -extern s16 D_801CD83C; -extern s16 D_801CD83E; -extern s16 D_801CD840; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CD84C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CD84E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CD850); - (*(s16 *)&D_801CD854) = buf[0]; - (*(s16 *)&D_801CD856) = buf[1]; - (*(s16 *)&D_801CD858) = buf[2]; - D_801CD844 = D_80114F30 + buf[0]; - D_801CD7CC = 0; - D_801CD846 = D_80114F34 + buf[1]; - D_801CD848 = D_80114F38 + buf[2]; - D_801CD83C = D_80114F24 + buf[0]; - D_801CD83E = D_80114F28 + buf[1]; - D_801CD840 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CD7EC; -extern SV4 D_801CD7F4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CD7F4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CD7EC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CD7F4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CD7F4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CD7EC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CD7F4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CD814[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CD814; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CD7CC; -extern s16 D_801CDFB8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CD7CC = D_801CD7CC + 1; - if (D_801CD7CC >= 0x1F) { - D_801CDFB8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CD7CC; -extern s16 D_801CDFB8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CD7CC = D_801CD7CC + 1; - if (0x18 < D_801CD7CC) { - func_8012A4BC(); - D_801CDFB8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CD7CC; -extern void (*D_801CD810)(void); -extern short D_801CD854; -extern short D_801CD856; -extern short D_801CD858; -extern s16 D_801CDFB8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CD7CC = D_801CD7CC + 1; - if (D_801CD7CC >= 0x19) { - if (D_801CD810 != 0) { - (*D_801CD810)(); - } else { - D_80114F30 = D_80114F30 + D_801CD854; - D_80114F34 = D_80114F34 + D_801CD856; - D_80114F38 = D_80114F38 + D_801CD858; - D_80114F24 = D_80114F24 + D_801CD854; - D_80114F28 = D_80114F28 + D_801CD856; - D_80114F2C = D_80114F2C + D_801CD858; - func_8012A4BC(); - } - D_801CDFB8 = 0; - } -} - - - -extern void (*D_80185D90[])(void); - -void func_8017BE60(void *a0) { - D_80185D90[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_80174684(void *a0); -extern s32 func_8017BEC4(void); - -void func_8017BE9C(void) { - func_80174684(&func_8017BEC4); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017BEC4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017BF00); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017BF70); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017BFEC); - -DEFINE_func_8017C048() /* dedup: shared engine-core @0x8017C048 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C078; - void func_8017C050(void) { - func_80174684(&func_8017C078); - } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C078); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C0B4); - -DEFINE_func_8017C120() /* dedup: shared engine-core @0x8017C120 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C150; - void func_8017C128(void) { - func_80174684(&func_8017C150); - } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C18C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C1E8); - -DEFINE_func_8017C238() /* dedup: shared engine-core @0x8017C238 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C268(s32); - void func_8017C240(void) { - func_80174684((void *)func_8017C268); - } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C268); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C2A4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C2F4); - -DEFINE_func_8017C338() /* dedup: shared engine-core @0x8017C338 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017C340); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D220); - - -extern void (*D_80185EAC[])(void); - -void func_8017D26C(void *a0) { - D_80185EAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D2A8); - -extern s32 func_800167F0(s32 arg0); - -s32 func_8017D2EC(void) { - return (func_800167F0(0) & 0xFFFF) != 0; -} - - - -extern void (*D_80185EB4[])(void); - -void func_8017D310(void *a0) { - D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D34C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D38C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D408(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185EC0[])(void); - -void func_8017D428(void *a0) { - D_80185EC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_8017D464() /* dedup: shared engine-core @0x8017D464 (src/shared) */ - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D480(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - -void func_8017D4FC(void) { - func_800D1EBC(); -} - - - -extern void (*D_80185ECC[])(void); - -void func_8017D51C(void *a0) { - D_80185ECC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D558); - -DEFINE_func_8017D5CC() /* dedup: shared engine-core @0x8017D5CC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D5D4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D5FC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D624); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D6E4); - - -extern void (*D_80185EF8[])(void); - -void func_8017D7A4(void *a0) { - D_80185EF8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D808); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D9A0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017D9F4); - -DEFINE_func_8017DA84() /* dedup: shared engine-core @0x8017DA84 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DAAC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DB50); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DBC0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DC48); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017DEFC); - -DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E108); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E258); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E384); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E3DC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E6BC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017E978); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017EB44); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017ED5C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017F2D4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017F730); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017F790); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017F9F8); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017FBCC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017FD50); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8017FF74); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180010); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801800C0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801803AC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801803F0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8018041C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8018048C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180564); - -DEFINE_func_801805A0() /* dedup: shared engine-core @0x801805A0 (src/shared) */ - -extern s32 func_8017DAAC(s32 a0, s32 a1); - void func_801805A8(void) { - ((void (*)(s32, s32))func_8017DAAC)(0x3, 0); - } - - -extern s32 func_8017DAAC(s32 a0, s32 a1); - -void func_801805CC(void) { - func_8017DAAC(0x3, 0x2); -} - - -extern s32 func_8017DAAC(s32 a0, s32 a1); - void func_801805F0(void) { - ((void (*)(s32, s32))func_8017DAAC)(0x4, 0); - } - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180614); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180674); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180710); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180734); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8018078C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801807D8); - -DEFINE_func_801807E8() /* dedup: shared engine-core @0x801807E8 (src/shared) */ - - -DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180908); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180974); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801809F4); - -DEFINE_func_80180A30() /* dedup: shared engine-core @0x80180A30 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180A38); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180AD0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180AE8); - -DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */ - - -DEFINE_func_80180B14() /* dedup: shared engine-core @0x80180B14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180B24); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180B34); - -extern void func_800D0C48(s32 arg); - void func_80180B44(void) { - func_800D0C48(0x1); - } - - - -extern void (*D_801BC7A4[])(void); - -void func_80180B64(void *a0) { - D_801BC7A4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801BC7B4[])(void); - -void func_80180BA0(void *a0) { - D_801BC7B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180BDC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180C98); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180D10); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180D48); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180D9C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180E24); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180E9C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180ED4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180F28); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180FB0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80180FFC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181054); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801810AC); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181100); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181188); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181228); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801812B0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8018165C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181784); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181894); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80181B00); - - -extern void (*D_801C3A5C[])(void); - -void func_80182000(void *a0) { - D_801C3A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_8018203C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801820F8); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80182240); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_801822B0); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_801734BC", func_80182324); - diff --git a/src/ov_SC01_005/ov_SC01_005_jr_80178D40.c b/src/ov_SC01_005/ov_SC01_005_jr_80178D40.c new file mode 100644 index 000000000..d20dbc043 --- /dev/null +++ b/src/ov_SC01_005/ov_SC01_005_jr_80178D40.c @@ -0,0 +1,4610 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185598[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CCB38; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018558C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801855D0[]; +extern unsigned short D_801855D8[]; +extern unsigned short D_801855E0[]; +extern unsigned char D_801CCB40[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CCB38; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801855E8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CCC74; +extern M2C_UNK D_801CCC78; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CCC00; +extern void (*D_80185618[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CCC7C[]; +extern u8 D_801CCC84[]; +extern u8 D_801CCC34[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80185620[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018563C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185644[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801856AC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185650; +extern u8 D_8018565C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801856E0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801856E8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018573C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185770[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185760[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018578C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185804[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018580C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185814[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018581C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185824[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018582C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185838[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185844[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185850[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185860[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185870[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185878[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185880[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185888[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185890[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185898[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801858A0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801858A8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801858B0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801858B8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801858C0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801858C8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801858D0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801858D8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801858E0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801858E8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801858F0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801858F8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185900[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185908[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185910[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185918[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185920[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185964[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185928; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185994[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801859D0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185A28[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185A38[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185A40[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185BA8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185BB4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CBCC4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CDFB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CD3B8; +extern short D_801CE02C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CE02C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CE02C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CD3B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CE02C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CDF88 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CDF88 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CE02C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CE02C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CD814[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CD3BC; + extern s32 D_801CD7D0; + extern s16 D_801CD7D4; + extern s16 D_801CD7D8; + extern s16 D_801CD7DC; + extern s16 D_801CD7E0; + extern s32 D_801CD7E8; + extern s32 D_801CD7EC; + extern s32 D_801CD7FC; + extern s16 D_801CD800; + extern s16 D_801CD804; + extern s32 D_801CD808; + extern s32 D_801CD810; + extern s32 D_801CD814[10]; + extern s32 D_801CDED0; + extern s16 D_801CDF88; + extern s32 D_801CDFB4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CDF88; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CD7DC, D_801CD7E0 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 2; + break; + case 0: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CD7D4, D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CDED0 != 0) { + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CD7D4, D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + } else { + (*(s16*)&D_801CE02C) = 3; + } + break; + case 0x32: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CD7D4, + D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + break; + case 2: + func_80179B28(D_801CD7D0); + if (D_801CD7E8 != 0) { + D_801CD3B8 = D_801CD7E8; + D_801CD7E8 = 0; + (*(s16*)&D_801CE02C) = 3; + return; + } + (*(s16*)&D_801CE02C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1B: + D_801CD808 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CE02C) = 4; + D_801CD3BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CE02C) = 5; + D_801CD7FC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CD7FC = (s32)func_8017A3B0; + (*(s16*)&D_801CE02C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x24: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE02C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE02C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CE02C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4E: + D_801CD810 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x2B: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CDFB4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x34: + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CD7E8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CD3B8 = *(s32 *)(D_801CD3B8 + 4); + return; + case 0x37: + (*(s16*)&D_801CE02C) = 3; + D_801CD7D4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CD7D8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CE02C) = 3; + D_801CD7DC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CD7E0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CE02C) = 3; + D_801CD7D4 = w1; + D_801CD7D8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CE02C) = 3; + D_801CD7DC = w2; + D_801CD7E0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x43: + D_801CD7FC = (s32)func_8017A3D8; + D_801CD804 = 0; + (*(s16*)&D_801CE02C) = 5; + D_801CD800 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CD814; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CE02C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CD814; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CE02C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CD814[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CE02C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CD814; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CE02C) = 3; + break; + default: + break; + } +Lend: + D_801CD3B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CD7E4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CD7E4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CD7E4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CD7E4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CD80C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CD80C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CD7C8; + +s32 func_8017A3B0(void) { + switch (D_801CD7C8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CD804; +extern short D_801CD800; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CD804) { + case 0: + func_800D0CA0(1); + D_801CD804 = D_801CD804 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CD800; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CD804 = D_801CD804 + 1; + if (D_801CD804 < 0x1E) { + return 0; + } + D_801CD804 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CD844; + extern s16 D_801CD846; + extern s16 D_801CD848; + extern s16 D_801CD83C; + extern s16 D_801CD83E; + extern s16 D_801CD840; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CD844, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CD846, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CD848, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CD83C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CD83E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CD840, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CD7CC; +extern u16 D_801CD84C; +extern u16 D_801CD84E; +extern u16 D_801CD850; +extern s16 D_801CDFB8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CDFB8 = 0; + D_801CD7CC = 0; + D_801CD84C = D_80126B5E; + D_801CD84E = D_80126B62; + D_801CD850 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CF0[]; + extern s16 D_801CD844; + extern s16 D_801CD83C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CD844; + s16 *p78C = &D_801CD83C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CDFB8 = 1; + D_801CD7CC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CD7EC; + extern SV4_8017B368 D_801CD7F4; + extern s16 D_801CD844; + extern s16 D_801CD83C; + extern u16 D_80185CF0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CD7EC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CD7F4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CD844) = loc0; + (*(SV4_8017B368 *)&D_801CD83C) = loc1; + D_801CDFB8 = 1; + D_801CD7CC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CF0[]; + extern s16 D_801CD844; + extern s16 D_801CD846; + extern s16 D_801CD848; + extern s16 D_801CD83C; + extern s16 D_801CD83E; + extern s16 D_801CD840; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CD844; + s16 *p78C = &D_801CD83C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CD846; + v798 = D_801CD848; + v78C = *p78C; + v78E = D_801CD83E; + v790 = D_801CD840; + __asm__ __volatile__(""); + D_801CDFB8 = 1; + D_801CD7CC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CD7CC; +extern s16 D_801CD844; +extern s16 D_801CD846; +extern s16 D_801CD848; +extern s16 D_801CD83C; +extern s16 D_801CD83E; +extern s16 D_801CD840; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CD7CC = 0; + D_801CD844 = (s16) D_80114F30; + D_801CD846 = (s16) D_80114F34; + D_801CD848 = (s16) D_80114F38; + D_801CD83C = (s16) D_80114F24; + D_801CD83E = (s16) D_80114F28; + D_801CD840 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CD85C; +extern s16 D_801CD85E; +extern s16 D_801CD860; +extern s16 D_801CD864; +extern s16 D_801CD866; +extern s16 D_801CD868; + +void func_8017B824(void) { + D_801CD85C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CD85E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CD860 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CD864 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CD866 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CD868 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CD85C; +extern s16 D_801CD85E; +extern s16 D_801CD860; +extern s16 D_801CD864; +extern s16 D_801CD866; +extern s16 D_801CD868; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CD85C; + D_80114F34 = D_801CD85E; + D_80114F38 = D_801CD860; + D_80114F24 = D_801CD864; + D_80114F28 = D_801CD866; + D_80114F2C = D_801CD868; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CD844), src[8..15] -> (*(S8_8017B8E8 *)&D_801CD83C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CD844) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CD83C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CD84C; +extern u16 D_801CD84E; +extern u16 D_801CD850; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CD7CC; +extern short D_801CD854; +extern short D_801CD856; +extern short D_801CD858; +extern s16 D_801CD844; +extern s16 D_801CD846; +extern s16 D_801CD848; +extern s16 D_801CD83C; +extern s16 D_801CD83E; +extern s16 D_801CD840; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CD84C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CD84E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CD850); + (*(s16 *)&D_801CD854) = buf[0]; + (*(s16 *)&D_801CD856) = buf[1]; + (*(s16 *)&D_801CD858) = buf[2]; + D_801CD844 = D_80114F30 + buf[0]; + D_801CD7CC = 0; + D_801CD846 = D_80114F34 + buf[1]; + D_801CD848 = D_80114F38 + buf[2]; + D_801CD83C = D_80114F24 + buf[0]; + D_801CD83E = D_80114F28 + buf[1]; + D_801CD840 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CD7EC; +extern SV4 D_801CD7F4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CD7F4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CD7EC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CD7F4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CD7F4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CD7EC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CD7F4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CD814[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CD814; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CD7CC; +extern s16 D_801CDFB8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CD7CC = D_801CD7CC + 1; + if (D_801CD7CC >= 0x1F) { + D_801CDFB8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CD7CC; +extern s16 D_801CDFB8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CD7CC = D_801CD7CC + 1; + if (0x18 < D_801CD7CC) { + func_8012A4BC(); + D_801CDFB8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CD7CC; +extern void (*D_801CD810)(void); +extern short D_801CD854; +extern short D_801CD856; +extern short D_801CD858; +extern s16 D_801CDFB8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CD7CC = D_801CD7CC + 1; + if (D_801CD7CC >= 0x19) { + if (D_801CD810 != 0) { + (*D_801CD810)(); + } else { + D_80114F30 = D_80114F30 + D_801CD854; + D_80114F34 = D_80114F34 + D_801CD856; + D_80114F38 = D_80114F38 + D_801CD858; + D_80114F24 = D_80114F24 + D_801CD854; + D_80114F28 = D_80114F28 + D_801CD856; + D_80114F2C = D_80114F2C + D_801CD858; + func_8012A4BC(); + } + D_801CDFB8 = 0; + } +} + + + +extern void (*D_80185D90[])(void); + +void func_8017BE60(void *a0) { + D_80185D90[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_80174684(void *a0); +extern s32 func_8017BEC4(void); + +void func_8017BE9C(void) { + func_80174684(&func_8017BEC4); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017BEC4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017BF00); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017BF70); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017BFEC); + +DEFINE_func_8017C048() /* dedup: shared engine-core @0x8017C048 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C078; + void func_8017C050(void) { + func_80174684(&func_8017C078); + } + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C078); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C0B4); + +DEFINE_func_8017C120() /* dedup: shared engine-core @0x8017C120 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C150; + void func_8017C128(void) { + func_80174684(&func_8017C150); + } + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C18C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C1E8); + +DEFINE_func_8017C238() /* dedup: shared engine-core @0x8017C238 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C268(s32); + void func_8017C240(void) { + func_80174684((void *)func_8017C268); + } + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C268); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C2A4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C2F4); + +DEFINE_func_8017C338() /* dedup: shared engine-core @0x8017C338 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017C340); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D220); + + +extern void (*D_80185EAC[])(void); + +void func_8017D26C(void *a0) { + D_80185EAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D2A8); + +extern s32 func_800167F0(s32 arg0); + +s32 func_8017D2EC(void) { + return (func_800167F0(0) & 0xFFFF) != 0; +} + + + +extern void (*D_80185EB4[])(void); + +void func_8017D310(void *a0) { + D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D34C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D38C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D408(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185EC0[])(void); + +void func_8017D428(void *a0) { + D_80185EC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_8017D464() /* dedup: shared engine-core @0x8017D464 (src/shared) */ + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D480(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + +void func_8017D4FC(void) { + func_800D1EBC(); +} + + + +extern void (*D_80185ECC[])(void); + +void func_8017D51C(void *a0) { + D_80185ECC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D558); + +DEFINE_func_8017D5CC() /* dedup: shared engine-core @0x8017D5CC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D5D4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D5FC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D624); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D6E4); + + +extern void (*D_80185EF8[])(void); + +void func_8017D7A4(void *a0) { + D_80185EF8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D808); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D9A0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017D9F4); + +DEFINE_func_8017DA84() /* dedup: shared engine-core @0x8017DA84 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DAAC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DB50); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DBC0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DC48); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017DEFC); + +DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E108); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E258); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E384); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E3DC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E6BC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017E978); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017EB44); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017ED5C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017F2D4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017F730); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017F790); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017F9F8); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017FBCC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017FD50); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8017FF74); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180010); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801800C0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801803AC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801803F0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8018041C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8018048C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180564); + +DEFINE_func_801805A0() /* dedup: shared engine-core @0x801805A0 (src/shared) */ + +extern s32 func_8017DAAC(s32 a0, s32 a1); + void func_801805A8(void) { + ((void (*)(s32, s32))func_8017DAAC)(0x3, 0); + } + + +extern s32 func_8017DAAC(s32 a0, s32 a1); + +void func_801805CC(void) { + func_8017DAAC(0x3, 0x2); +} + + +extern s32 func_8017DAAC(s32 a0, s32 a1); + void func_801805F0(void) { + ((void (*)(s32, s32))func_8017DAAC)(0x4, 0); + } + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180614); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180674); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180710); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180734); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8018078C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801807D8); + +DEFINE_func_801807E8() /* dedup: shared engine-core @0x801807E8 (src/shared) */ + + +DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180908); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180974); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801809F4); + +DEFINE_func_80180A30() /* dedup: shared engine-core @0x80180A30 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180A38); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180AD0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180AE8); + +DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */ + + +DEFINE_func_80180B14() /* dedup: shared engine-core @0x80180B14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180B24); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180B34); + +extern void func_800D0C48(s32 arg); + void func_80180B44(void) { + func_800D0C48(0x1); + } + + + +extern void (*D_801BC7A4[])(void); + +void func_80180B64(void *a0) { + D_801BC7A4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801BC7B4[])(void); + +void func_80180BA0(void *a0) { + D_801BC7B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180BDC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180C98); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180D10); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180D48); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180D9C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180E24); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180E9C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180ED4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180F28); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180FB0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80180FFC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181054); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801810AC); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181100); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181188); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181228); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801812B0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8018165C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181784); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181894); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80181B00); + + +extern void (*D_801C3A5C[])(void); + +void func_80182000(void *a0) { + D_801C3A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_8018203C); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801820F8); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80182240); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_801822B0); + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_80178D40", func_80182324); + + diff --git a/src/ov_SC01_006/ov_SC01_006_jr_801734BC.c b/src/ov_SC01_006/ov_SC01_006_jr_801734BC.c index 8303c3bdc..6b2f832b1 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_801734BC.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_801734BC.c @@ -3105,1141 +3105,3 @@ void func_80178D18(void) { D_801CE02C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CD7E4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CD7E4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CD7E4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CD7E4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CD80C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CD80C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CD7C8; - -s32 func_8017A3B0(void) { - switch (D_801CD7C8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CD804; -extern short D_801CD800; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CD804) { - case 0: - func_800D0CA0(1); - D_801CD804 = D_801CD804 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CD800; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CD804 = D_801CD804 + 1; - if (D_801CD804 < 0x1E) { - return 0; - } - D_801CD804 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CD844; - extern s16 D_801CD846; - extern s16 D_801CD848; - extern s16 D_801CD83C; - extern s16 D_801CD83E; - extern s16 D_801CD840; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CD844, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CD846, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CD848, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CD83C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CD83E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CD840, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CD7CC; -extern u16 D_801CD84C; -extern u16 D_801CD84E; -extern u16 D_801CD850; -extern s16 D_801CDFB8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CDFB8 = 0; - D_801CD7CC = 0; - D_801CD84C = D_80126B5E; - D_801CD84E = D_80126B62; - D_801CD850 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CF0[]; - extern s16 D_801CD844; - extern s16 D_801CD83C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CD844; - s16 *p78C = &D_801CD83C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CDFB8 = 1; - D_801CD7CC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CD7EC; - extern SV4_8017B368 D_801CD7F4; - extern s16 D_801CD844; - extern s16 D_801CD83C; - extern u16 D_80185CF0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CD7EC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CD7F4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CD844) = loc0; - (*(SV4_8017B368 *)&D_801CD83C) = loc1; - D_801CDFB8 = 1; - D_801CD7CC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CF0[]; - extern s16 D_801CD844; - extern s16 D_801CD846; - extern s16 D_801CD848; - extern s16 D_801CD83C; - extern s16 D_801CD83E; - extern s16 D_801CD840; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CD844; - s16 *p78C = &D_801CD83C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CD846; - v798 = D_801CD848; - v78C = *p78C; - v78E = D_801CD83E; - v790 = D_801CD840; - __asm__ __volatile__(""); - D_801CDFB8 = 1; - D_801CD7CC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CD7CC; -extern s16 D_801CD844; -extern s16 D_801CD846; -extern s16 D_801CD848; -extern s16 D_801CD83C; -extern s16 D_801CD83E; -extern s16 D_801CD840; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CD7CC = 0; - D_801CD844 = (s16) D_80114F30; - D_801CD846 = (s16) D_80114F34; - D_801CD848 = (s16) D_80114F38; - D_801CD83C = (s16) D_80114F24; - D_801CD83E = (s16) D_80114F28; - D_801CD840 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CD85C; -extern s16 D_801CD85E; -extern s16 D_801CD860; -extern s16 D_801CD864; -extern s16 D_801CD866; -extern s16 D_801CD868; - -void func_8017B824(void) { - D_801CD85C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CD85E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CD860 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CD864 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CD866 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CD868 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CD85C; -extern s16 D_801CD85E; -extern s16 D_801CD860; -extern s16 D_801CD864; -extern s16 D_801CD866; -extern s16 D_801CD868; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CD85C; - D_80114F34 = D_801CD85E; - D_80114F38 = D_801CD860; - D_80114F24 = D_801CD864; - D_80114F28 = D_801CD866; - D_80114F2C = D_801CD868; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CD844), src[8..15] -> (*(S8_8017B8E8 *)&D_801CD83C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CD844) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CD83C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CD84C; -extern u16 D_801CD84E; -extern u16 D_801CD850; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CD7CC; -extern short D_801CD854; -extern short D_801CD856; -extern short D_801CD858; -extern s16 D_801CD844; -extern s16 D_801CD846; -extern s16 D_801CD848; -extern s16 D_801CD83C; -extern s16 D_801CD83E; -extern s16 D_801CD840; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CD84C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CD84E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CD850); - (*(s16 *)&D_801CD854) = buf[0]; - (*(s16 *)&D_801CD856) = buf[1]; - (*(s16 *)&D_801CD858) = buf[2]; - D_801CD844 = D_80114F30 + buf[0]; - D_801CD7CC = 0; - D_801CD846 = D_80114F34 + buf[1]; - D_801CD848 = D_80114F38 + buf[2]; - D_801CD83C = D_80114F24 + buf[0]; - D_801CD83E = D_80114F28 + buf[1]; - D_801CD840 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CD7EC; -extern SV4 D_801CD7F4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CD7F4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CD7EC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CD7F4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CD7F4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CD7EC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CD7F4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CD814[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CD814; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CD7CC; -extern s16 D_801CDFB8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CD7CC = D_801CD7CC + 1; - if (D_801CD7CC >= 0x1F) { - D_801CDFB8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CD7CC; -extern s16 D_801CDFB8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CD7CC = D_801CD7CC + 1; - if (0x18 < D_801CD7CC) { - func_8012A4BC(); - D_801CDFB8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CD7CC; -extern void (*D_801CD810)(void); -extern short D_801CD854; -extern short D_801CD856; -extern short D_801CD858; -extern s16 D_801CDFB8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CD7CC = D_801CD7CC + 1; - if (D_801CD7CC >= 0x19) { - if (D_801CD810 != 0) { - (*D_801CD810)(); - } else { - D_80114F30 = D_80114F30 + D_801CD854; - D_80114F34 = D_80114F34 + D_801CD856; - D_80114F38 = D_80114F38 + D_801CD858; - D_80114F24 = D_80114F24 + D_801CD854; - D_80114F28 = D_80114F28 + D_801CD856; - D_80114F2C = D_80114F2C + D_801CD858; - func_8012A4BC(); - } - D_801CDFB8 = 0; - } -} - - - -extern void (*D_80185D90[])(void); - -void func_8017BE60(void *a0) { - D_80185D90[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_80174684(void *); - extern s32 func_8017BEC4(s32); - void func_8017BE9C(void) { - func_80174684((void *)func_8017BEC4); - } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017BEC4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017BF00); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017BF70); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017BFEC); - -DEFINE_func_8017C048() /* dedup: shared engine-core @0x8017C048 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C078; - void func_8017C050(void) { - func_80174684(&func_8017C078); - } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C078); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C0B4); - -DEFINE_func_8017C120() /* dedup: shared engine-core @0x8017C120 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C150; - void func_8017C128(void) { - func_80174684(&func_8017C150); - } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C18C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C1E8); - -DEFINE_func_8017C238() /* dedup: shared engine-core @0x8017C238 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017C268(s32); - void func_8017C240(void) { - func_80174684((void *)func_8017C268); - } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C268); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C2A4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C2F4); - -DEFINE_func_8017C338() /* dedup: shared engine-core @0x8017C338 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017C340); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D220); - - -extern void (*D_80185EAC[])(void); - -void func_8017D26C(void *a0) { - D_80185EAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D2A8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D2EC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80185EB4[])(void); - -void func_8017D310(void *a0) { - D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D34C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D38C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D408(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185EC0[])(void); - -void func_8017D428(void *a0) { - D_80185EC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_8017D464() /* dedup: shared engine-core @0x8017D464 (src/shared) */ - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D480(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D4FC(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185ECC[])(void); - -void func_8017D51C(void *a0) { - D_80185ECC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D558); - -DEFINE_func_8017D5CC() /* dedup: shared engine-core @0x8017D5CC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D5D4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D5FC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D624); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D6E4); - - -extern void (*D_80185EF8[])(void); - -void func_8017D7A4(void *a0) { - D_80185EF8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D808); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D9A0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017D9F4); - -DEFINE_func_8017DA84() /* dedup: shared engine-core @0x8017DA84 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DAAC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DB50); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DBC0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DC48); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017DEFC); - -DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E108); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E258); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E384); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E3DC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E6BC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017E978); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017EB44); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017ED5C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017F2D4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017F730); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017F790); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017F9F8); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017FBCC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017FD50); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8017FF74); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180010); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801800C0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801803AC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801803F0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8018041C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8018048C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180564); - -DEFINE_func_801805A0() /* dedup: shared engine-core @0x801805A0 (src/shared) */ - -extern void func_8017DAAC(s32 arg0, s32 arg1); - void func_801805A8(void) { - func_8017DAAC(0x3, 0); - } - - -extern void func_8017DAAC(s32 arg0, s32 arg1); - void func_801805CC(void) { - func_8017DAAC(0x3, 0x2); - } - - -extern void func_8017DAAC(s32 arg0, s32 arg1); - void func_801805F0(void) { - func_8017DAAC(0x4, 0); - } - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180614); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180674); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180710); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180734); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8018078C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801807D8); - -DEFINE_func_801807E8() /* dedup: shared engine-core @0x801807E8 (src/shared) */ - - -DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180908); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180974); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801809F4); - -DEFINE_func_80180A30() /* dedup: shared engine-core @0x80180A30 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180A38); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180AD0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180AE8); - -DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */ - - -DEFINE_func_80180B14() /* dedup: shared engine-core @0x80180B14 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180B24); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180B34); - -extern void func_800D0C48(s32 arg); - void func_80180B44(void) { - func_800D0C48(0x1); - } - - - -extern void (*D_801BC7A4[])(void); - -void func_80180B64(void *a0) { - D_801BC7A4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801BC7B4[])(void); - -void func_80180BA0(void *a0) { - D_801BC7B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180BDC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180C98); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180D10); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180D48); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180D9C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180E24); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180E9C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180ED4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180F28); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180FB0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80180FFC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181054); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801810AC); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181100); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181188); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181228); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801812B0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8018165C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181784); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181894); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80181B00); - - -extern void (*D_801C3A5C[])(void); - -void func_80182000(void *a0) { - D_801C3A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_8018203C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801820F8); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80182240); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_801822B0); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_801734BC", func_80182324); - diff --git a/src/ov_SC01_006/ov_SC01_006_jr_80178D40.c b/src/ov_SC01_006/ov_SC01_006_jr_80178D40.c new file mode 100644 index 000000000..d80cbdd4d --- /dev/null +++ b/src/ov_SC01_006/ov_SC01_006_jr_80178D40.c @@ -0,0 +1,4609 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185598[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CCB38; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018558C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801855D0[]; +extern unsigned short D_801855D8[]; +extern unsigned short D_801855E0[]; +extern unsigned char D_801CCB40[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CCB38; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801855E8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CCC74; +extern M2C_UNK D_801CCC78; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CCC00; +extern void (*D_80185618[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CCC7C[]; +extern u8 D_801CCC84[]; +extern u8 D_801CCC34[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80185620[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018563C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185644[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801856AC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185650; +extern u8 D_8018565C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801856E0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801856E8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018573C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185770[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185760[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018578C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185804[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018580C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185814[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018581C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185824[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018582C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185838[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185844[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185850[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185860[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185870[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185878[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185880[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185888[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185890[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185898[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801858A0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801858A8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801858B0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801858B8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801858C0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801858C8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801858D0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801858D8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801858E0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801858E8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801858F0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801858F8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185900[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185908[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185910[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185918[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185920[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185964[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185928; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185994[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801859D0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185A28[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185A38[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185A40[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185BA8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185BB4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CBCC4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CDFB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CD3B8; +extern short D_801CE02C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CE02C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CE02C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CD3B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CE02C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CDF88 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CDF88 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CE02C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CE02C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CD814[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CD3BC; + extern s32 D_801CD7D0; + extern s16 D_801CD7D4; + extern s16 D_801CD7D8; + extern s16 D_801CD7DC; + extern s16 D_801CD7E0; + extern s32 D_801CD7E8; + extern s32 D_801CD7EC; + extern s32 D_801CD7FC; + extern s16 D_801CD800; + extern s16 D_801CD804; + extern s32 D_801CD808; + extern s32 D_801CD810; + extern s32 D_801CD814[10]; + extern s32 D_801CDED0; + extern s16 D_801CDF88; + extern s32 D_801CDFB4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CDF88; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CD7DC, D_801CD7E0 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 2; + break; + case 0: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CD7D4, D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CDED0 != 0) { + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CD7D4, D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + } else { + (*(s16*)&D_801CE02C) = 3; + } + break; + case 0x32: + func_80179B28(D_801CD7D0); + D_801CD7D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CD7D4, + D_801CD7D8 ? 0x48 : 0x40); + (*(s16*)&D_801CE02C) = 1; + break; + case 2: + func_80179B28(D_801CD7D0); + if (D_801CD7E8 != 0) { + D_801CD3B8 = D_801CD7E8; + D_801CD7E8 = 0; + (*(s16*)&D_801CE02C) = 3; + return; + } + (*(s16*)&D_801CE02C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE02C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE02C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1B: + D_801CD808 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CE02C) = 4; + D_801CD3BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CE02C) = 5; + D_801CD7FC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CD7FC = (s32)func_8017A3B0; + (*(s16*)&D_801CE02C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x24: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CE02C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE02C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE02C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE02C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CE02C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CD7EC); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4E: + D_801CD810 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x2B: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CE02C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CDFB4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x34: + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CD7E8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CE02C) = 3; + D_801CD3B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CD3B8 = *(s32 *)(D_801CD3B8 + 4); + return; + case 0x37: + (*(s16*)&D_801CE02C) = 3; + D_801CD7D4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CD7D8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CE02C) = 3; + D_801CD7DC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CD7E0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CE02C) = 3; + D_801CD7D4 = w1; + D_801CD7D8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CE02C) = 3; + D_801CD7DC = w2; + D_801CD7E0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x43: + D_801CD7FC = (s32)func_8017A3D8; + D_801CD804 = 0; + (*(s16*)&D_801CE02C) = 5; + D_801CD800 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE02C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE02C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CD814; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CE02C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CD814; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CE02C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CD814[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CE02C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CD814; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CE02C) = 3; + break; + default: + break; + } +Lend: + D_801CD3B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CD7E4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CD7E4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CD7E4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CD7E4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CD80C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CD80C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CD7C8; + +s32 func_8017A3B0(void) { + switch (D_801CD7C8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CD804; +extern short D_801CD800; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CD804) { + case 0: + func_800D0CA0(1); + D_801CD804 = D_801CD804 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CD800; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CD804 = D_801CD804 + 1; + if (D_801CD804 < 0x1E) { + return 0; + } + D_801CD804 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CD844; + extern s16 D_801CD846; + extern s16 D_801CD848; + extern s16 D_801CD83C; + extern s16 D_801CD83E; + extern s16 D_801CD840; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CD844, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CD846, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CD848, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CD83C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CD83E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CD840, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CD7CC; +extern u16 D_801CD84C; +extern u16 D_801CD84E; +extern u16 D_801CD850; +extern s16 D_801CDFB8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CDFB8 = 0; + D_801CD7CC = 0; + D_801CD84C = D_80126B5E; + D_801CD84E = D_80126B62; + D_801CD850 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CF0[]; + extern s16 D_801CD844; + extern s16 D_801CD83C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CD844; + s16 *p78C = &D_801CD83C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CDFB8 = 1; + D_801CD7CC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CD7EC; + extern SV4_8017B368 D_801CD7F4; + extern s16 D_801CD844; + extern s16 D_801CD83C; + extern u16 D_80185CF0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CD7EC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CD7F4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CF0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CD844) = loc0; + (*(SV4_8017B368 *)&D_801CD83C) = loc1; + D_801CDFB8 = 1; + D_801CD7CC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CF0[]; + extern s16 D_801CD844; + extern s16 D_801CD846; + extern s16 D_801CD848; + extern s16 D_801CD83C; + extern s16 D_801CD83E; + extern s16 D_801CD840; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CF0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CF0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CD844; + s16 *p78C = &D_801CD83C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CD846; + v798 = D_801CD848; + v78C = *p78C; + v78E = D_801CD83E; + v790 = D_801CD840; + __asm__ __volatile__(""); + D_801CDFB8 = 1; + D_801CD7CC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CD7CC; +extern s16 D_801CD844; +extern s16 D_801CD846; +extern s16 D_801CD848; +extern s16 D_801CD83C; +extern s16 D_801CD83E; +extern s16 D_801CD840; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CD7CC = 0; + D_801CD844 = (s16) D_80114F30; + D_801CD846 = (s16) D_80114F34; + D_801CD848 = (s16) D_80114F38; + D_801CD83C = (s16) D_80114F24; + D_801CD83E = (s16) D_80114F28; + D_801CD840 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CD85C; +extern s16 D_801CD85E; +extern s16 D_801CD860; +extern s16 D_801CD864; +extern s16 D_801CD866; +extern s16 D_801CD868; + +void func_8017B824(void) { + D_801CD85C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CD85E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CD860 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CD864 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CD866 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CD868 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CD85C; +extern s16 D_801CD85E; +extern s16 D_801CD860; +extern s16 D_801CD864; +extern s16 D_801CD866; +extern s16 D_801CD868; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CD85C; + D_80114F34 = D_801CD85E; + D_80114F38 = D_801CD860; + D_80114F24 = D_801CD864; + D_80114F28 = D_801CD866; + D_80114F2C = D_801CD868; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CD844), src[8..15] -> (*(S8_8017B8E8 *)&D_801CD83C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CD844) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CD83C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CD84C; +extern u16 D_801CD84E; +extern u16 D_801CD850; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CD7CC; +extern short D_801CD854; +extern short D_801CD856; +extern short D_801CD858; +extern s16 D_801CD844; +extern s16 D_801CD846; +extern s16 D_801CD848; +extern s16 D_801CD83C; +extern s16 D_801CD83E; +extern s16 D_801CD840; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CD84C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CD84E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CD850); + (*(s16 *)&D_801CD854) = buf[0]; + (*(s16 *)&D_801CD856) = buf[1]; + (*(s16 *)&D_801CD858) = buf[2]; + D_801CD844 = D_80114F30 + buf[0]; + D_801CD7CC = 0; + D_801CD846 = D_80114F34 + buf[1]; + D_801CD848 = D_80114F38 + buf[2]; + D_801CD83C = D_80114F24 + buf[0]; + D_801CD83E = D_80114F28 + buf[1]; + D_801CD840 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CD7EC; +extern SV4 D_801CD7F4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CD7F4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CD7EC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CD7F4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CD7F4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CD7EC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CD7F4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CD814[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CD814; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CD7CC; +extern s16 D_801CDFB8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CD7CC = D_801CD7CC + 1; + if (D_801CD7CC >= 0x1F) { + D_801CDFB8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CD7CC; +extern s16 D_801CDFB8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CD7CC = D_801CD7CC + 1; + if (0x18 < D_801CD7CC) { + func_8012A4BC(); + D_801CDFB8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CD7CC; +extern void (*D_801CD810)(void); +extern short D_801CD854; +extern short D_801CD856; +extern short D_801CD858; +extern s16 D_801CDFB8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CD7CC = D_801CD7CC + 1; + if (D_801CD7CC >= 0x19) { + if (D_801CD810 != 0) { + (*D_801CD810)(); + } else { + D_80114F30 = D_80114F30 + D_801CD854; + D_80114F34 = D_80114F34 + D_801CD856; + D_80114F38 = D_80114F38 + D_801CD858; + D_80114F24 = D_80114F24 + D_801CD854; + D_80114F28 = D_80114F28 + D_801CD856; + D_80114F2C = D_80114F2C + D_801CD858; + func_8012A4BC(); + } + D_801CDFB8 = 0; + } +} + + + +extern void (*D_80185D90[])(void); + +void func_8017BE60(void *a0) { + D_80185D90[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_80174684(void *); + extern s32 func_8017BEC4(s32); + void func_8017BE9C(void) { + func_80174684((void *)func_8017BEC4); + } + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017BEC4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017BF00); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017BF70); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017BFEC); + +DEFINE_func_8017C048() /* dedup: shared engine-core @0x8017C048 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C078; + void func_8017C050(void) { + func_80174684(&func_8017C078); + } + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C078); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C0B4); + +DEFINE_func_8017C120() /* dedup: shared engine-core @0x8017C120 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C150; + void func_8017C128(void) { + func_80174684(&func_8017C150); + } + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C18C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C1E8); + +DEFINE_func_8017C238() /* dedup: shared engine-core @0x8017C238 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017C268(s32); + void func_8017C240(void) { + func_80174684((void *)func_8017C268); + } + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C268); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C2A4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C2F4); + +DEFINE_func_8017C338() /* dedup: shared engine-core @0x8017C338 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017C340); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D220); + + +extern void (*D_80185EAC[])(void); + +void func_8017D26C(void *a0) { + D_80185EAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D2A8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D2EC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80185EB4[])(void); + +void func_8017D310(void *a0) { + D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D34C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D38C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D408(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185EC0[])(void); + +void func_8017D428(void *a0) { + D_80185EC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_8017D464() /* dedup: shared engine-core @0x8017D464 (src/shared) */ + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D480(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D4FC(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185ECC[])(void); + +void func_8017D51C(void *a0) { + D_80185ECC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D558); + +DEFINE_func_8017D5CC() /* dedup: shared engine-core @0x8017D5CC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D5D4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D5FC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D624); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D6E4); + + +extern void (*D_80185EF8[])(void); + +void func_8017D7A4(void *a0) { + D_80185EF8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D808); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D9A0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017D9F4); + +DEFINE_func_8017DA84() /* dedup: shared engine-core @0x8017DA84 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DAAC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DB50); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DBC0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DC48); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017DEFC); + +DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E108); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E258); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E384); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E3DC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E6BC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017E978); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017EB44); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017ED5C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017F2D4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017F730); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017F790); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017F9F8); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017FBCC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017FD50); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8017FF74); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180010); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801800C0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801803AC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801803F0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8018041C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8018048C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180564); + +DEFINE_func_801805A0() /* dedup: shared engine-core @0x801805A0 (src/shared) */ + +extern void func_8017DAAC(s32 arg0, s32 arg1); + void func_801805A8(void) { + func_8017DAAC(0x3, 0); + } + + +extern void func_8017DAAC(s32 arg0, s32 arg1); + void func_801805CC(void) { + func_8017DAAC(0x3, 0x2); + } + + +extern void func_8017DAAC(s32 arg0, s32 arg1); + void func_801805F0(void) { + func_8017DAAC(0x4, 0); + } + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180614); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180674); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180710); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180734); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8018078C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801807D8); + +DEFINE_func_801807E8() /* dedup: shared engine-core @0x801807E8 (src/shared) */ + + +DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180908); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180974); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801809F4); + +DEFINE_func_80180A30() /* dedup: shared engine-core @0x80180A30 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180A38); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180AD0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180AE8); + +DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */ + + +DEFINE_func_80180B14() /* dedup: shared engine-core @0x80180B14 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180B24); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180B34); + +extern void func_800D0C48(s32 arg); + void func_80180B44(void) { + func_800D0C48(0x1); + } + + + +extern void (*D_801BC7A4[])(void); + +void func_80180B64(void *a0) { + D_801BC7A4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801BC7B4[])(void); + +void func_80180BA0(void *a0) { + D_801BC7B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180BDC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180C98); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180D10); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180D48); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180D9C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180E24); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180E9C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180ED4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180F28); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180FB0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80180FFC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181054); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801810AC); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181100); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181188); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181228); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801812B0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8018165C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181784); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181894); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80181B00); + + +extern void (*D_801C3A5C[])(void); + +void func_80182000(void *a0) { + D_801C3A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_8018203C); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801820F8); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80182240); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_801822B0); + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_80178D40", func_80182324); + + diff --git a/src/ov_SC01_008/ov_SC01_008_jr_801734BC.c b/src/ov_SC01_008/ov_SC01_008_jr_801734BC.c index 0d3645758..07cd4c6c0 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_801734BC.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_801734BC.c @@ -3104,921 +3104,3 @@ void func_80178D18(void) { D_801A35DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A3294; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A3294 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A3294; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A3294 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A32BC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A32BC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A3278; - -s32 func_8017A3B0(void) { - switch (D_801A3278) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A32B4; -extern short D_801A32B0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A32B4) { - case 0: - func_800D0CA0(1); - D_801A32B4 = D_801A32B4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A32B0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A32B4 = D_801A32B4 + 1; - if (D_801A32B4 < 0x1E) { - return 0; - } - D_801A32B4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A32F4; - extern s16 D_801A32F6; - extern s16 D_801A32F8; - extern s16 D_801A32EC; - extern s16 D_801A32EE; - extern s16 D_801A32F0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A32F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A32F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A32F8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A32EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A32EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A32F0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A327C; -extern u16 D_801A32FC; -extern u16 D_801A32FE; -extern u16 D_801A3300; -extern s16 D_801A3568; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A3568 = 0; - D_801A327C = 0; - D_801A32FC = D_80126B5E; - D_801A32FE = D_80126B62; - D_801A3300 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801830D0[]; - extern s16 D_801A32F4; - extern s16 D_801A32EC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801830D0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801830D0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A32F4; - s16 *p78C = &D_801A32EC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A3568 = 1; - D_801A327C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A329C; - extern SV4_8017B368 D_801A32A4; - extern s16 D_801A32F4; - extern s16 D_801A32EC; - extern u16 D_801830D0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A329C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A32A4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801830D0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801830D0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A32F4) = loc0; - (*(SV4_8017B368 *)&D_801A32EC) = loc1; - D_801A3568 = 1; - D_801A327C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801830D0[]; - extern s16 D_801A32F4; - extern s16 D_801A32F6; - extern s16 D_801A32F8; - extern s16 D_801A32EC; - extern s16 D_801A32EE; - extern s16 D_801A32F0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801830D0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801830D0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A32F4; - s16 *p78C = &D_801A32EC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A32F6; - v798 = D_801A32F8; - v78C = *p78C; - v78E = D_801A32EE; - v790 = D_801A32F0; - __asm__ __volatile__(""); - D_801A3568 = 1; - D_801A327C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A327C; -extern s16 D_801A32F4; -extern s16 D_801A32F6; -extern s16 D_801A32F8; -extern s16 D_801A32EC; -extern s16 D_801A32EE; -extern s16 D_801A32F0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A327C = 0; - D_801A32F4 = (s16) D_80114F30; - D_801A32F6 = (s16) D_80114F34; - D_801A32F8 = (s16) D_80114F38; - D_801A32EC = (s16) D_80114F24; - D_801A32EE = (s16) D_80114F28; - D_801A32F0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A330C; -extern s16 D_801A330E; -extern s16 D_801A3310; -extern s16 D_801A3314; -extern s16 D_801A3316; -extern s16 D_801A3318; - -void func_8017B824(void) { - D_801A330C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A330E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A3310 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A3314 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A3316 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A3318 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A330C; -extern s16 D_801A330E; -extern s16 D_801A3310; -extern s16 D_801A3314; -extern s16 D_801A3316; -extern s16 D_801A3318; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A330C; - D_80114F34 = D_801A330E; - D_80114F38 = D_801A3310; - D_80114F24 = D_801A3314; - D_80114F28 = D_801A3316; - D_80114F2C = D_801A3318; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A32F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A32EC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A32F4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A32EC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A32FC; -extern u16 D_801A32FE; -extern u16 D_801A3300; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A327C; -extern short D_801A3304; -extern short D_801A3306; -extern short D_801A3308; -extern s16 D_801A32F4; -extern s16 D_801A32F6; -extern s16 D_801A32F8; -extern s16 D_801A32EC; -extern s16 D_801A32EE; -extern s16 D_801A32F0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A32FC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A32FE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A3300); - (*(s16 *)&D_801A3304) = buf[0]; - (*(s16 *)&D_801A3306) = buf[1]; - (*(s16 *)&D_801A3308) = buf[2]; - D_801A32F4 = D_80114F30 + buf[0]; - D_801A327C = 0; - D_801A32F6 = D_80114F34 + buf[1]; - D_801A32F8 = D_80114F38 + buf[2]; - D_801A32EC = D_80114F24 + buf[0]; - D_801A32EE = D_80114F28 + buf[1]; - D_801A32F0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A329C; -extern SV4 D_801A32A4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A32A4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A329C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A32A4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A32A4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A329C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A32A4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A32C4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A32C4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A327C; -extern s16 D_801A3568; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A327C = D_801A327C + 1; - if (D_801A327C >= 0x1F) { - D_801A3568 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A327C; -extern s16 D_801A3568; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A327C = D_801A327C + 1; - if (0x18 < D_801A327C) { - func_8012A4BC(); - D_801A3568 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A327C; -extern void (*D_801A32C0)(void); -extern short D_801A3304; -extern short D_801A3306; -extern short D_801A3308; -extern s16 D_801A3568; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A327C = D_801A327C + 1; - if (D_801A327C >= 0x19) { - if (D_801A32C0 != 0) { - (*D_801A32C0)(); - } else { - D_80114F30 = D_80114F30 + D_801A3304; - D_80114F34 = D_80114F34 + D_801A3306; - D_80114F38 = D_80114F38 + D_801A3308; - D_80114F24 = D_80114F24 + D_801A3304; - D_80114F28 = D_80114F28 + D_801A3306; - D_80114F2C = D_80114F2C + D_801A3308; - func_8012A4BC(); - } - D_801A3568 = 0; - } -} - - - -extern void (*D_80183170[])(void); - -void func_8017BE60(void *a0) { - D_80183170[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017BE9C); - - -extern void (*D_801831CC[])(void); - -void func_8017CD7C(void *a0) { - D_801831CC[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_801831D4[])(void); - -void func_8017CDB8(void *a0) { - D_801831D4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017CE38); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE7C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017CEA0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEE0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF5C(void) { - func_800D1EBC(); - } - - - -extern void (*D_801831E8[])(void); - -void func_8017CF7C(void *a0) { - D_801831E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017CFB8); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D02C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D054); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D07C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D0A4); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D168); - - -extern void (*D_80183220[])(void); - -void func_8017D22C(void *a0) { - D_80183220[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_8017D290(s32 arg0, s32 arg1); -extern s32 D_801274E8; - -void func_8017D268(void *arg0) { - func_8017D290((s32)arg0, (s32)&D_801274E8); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D290); - -extern s32 func_8017D428(void); - -s32 func_8017D428(void) { - return 0x3D; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D430); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D440); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D494); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D4E4); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D554); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D5DC); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017DA80); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017DBEC); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017DD18); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017DD70); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017E050); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017E30C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017E4D8); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017E6F0); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017E93C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017EC68); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F0C4); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F124); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F190); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F1FC); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F250); - -void func_8017F28C(void) { -} - -extern void func_8017D440(s32 arg0, s32 arg1); - void func_8017F294(void) { - func_8017D440(2, 0); - } - - -extern void func_8017D440(s32 arg0, s32 arg1); - void func_8017F2B8(void) { - func_8017D440(0x2, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F2DC); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F358); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F380); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F404); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F470); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F560); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F5D4); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F61C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F66C); - -void func_8017F6A8(void) { -} - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F6B0); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_801734BC", func_8017F6C8); - diff --git a/src/ov_SC01_008/ov_SC01_008_jr_80178D40.c b/src/ov_SC01_008/ov_SC01_008_jr_80178D40.c new file mode 100644 index 000000000..afa2a450a --- /dev/null +++ b/src/ov_SC01_008/ov_SC01_008_jr_80178D40.c @@ -0,0 +1,4388 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182978[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A25E8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018296C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801829B0[]; +extern unsigned short D_801829B8[]; +extern unsigned short D_801829C0[]; +extern unsigned char D_801A25F0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A25E8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801829C8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A2724; +extern M2C_UNK D_801A2728; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A26B0; +extern void (*D_801829F8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A272C[]; +extern u8 D_801A2734[]; +extern u8 D_801A26E4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182A00[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182A1C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182A24[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182A8C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182A30; +extern u8 D_80182A3C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182AC0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182AC8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182B1C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182B50[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182B40[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182B6C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182BE4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182BEC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182BF4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182BFC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182C04[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182C0C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182C18[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182C24[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182C30[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182C40[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182C50[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182C58[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182C60[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182C68[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182C70[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182C78[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182C80[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182C88[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182C90[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182C98[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182CA0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182CA8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182CB0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182CB8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182CC0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182CC8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182CD0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182CD8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182CE0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182CE8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182CF0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182CF8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182D00[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182D44[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182D08; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80182D74[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182DB0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182E08[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182E18[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182E20[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182F88[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182F94[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A1774; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A3568; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A2E68; +extern short D_801A35DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A35DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A35DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A2E68 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A35DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A3538 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A3538 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A35DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A35DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A32C4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A2E6C; + extern s32 D_801A3280; + extern s16 D_801A3284; + extern s16 D_801A3288; + extern s16 D_801A328C; + extern s16 D_801A3290; + extern s32 D_801A3298; + extern s32 D_801A329C; + extern s32 D_801A32AC; + extern s16 D_801A32B0; + extern s16 D_801A32B4; + extern s32 D_801A32B8; + extern s32 D_801A32C0; + extern s32 D_801A32C4[10]; + extern s32 D_801A3480; + extern s16 D_801A3538; + extern s32 D_801A3564; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A3538; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A3280); + D_801A3280 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A328C, D_801A3290 ? 0x48 : 0x40); + (*(s16*)&D_801A35DC) = 2; + break; + case 0: + func_80179B28(D_801A3280); + D_801A3280 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A3284, D_801A3288 ? 0x48 : 0x40); + (*(s16*)&D_801A35DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A3480 != 0) { + func_80179B28(D_801A3280); + D_801A3280 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A3284, D_801A3288 ? 0x48 : 0x40); + (*(s16*)&D_801A35DC) = 1; + } else { + (*(s16*)&D_801A35DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801A3280); + D_801A3280 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A3284, + D_801A3288 ? 0x48 : 0x40); + (*(s16*)&D_801A35DC) = 1; + break; + case 2: + func_80179B28(D_801A3280); + if (D_801A3298 != 0) { + D_801A2E68 = D_801A3298; + D_801A3298 = 0; + (*(s16*)&D_801A35DC) = 3; + return; + } + (*(s16*)&D_801A35DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A35DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A35DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A35DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A35DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A35DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x1B: + D_801A32B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A35DC) = 4; + D_801A2E6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A35DC) = 5; + D_801A32AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A32AC = (s32)func_8017A3B0; + (*(s16*)&D_801A35DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x24: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A35DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A35DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A35DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A35DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A35DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A35DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A35DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A35DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A35DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A329C); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A329C); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A329C); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A329C); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x4E: + D_801A32C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A35DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A3564 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x34: + (*(s16*)&D_801A35DC) = 3; + D_801A2E68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A3298 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A35DC) = 3; + D_801A2E68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A35DC) = 3; + D_801A2E68 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A2E68 = *(s32 *)(D_801A2E68 + 4); + return; + case 0x37: + (*(s16*)&D_801A35DC) = 3; + D_801A3284 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A3288 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A35DC) = 3; + D_801A328C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A3290 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A35DC) = 3; + D_801A3284 = w1; + D_801A3288 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A35DC) = 3; + D_801A328C = w2; + D_801A3290 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x43: + D_801A32AC = (s32)func_8017A3D8; + D_801A32B4 = 0; + (*(s16*)&D_801A35DC) = 5; + D_801A32B0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A35DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A35DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A32C4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A35DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A32C4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A35DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A32C4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A35DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A32C4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A35DC) = 3; + break; + default: + break; + } +Lend: + D_801A2E68 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A3294; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A3294 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A3294; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A3294 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A32BC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A32BC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A3278; + +s32 func_8017A3B0(void) { + switch (D_801A3278) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A32B4; +extern short D_801A32B0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A32B4) { + case 0: + func_800D0CA0(1); + D_801A32B4 = D_801A32B4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A32B0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A32B4 = D_801A32B4 + 1; + if (D_801A32B4 < 0x1E) { + return 0; + } + D_801A32B4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A32F4; + extern s16 D_801A32F6; + extern s16 D_801A32F8; + extern s16 D_801A32EC; + extern s16 D_801A32EE; + extern s16 D_801A32F0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A32F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A32F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A32F8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A32EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A32EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A32F0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A327C; +extern u16 D_801A32FC; +extern u16 D_801A32FE; +extern u16 D_801A3300; +extern s16 D_801A3568; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A3568 = 0; + D_801A327C = 0; + D_801A32FC = D_80126B5E; + D_801A32FE = D_80126B62; + D_801A3300 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801830D0[]; + extern s16 D_801A32F4; + extern s16 D_801A32EC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801830D0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801830D0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A32F4; + s16 *p78C = &D_801A32EC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A3568 = 1; + D_801A327C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A329C; + extern SV4_8017B368 D_801A32A4; + extern s16 D_801A32F4; + extern s16 D_801A32EC; + extern u16 D_801830D0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A329C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A32A4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801830D0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801830D0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A32F4) = loc0; + (*(SV4_8017B368 *)&D_801A32EC) = loc1; + D_801A3568 = 1; + D_801A327C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801830D0[]; + extern s16 D_801A32F4; + extern s16 D_801A32F6; + extern s16 D_801A32F8; + extern s16 D_801A32EC; + extern s16 D_801A32EE; + extern s16 D_801A32F0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801830D0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801830D0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A32F4; + s16 *p78C = &D_801A32EC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A32F6; + v798 = D_801A32F8; + v78C = *p78C; + v78E = D_801A32EE; + v790 = D_801A32F0; + __asm__ __volatile__(""); + D_801A3568 = 1; + D_801A327C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A327C; +extern s16 D_801A32F4; +extern s16 D_801A32F6; +extern s16 D_801A32F8; +extern s16 D_801A32EC; +extern s16 D_801A32EE; +extern s16 D_801A32F0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A327C = 0; + D_801A32F4 = (s16) D_80114F30; + D_801A32F6 = (s16) D_80114F34; + D_801A32F8 = (s16) D_80114F38; + D_801A32EC = (s16) D_80114F24; + D_801A32EE = (s16) D_80114F28; + D_801A32F0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A330C; +extern s16 D_801A330E; +extern s16 D_801A3310; +extern s16 D_801A3314; +extern s16 D_801A3316; +extern s16 D_801A3318; + +void func_8017B824(void) { + D_801A330C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A330E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A3310 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A3314 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A3316 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A3318 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A330C; +extern s16 D_801A330E; +extern s16 D_801A3310; +extern s16 D_801A3314; +extern s16 D_801A3316; +extern s16 D_801A3318; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A330C; + D_80114F34 = D_801A330E; + D_80114F38 = D_801A3310; + D_80114F24 = D_801A3314; + D_80114F28 = D_801A3316; + D_80114F2C = D_801A3318; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A32F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A32EC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A32F4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A32EC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A32FC; +extern u16 D_801A32FE; +extern u16 D_801A3300; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A327C; +extern short D_801A3304; +extern short D_801A3306; +extern short D_801A3308; +extern s16 D_801A32F4; +extern s16 D_801A32F6; +extern s16 D_801A32F8; +extern s16 D_801A32EC; +extern s16 D_801A32EE; +extern s16 D_801A32F0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A32FC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A32FE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A3300); + (*(s16 *)&D_801A3304) = buf[0]; + (*(s16 *)&D_801A3306) = buf[1]; + (*(s16 *)&D_801A3308) = buf[2]; + D_801A32F4 = D_80114F30 + buf[0]; + D_801A327C = 0; + D_801A32F6 = D_80114F34 + buf[1]; + D_801A32F8 = D_80114F38 + buf[2]; + D_801A32EC = D_80114F24 + buf[0]; + D_801A32EE = D_80114F28 + buf[1]; + D_801A32F0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A329C; +extern SV4 D_801A32A4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A32A4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A329C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A32A4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A32A4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A329C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A32A4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A32C4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A32C4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A327C; +extern s16 D_801A3568; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A327C = D_801A327C + 1; + if (D_801A327C >= 0x1F) { + D_801A3568 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A327C; +extern s16 D_801A3568; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A327C = D_801A327C + 1; + if (0x18 < D_801A327C) { + func_8012A4BC(); + D_801A3568 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A327C; +extern void (*D_801A32C0)(void); +extern short D_801A3304; +extern short D_801A3306; +extern short D_801A3308; +extern s16 D_801A3568; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A327C = D_801A327C + 1; + if (D_801A327C >= 0x19) { + if (D_801A32C0 != 0) { + (*D_801A32C0)(); + } else { + D_80114F30 = D_80114F30 + D_801A3304; + D_80114F34 = D_80114F34 + D_801A3306; + D_80114F38 = D_80114F38 + D_801A3308; + D_80114F24 = D_80114F24 + D_801A3304; + D_80114F28 = D_80114F28 + D_801A3306; + D_80114F2C = D_80114F2C + D_801A3308; + func_8012A4BC(); + } + D_801A3568 = 0; + } +} + + + +extern void (*D_80183170[])(void); + +void func_8017BE60(void *a0) { + D_80183170[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017BE9C); + + +extern void (*D_801831CC[])(void); + +void func_8017CD7C(void *a0) { + D_801831CC[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_801831D4[])(void); + +void func_8017CDB8(void *a0) { + D_801831D4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017CE38); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE7C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017CEA0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEE0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF5C(void) { + func_800D1EBC(); + } + + + +extern void (*D_801831E8[])(void); + +void func_8017CF7C(void *a0) { + D_801831E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017CFB8); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D02C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D054); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D07C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D0A4); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D168); + + +extern void (*D_80183220[])(void); + +void func_8017D22C(void *a0) { + D_80183220[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_8017D290(s32 arg0, s32 arg1); +extern s32 D_801274E8; + +void func_8017D268(void *arg0) { + func_8017D290((s32)arg0, (s32)&D_801274E8); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D290); + +extern s32 func_8017D428(void); + +s32 func_8017D428(void) { + return 0x3D; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D430); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D440); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D494); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D4E4); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D554); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D5DC); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017DA80); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017DBEC); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017DD18); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017DD70); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017E050); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017E30C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017E4D8); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017E6F0); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017E93C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017EC68); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F0C4); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F124); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F190); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F1FC); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F250); + +void func_8017F28C(void) { +} + +extern void func_8017D440(s32 arg0, s32 arg1); + void func_8017F294(void) { + func_8017D440(2, 0); + } + + +extern void func_8017D440(s32 arg0, s32 arg1); + void func_8017F2B8(void) { + func_8017D440(0x2, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F2DC); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F358); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F380); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F404); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F470); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F560); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F5D4); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F61C); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F66C); + +void func_8017F6A8(void) { +} + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F6B0); + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_80178D40", func_8017F6C8); + + diff --git a/src/ov_SC01_009/ov_SC01_009_jr_801734BC.c b/src/ov_SC01_009/ov_SC01_009_jr_801734BC.c index dee607f55..943cba59c 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_801734BC.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_801734BC.c @@ -3104,1132 +3104,3 @@ void func_80178D18(void) { D_801F345C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F30F4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801F30F4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F30F4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801F30F4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801F311C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801F311C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801F30D8; - -s32 func_8017A3B0(void) { - switch (D_801F30D8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801F3154; - extern s16 D_801F3156; - extern s16 D_801F3158; - extern s16 D_801F314C; - extern s16 D_801F314E; - extern s16 D_801F3150; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F3154, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F3156, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F3158, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F314C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F314E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F3150, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801F30DC; -extern u16 D_801F315C; -extern u16 D_801F315E; -extern u16 D_801F3160; -extern s16 D_801F33E8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801F33E8 = 0; - D_801F30DC = 0; - D_801F315C = D_80126B5E; - D_801F315E = D_80126B62; - D_801F3160 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801862B8[]; - extern s16 D_801F3154; - extern s16 D_801F314C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801862B8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801862B8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F3154; - s16 *p78C = &D_801F314C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801F33E8 = 1; - D_801F30DC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801F30FC; - extern SV4_8017B368 D_801F3104; - extern s16 D_801F3154; - extern s16 D_801F314C; - extern u16 D_801862B8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801F30FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801F3104; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801862B8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801862B8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801F3154) = loc0; - (*(SV4_8017B368 *)&D_801F314C) = loc1; - D_801F33E8 = 1; - D_801F30DC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801862B8[]; - extern s16 D_801F3154; - extern s16 D_801F3156; - extern s16 D_801F3158; - extern s16 D_801F314C; - extern s16 D_801F314E; - extern s16 D_801F3150; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801862B8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801862B8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F3154; - s16 *p78C = &D_801F314C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801F3156; - v798 = D_801F3158; - v78C = *p78C; - v78E = D_801F314E; - v790 = D_801F3150; - __asm__ __volatile__(""); - D_801F33E8 = 1; - D_801F30DC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F30DC; -extern s16 D_801F3154; -extern s16 D_801F3156; -extern s16 D_801F3158; -extern s16 D_801F314C; -extern s16 D_801F314E; -extern s16 D_801F3150; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801F30DC = 0; - D_801F3154 = (s16) D_80114F30; - D_801F3156 = (s16) D_80114F34; - D_801F3158 = (s16) D_80114F38; - D_801F314C = (s16) D_80114F24; - D_801F314E = (s16) D_80114F28; - D_801F3150 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801F316C; -extern s16 D_801F316E; -extern s16 D_801F3170; -extern s16 D_801F3174; -extern s16 D_801F3176; -extern s16 D_801F3178; - -void func_8017B824(void) { - D_801F316C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801F316E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801F3170 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801F3174 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801F3176 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801F3178 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801F316C; -extern s16 D_801F316E; -extern s16 D_801F3170; -extern s16 D_801F3174; -extern s16 D_801F3176; -extern s16 D_801F3178; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801F316C; - D_80114F34 = D_801F316E; - D_80114F38 = D_801F3170; - D_80114F24 = D_801F3174; - D_80114F28 = D_801F3176; - D_80114F2C = D_801F3178; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801F3154), src[8..15] -> (*(S8_8017B8E8 *)&D_801F314C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801F3154) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801F314C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801F315C; -extern u16 D_801F315E; -extern u16 D_801F3160; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F30DC; -extern short D_801F3164; -extern short D_801F3166; -extern short D_801F3168; -extern s16 D_801F3154; -extern s16 D_801F3156; -extern s16 D_801F3158; -extern s16 D_801F314C; -extern s16 D_801F314E; -extern s16 D_801F3150; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F315C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F315E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F3160); - (*(s16 *)&D_801F3164) = buf[0]; - (*(s16 *)&D_801F3166) = buf[1]; - (*(s16 *)&D_801F3168) = buf[2]; - D_801F3154 = D_80114F30 + buf[0]; - D_801F30DC = 0; - D_801F3156 = D_80114F34 + buf[1]; - D_801F3158 = D_80114F38 + buf[2]; - D_801F314C = D_80114F24 + buf[0]; - D_801F314E = D_80114F28 + buf[1]; - D_801F3150 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801F30FC; -extern SV4 D_801F3104; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F3104) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801F30FC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801F3104 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F3104)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801F30FC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801F3104) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801F3124[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801F3124; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801F30DC; -extern s16 D_801F33E8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801F30DC = D_801F30DC + 1; - if (D_801F30DC >= 0x1F) { - D_801F33E8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801F30DC; -extern s16 D_801F33E8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F30DC = D_801F30DC + 1; - if (0x18 < D_801F30DC) { - func_8012A4BC(); - D_801F33E8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801F30DC; -extern void (*D_801F3120)(void); -extern short D_801F3164; -extern short D_801F3166; -extern short D_801F3168; -extern s16 D_801F33E8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F30DC = D_801F30DC + 1; - if (D_801F30DC >= 0x19) { - if (D_801F3120 != 0) { - (*D_801F3120)(); - } else { - D_80114F30 = D_80114F30 + D_801F3164; - D_80114F34 = D_80114F34 + D_801F3166; - D_80114F38 = D_80114F38 + D_801F3168; - D_80114F24 = D_80114F24 + D_801F3164; - D_80114F28 = D_80114F28 + D_801F3166; - D_80114F2C = D_80114F2C + D_801F3168; - func_8012A4BC(); - } - D_801F33E8 = 0; - } -} - - - -extern void (*D_80186358[])(void); - -void func_8017BE60(void *a0) { - D_80186358[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017BE9C); - - -extern void (*D_801863B4[])(void); - -void func_8017CD7C(void *a0) { - D_801863B4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CDB8); - -DEFINE_func_8017CDFC() /* dedup: shared engine-core @0x8017CDFC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CE20); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CE60(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CEDC(void) { - func_800D1EBC(); - } - - - -extern void (*D_801863C8[])(void); - -void func_8017CEFC(void *a0) { - D_801863C8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CF38); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CFAC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CFD4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017CFFC); - - -extern void (*D_801863F4[])(void); - -void func_8017D0BC(void *a0) { - D_801863F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_8017D120(s32 arg0, s32 arg1); -extern s32 D_801274E8; - -void func_8017D0F8(s32 arg0) { - func_8017D120(arg0, &D_801274E8); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D120); - -s32 func_8017D2B8(s32 arg0) { - if (arg0 == 0x2DA) { - return 0x9F; - } else { - return 0x3D; - } - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D2E0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D334); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D384); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D3F4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D47C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D730); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D920); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017D93C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017DA8C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017DBB8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017DC10); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017DEF0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017E1AC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017E378); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017E590); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017E7DC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017EB08); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017EF64); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017EFC4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F2A0); - - -extern void (*D_801E9A18[])(void); - -void func_8017F360(void *a0) { - D_801E9A18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F39C); - -extern void func_8017D2E0(s32 arg0, s32 arg1); - void func_8017F440(void) { - func_8017D2E0(0x1, 0); - } - - -extern void func_8017D2E0(s32 arg0, s32 arg1); - void func_8017F464(void) { - func_8017D2E0(0x1, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F488); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F4D0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F520); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F568); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F5B0); - -extern s32 func_8017F5F8(void *a0); - s32 func_8017F5F8(void *a0) { - return *(s16 *)((char *)a0 + 0x104) == 0x4; - } - - -s32 func_8017F60C(s32 *a0) { - return *(s16*)((s32)a0 + 0x104); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F618); - -extern void func_800291A0(s32 arg0, s32 arg1); - void func_8017F658(void) { - func_800291A0(0x3B, 0x7); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F67C); - -void func_8017F6B4(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F6C0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F710); - - -extern s32 func_8017F758(void *a0); - s32 func_8017F758(void *a0) { - return *(s16 *)((char *)a0 + 0x104) == 0x2; - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F76C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F790); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F7B4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F7D8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F7F0); - -void func_8017F8B4(void *a0) { - *(short *)((char *)a0 + 0xFA) = 0x1D00; - } - - -void func_8017F8C0(s32 *a0) { - *(s16 *)((s32)a0 + 0xFA) = 0x1A40; - } - - -void func_8017F8CC(void *a0) { - *(short *)((char *)a0 + 0xFA) = 0x2000; - } - - -void func_8017F8D8(s32 *a0) { - *(s16 *)((s32)a0 + 0xFA) = 0xA40; - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F8E4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017F900); - -extern void func_8001AAA0(s32 arg0); -extern s32 func_8001B710(void); - -void func_8017F9CC(void) { - func_8001AAA0(0x3D); - func_8001B710(); -} - - -extern void func_800D0C48(s32 arg); - void func_8017F9F4(void) { - func_800D0C48(0x1); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FA14); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FAFC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FB98); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FC44); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FCC0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FD08); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FD58); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FDAC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FE10); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FE78); - -void func_8017FED0(void) { -} - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FED8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8017FFD0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801803E4); - -extern void (*D_801EEDBC[])(void); - -void func_80180540(void *a0) { - D_801EEDBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8018057C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181380); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8018144C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181600); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181688); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801816FC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181724); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181758); - -void func_80181768(void *a0) { - *(s16 *)((s32)a0 + 0x106) = 1; - } - - -void func_80181774(void *a0) { - *(short *)((char *)a0 + 0x106) = 0x2; - } - - -void func_80181780(void *a0) { - *(short *)((char *)a0 + 0x106) = 0x3; - } - - -void func_8018178C(void *a0) { - *(s16 *)((s32)a0 + 0x106) = 0; - } - - -extern void func_80181724(s32 arg0, s32 arg1); - void func_80181794(void *arg0) { - func_80181724(M2C_FIELD(arg0, s16 *, 0x70), 0x2D); - } - - -extern void func_80181724(s32 arg0, s32 arg1); - void func_801817B8(void *arg0) { - func_80181724(M2C_FIELD(arg0, s16 *, 0x70), 0x3D); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801817DC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801817F4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181840); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181894); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_801818C8(void) { - func_80029124(0x81, 1); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801818EC); - - -extern void func_8001AAA0(s32 arg0); -extern s32 func_8001B710(void); - -void func_80181918(void) { - func_8001AAA0(0x3D); - func_8001B710(); -} - - -extern void func_800D0C48(s32 arg); - void func_80181940(void) { - func_800D0C48(0x1); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181960); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181988); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801819B0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181A1C); - -extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); - void func_80181A80(void *a0) { - ((void (*)(s32, s32, s32))func_8012C658)(0x1AB, 0x2D, (s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181AA8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181B04); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181BBC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181C14); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181C64); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181CF8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181D38); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181D7C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181DC0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181E58); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181EB0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181F0C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181F78); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80181FD4); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182030); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8018210C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801821E8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801822D8); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182368); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801823D0); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182438); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_8018248C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801824FC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182570); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182634); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801827FC); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_80182850); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_801734BC", func_801828D0); - diff --git a/src/ov_SC01_009/ov_SC01_009_jr_80178D40.c b/src/ov_SC01_009/ov_SC01_009_jr_80178D40.c new file mode 100644 index 000000000..0f0513201 --- /dev/null +++ b/src/ov_SC01_009/ov_SC01_009_jr_80178D40.c @@ -0,0 +1,4599 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185B60[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801F2448; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185B54[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185B98[]; +extern unsigned short D_80185BA0[]; +extern unsigned short D_80185BA8[]; +extern unsigned char D_801F2450[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801F2448; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185BB0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F2584; +extern M2C_UNK D_801F2588; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F2510; +extern void (*D_80185BE0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801F258C[]; +extern u8 D_801F2594[]; +extern u8 D_801F2544[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80185BE8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185C04[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185C0C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185C74[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185C18; +extern u8 D_80185C24; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185CA8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185CB0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185D04[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185D38[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185D28[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185D54; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185DCC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80185DD4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185DDC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80185DE4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185DEC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185DF4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185E00[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185E0C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185E18[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185E28[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185E38[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185E40[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185E48[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185E50[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185E58[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185E60[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185E68[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185E70[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185E78[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185E80[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185E88[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185E90[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185E98[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185EA0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185EA8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185EB0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185EB8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185EC0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185EC8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185ED0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185ED8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185EE0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185EE8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185F2C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185EF0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185F5C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185F98[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185FF0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186000[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186008[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80186170[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018617C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801F1538; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801F33E8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801F2CC8; +extern short D_801F345C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801F345C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801F345C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801F2CC8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801F345C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801F33B8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801F33B8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801F345C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801F345C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801F3124[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801F2CCC; + extern s32 D_801F30E0; + extern s16 D_801F30E4; + extern s16 D_801F30E8; + extern s16 D_801F30EC; + extern s16 D_801F30F0; + extern s32 D_801F30F8; + extern s32 D_801F30FC; + extern s32 D_801F310C; + extern s16 D_801F3110; + extern s16 D_801F3114; + extern s32 D_801F3118; + extern s32 D_801F3120; + extern s32 D_801F3124[10]; + extern s32 D_801F3300; + extern s16 D_801F33B8; + extern s32 D_801F33E4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801F33B8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801F30E0); + D_801F30E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F30EC, D_801F30F0 ? 0x48 : 0x40); + (*(s16*)&D_801F345C) = 2; + break; + case 0: + func_80179B28(D_801F30E0); + D_801F30E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F30E4, D_801F30E8 ? 0x48 : 0x40); + (*(s16*)&D_801F345C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801F3300 != 0) { + func_80179B28(D_801F30E0); + D_801F30E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801F30E4, D_801F30E8 ? 0x48 : 0x40); + (*(s16*)&D_801F345C) = 1; + } else { + (*(s16*)&D_801F345C) = 3; + } + break; + case 0x32: + func_80179B28(D_801F30E0); + D_801F30E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801F30E4, + D_801F30E8 ? 0x48 : 0x40); + (*(s16*)&D_801F345C) = 1; + break; + case 2: + func_80179B28(D_801F30E0); + if (D_801F30F8 != 0) { + D_801F2CC8 = D_801F30F8; + D_801F30F8 = 0; + (*(s16*)&D_801F345C) = 3; + return; + } + (*(s16*)&D_801F345C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801F345C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801F345C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F345C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801F345C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F345C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801F345C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F345C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F345C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801F345C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801F345C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801F345C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x1B: + D_801F3118 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801F345C) = 4; + D_801F2CCC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801F345C) = 5; + D_801F310C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801F310C = (s32)func_8017A3B0; + (*(s16*)&D_801F345C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x24: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F345C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F345C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801F345C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F345C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F345C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F345C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F345C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F345C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801F345C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F30FC); + (*(s16*)&D_801F345C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F30FC); + (*(s16*)&D_801F345C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F30FC); + (*(s16*)&D_801F345C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F30FC); + (*(s16*)&D_801F345C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + break; + case 0x4E: + D_801F3120 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x2B: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801F345C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801F33E4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801F345C) = 3; + break; + case 0x34: + (*(s16*)&D_801F345C) = 3; + D_801F2CC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801F30F8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801F345C) = 3; + D_801F2CC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801F345C) = 3; + D_801F2CC8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801F2CC8 = *(s32 *)(D_801F2CC8 + 4); + return; + case 0x37: + (*(s16*)&D_801F345C) = 3; + D_801F30E4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F30E8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801F345C) = 3; + D_801F30EC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F30F0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801F345C) = 3; + D_801F30E4 = w1; + D_801F30E8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801F345C) = 3; + D_801F30EC = w2; + D_801F30F0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + case 0x43: + D_801F310C = (s32)func_8017A3D8; + D_801F3114 = 0; + (*(s16*)&D_801F345C) = 5; + D_801F3110 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F345C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F345C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F345C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801F3124; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801F345C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801F3124; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801F345C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801F3124[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801F345C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801F3124; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801F345C) = 3; + break; + default: + break; + } +Lend: + D_801F2CC8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F30F4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801F30F4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F30F4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801F30F4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801F311C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801F311C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801F30D8; + +s32 func_8017A3B0(void) { + switch (D_801F30D8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801F3154; + extern s16 D_801F3156; + extern s16 D_801F3158; + extern s16 D_801F314C; + extern s16 D_801F314E; + extern s16 D_801F3150; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F3154, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F3156, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F3158, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F314C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F314E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F3150, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801F30DC; +extern u16 D_801F315C; +extern u16 D_801F315E; +extern u16 D_801F3160; +extern s16 D_801F33E8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801F33E8 = 0; + D_801F30DC = 0; + D_801F315C = D_80126B5E; + D_801F315E = D_80126B62; + D_801F3160 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801862B8[]; + extern s16 D_801F3154; + extern s16 D_801F314C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801862B8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801862B8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F3154; + s16 *p78C = &D_801F314C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801F33E8 = 1; + D_801F30DC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801F30FC; + extern SV4_8017B368 D_801F3104; + extern s16 D_801F3154; + extern s16 D_801F314C; + extern u16 D_801862B8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801F30FC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801F3104; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801862B8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801862B8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801F3154) = loc0; + (*(SV4_8017B368 *)&D_801F314C) = loc1; + D_801F33E8 = 1; + D_801F30DC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801862B8[]; + extern s16 D_801F3154; + extern s16 D_801F3156; + extern s16 D_801F3158; + extern s16 D_801F314C; + extern s16 D_801F314E; + extern s16 D_801F3150; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801862B8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801862B8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F3154; + s16 *p78C = &D_801F314C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801F3156; + v798 = D_801F3158; + v78C = *p78C; + v78E = D_801F314E; + v790 = D_801F3150; + __asm__ __volatile__(""); + D_801F33E8 = 1; + D_801F30DC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F30DC; +extern s16 D_801F3154; +extern s16 D_801F3156; +extern s16 D_801F3158; +extern s16 D_801F314C; +extern s16 D_801F314E; +extern s16 D_801F3150; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801F30DC = 0; + D_801F3154 = (s16) D_80114F30; + D_801F3156 = (s16) D_80114F34; + D_801F3158 = (s16) D_80114F38; + D_801F314C = (s16) D_80114F24; + D_801F314E = (s16) D_80114F28; + D_801F3150 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801F316C; +extern s16 D_801F316E; +extern s16 D_801F3170; +extern s16 D_801F3174; +extern s16 D_801F3176; +extern s16 D_801F3178; + +void func_8017B824(void) { + D_801F316C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801F316E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801F3170 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801F3174 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801F3176 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801F3178 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801F316C; +extern s16 D_801F316E; +extern s16 D_801F3170; +extern s16 D_801F3174; +extern s16 D_801F3176; +extern s16 D_801F3178; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801F316C; + D_80114F34 = D_801F316E; + D_80114F38 = D_801F3170; + D_80114F24 = D_801F3174; + D_80114F28 = D_801F3176; + D_80114F2C = D_801F3178; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801F3154), src[8..15] -> (*(S8_8017B8E8 *)&D_801F314C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801F3154) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801F314C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801F315C; +extern u16 D_801F315E; +extern u16 D_801F3160; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F30DC; +extern short D_801F3164; +extern short D_801F3166; +extern short D_801F3168; +extern s16 D_801F3154; +extern s16 D_801F3156; +extern s16 D_801F3158; +extern s16 D_801F314C; +extern s16 D_801F314E; +extern s16 D_801F3150; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F315C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F315E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F3160); + (*(s16 *)&D_801F3164) = buf[0]; + (*(s16 *)&D_801F3166) = buf[1]; + (*(s16 *)&D_801F3168) = buf[2]; + D_801F3154 = D_80114F30 + buf[0]; + D_801F30DC = 0; + D_801F3156 = D_80114F34 + buf[1]; + D_801F3158 = D_80114F38 + buf[2]; + D_801F314C = D_80114F24 + buf[0]; + D_801F314E = D_80114F28 + buf[1]; + D_801F3150 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801F30FC; +extern SV4 D_801F3104; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F3104) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801F30FC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801F3104 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F3104)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801F30FC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801F3104) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801F3124[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801F3124; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801F30DC; +extern s16 D_801F33E8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801F30DC = D_801F30DC + 1; + if (D_801F30DC >= 0x1F) { + D_801F33E8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801F30DC; +extern s16 D_801F33E8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F30DC = D_801F30DC + 1; + if (0x18 < D_801F30DC) { + func_8012A4BC(); + D_801F33E8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801F30DC; +extern void (*D_801F3120)(void); +extern short D_801F3164; +extern short D_801F3166; +extern short D_801F3168; +extern s16 D_801F33E8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F30DC = D_801F30DC + 1; + if (D_801F30DC >= 0x19) { + if (D_801F3120 != 0) { + (*D_801F3120)(); + } else { + D_80114F30 = D_80114F30 + D_801F3164; + D_80114F34 = D_80114F34 + D_801F3166; + D_80114F38 = D_80114F38 + D_801F3168; + D_80114F24 = D_80114F24 + D_801F3164; + D_80114F28 = D_80114F28 + D_801F3166; + D_80114F2C = D_80114F2C + D_801F3168; + func_8012A4BC(); + } + D_801F33E8 = 0; + } +} + + + +extern void (*D_80186358[])(void); + +void func_8017BE60(void *a0) { + D_80186358[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017BE9C); + + +extern void (*D_801863B4[])(void); + +void func_8017CD7C(void *a0) { + D_801863B4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CDB8); + +DEFINE_func_8017CDFC() /* dedup: shared engine-core @0x8017CDFC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CE20); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CE60(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CEDC(void) { + func_800D1EBC(); + } + + + +extern void (*D_801863C8[])(void); + +void func_8017CEFC(void *a0) { + D_801863C8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CF38); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CFAC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CFD4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017CFFC); + + +extern void (*D_801863F4[])(void); + +void func_8017D0BC(void *a0) { + D_801863F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_8017D120(s32 arg0, s32 arg1); +extern s32 D_801274E8; + +void func_8017D0F8(s32 arg0) { + func_8017D120(arg0, &D_801274E8); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D120); + +s32 func_8017D2B8(s32 arg0) { + if (arg0 == 0x2DA) { + return 0x9F; + } else { + return 0x3D; + } + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D2E0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D334); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D384); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D3F4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D47C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D730); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D920); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017D93C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017DA8C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017DBB8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017DC10); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017DEF0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017E1AC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017E378); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017E590); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017E7DC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017EB08); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017EF64); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017EFC4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F2A0); + + +extern void (*D_801E9A18[])(void); + +void func_8017F360(void *a0) { + D_801E9A18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F39C); + +extern void func_8017D2E0(s32 arg0, s32 arg1); + void func_8017F440(void) { + func_8017D2E0(0x1, 0); + } + + +extern void func_8017D2E0(s32 arg0, s32 arg1); + void func_8017F464(void) { + func_8017D2E0(0x1, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F488); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F4D0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F520); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F568); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F5B0); + +extern s32 func_8017F5F8(void *a0); + s32 func_8017F5F8(void *a0) { + return *(s16 *)((char *)a0 + 0x104) == 0x4; + } + + +s32 func_8017F60C(s32 *a0) { + return *(s16*)((s32)a0 + 0x104); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F618); + +extern void func_800291A0(s32 arg0, s32 arg1); + void func_8017F658(void) { + func_800291A0(0x3B, 0x7); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F67C); + +void func_8017F6B4(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F6C0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F710); + + +extern s32 func_8017F758(void *a0); + s32 func_8017F758(void *a0) { + return *(s16 *)((char *)a0 + 0x104) == 0x2; + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F76C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F790); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F7B4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F7D8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F7F0); + +void func_8017F8B4(void *a0) { + *(short *)((char *)a0 + 0xFA) = 0x1D00; + } + + +void func_8017F8C0(s32 *a0) { + *(s16 *)((s32)a0 + 0xFA) = 0x1A40; + } + + +void func_8017F8CC(void *a0) { + *(short *)((char *)a0 + 0xFA) = 0x2000; + } + + +void func_8017F8D8(s32 *a0) { + *(s16 *)((s32)a0 + 0xFA) = 0xA40; + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F8E4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017F900); + +extern void func_8001AAA0(s32 arg0); +extern s32 func_8001B710(void); + +void func_8017F9CC(void) { + func_8001AAA0(0x3D); + func_8001B710(); +} + + +extern void func_800D0C48(s32 arg); + void func_8017F9F4(void) { + func_800D0C48(0x1); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FA14); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FAFC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FB98); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FC44); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FCC0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FD08); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FD58); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FDAC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FE10); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FE78); + +void func_8017FED0(void) { +} + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FED8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8017FFD0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801803E4); + +extern void (*D_801EEDBC[])(void); + +void func_80180540(void *a0) { + D_801EEDBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8018057C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181380); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8018144C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181600); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181688); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801816FC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181724); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181758); + +void func_80181768(void *a0) { + *(s16 *)((s32)a0 + 0x106) = 1; + } + + +void func_80181774(void *a0) { + *(short *)((char *)a0 + 0x106) = 0x2; + } + + +void func_80181780(void *a0) { + *(short *)((char *)a0 + 0x106) = 0x3; + } + + +void func_8018178C(void *a0) { + *(s16 *)((s32)a0 + 0x106) = 0; + } + + +extern void func_80181724(s32 arg0, s32 arg1); + void func_80181794(void *arg0) { + func_80181724(M2C_FIELD(arg0, s16 *, 0x70), 0x2D); + } + + +extern void func_80181724(s32 arg0, s32 arg1); + void func_801817B8(void *arg0) { + func_80181724(M2C_FIELD(arg0, s16 *, 0x70), 0x3D); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801817DC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801817F4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181840); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181894); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_801818C8(void) { + func_80029124(0x81, 1); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801818EC); + + +extern void func_8001AAA0(s32 arg0); +extern s32 func_8001B710(void); + +void func_80181918(void) { + func_8001AAA0(0x3D); + func_8001B710(); +} + + +extern void func_800D0C48(s32 arg); + void func_80181940(void) { + func_800D0C48(0x1); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181960); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181988); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801819B0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181A1C); + +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); + void func_80181A80(void *a0) { + ((void (*)(s32, s32, s32))func_8012C658)(0x1AB, 0x2D, (s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181AA8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181B04); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181BBC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181C14); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181C64); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181CF8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181D38); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181D7C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181DC0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181E58); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181EB0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181F0C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181F78); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80181FD4); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182030); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8018210C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801821E8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801822D8); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182368); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801823D0); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182438); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_8018248C); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801824FC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182570); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182634); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801827FC); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_80182850); + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_80178D40", func_801828D0); + + diff --git a/src/ov_SC01_074/ov_SC01_074_jr_801734BC.c b/src/ov_SC01_074/ov_SC01_074_jr_801734BC.c index bd26f7bd9..2373a90ff 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_801734BC.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_801734BC.c @@ -3104,947 +3104,3 @@ void func_80178D18(void) { D_8019BD6C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019BB74; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019BB74 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019BB74; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019BB74 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019BB9C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019BB9C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019BB58; - -s32 func_8017A3B0(void) { - switch (D_8019BB58) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019BB94; -extern short D_8019BB90; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019BB94) { - case 0: - func_800D0CA0(1); - D_8019BB94 = D_8019BB94 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019BB90; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019BB94 = D_8019BB94 + 1; - if (D_8019BB94 < 0x1E) { - return 0; - } - D_8019BB94 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019BBD4; - extern s16 D_8019BBD6; - extern s16 D_8019BBD8; - extern s16 D_8019BBCC; - extern s16 D_8019BBCE; - extern s16 D_8019BBD0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019BBD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019BBD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019BBD8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019BBCC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019BBCE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019BBD0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019BB5C; -extern u16 D_8019BBDC; -extern u16 D_8019BBDE; -extern u16 D_8019BBE0; -extern s16 D_8019BCF8; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019BCF8 = 0; - D_8019BB5C = 0; - D_8019BBDC = D_80126B5E; - D_8019BBDE = D_80126B62; - D_8019BBE0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181F38[]; - extern s16 D_8019BBD4; - extern s16 D_8019BBCC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181F38[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181F38[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019BBD4; - s16 *p78C = &D_8019BBCC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019BCF8 = 1; - D_8019BB5C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019BB7C; - extern SV4_8017B368 D_8019BB84; - extern s16 D_8019BBD4; - extern s16 D_8019BBCC; - extern u16 D_80181F38; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019BB7C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019BB84; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181F38)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181F38)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019BBD4) = loc0; - (*(SV4_8017B368 *)&D_8019BBCC) = loc1; - D_8019BCF8 = 1; - D_8019BB5C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181F38[]; - extern s16 D_8019BBD4; - extern s16 D_8019BBD6; - extern s16 D_8019BBD8; - extern s16 D_8019BBCC; - extern s16 D_8019BBCE; - extern s16 D_8019BBD0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181F38[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181F38[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019BBD4; - s16 *p78C = &D_8019BBCC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019BBD6; - v798 = D_8019BBD8; - v78C = *p78C; - v78E = D_8019BBCE; - v790 = D_8019BBD0; - __asm__ __volatile__(""); - D_8019BCF8 = 1; - D_8019BB5C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019BB5C; -extern s16 D_8019BBD4; -extern s16 D_8019BBD6; -extern s16 D_8019BBD8; -extern s16 D_8019BBCC; -extern s16 D_8019BBCE; -extern s16 D_8019BBD0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019BB5C = 0; - D_8019BBD4 = (s16) D_80114F30; - D_8019BBD6 = (s16) D_80114F34; - D_8019BBD8 = (s16) D_80114F38; - D_8019BBCC = (s16) D_80114F24; - D_8019BBCE = (s16) D_80114F28; - D_8019BBD0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019BBEC; -extern s16 D_8019BBEE; -extern s16 D_8019BBF0; -extern s16 D_8019BBF4; -extern s16 D_8019BBF6; -extern s16 D_8019BBF8; - -void func_8017B824(void) { - D_8019BBEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019BBEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019BBF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019BBF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019BBF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019BBF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019BBEC; -extern s16 D_8019BBEE; -extern s16 D_8019BBF0; -extern s16 D_8019BBF4; -extern s16 D_8019BBF6; -extern s16 D_8019BBF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019BBEC; - D_80114F34 = D_8019BBEE; - D_80114F38 = D_8019BBF0; - D_80114F24 = D_8019BBF4; - D_80114F28 = D_8019BBF6; - D_80114F2C = D_8019BBF8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019BBD4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019BBCC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019BBD4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019BBCC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019BBDC; -extern u16 D_8019BBDE; -extern u16 D_8019BBE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019BB5C; -extern short D_8019BBE4; -extern short D_8019BBE6; -extern short D_8019BBE8; -extern s16 D_8019BBD4; -extern s16 D_8019BBD6; -extern s16 D_8019BBD8; -extern s16 D_8019BBCC; -extern s16 D_8019BBCE; -extern s16 D_8019BBD0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019BBDC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019BBDE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019BBE0); - (*(s16 *)&D_8019BBE4) = buf[0]; - (*(s16 *)&D_8019BBE6) = buf[1]; - (*(s16 *)&D_8019BBE8) = buf[2]; - D_8019BBD4 = D_80114F30 + buf[0]; - D_8019BB5C = 0; - D_8019BBD6 = D_80114F34 + buf[1]; - D_8019BBD8 = D_80114F38 + buf[2]; - D_8019BBCC = D_80114F24 + buf[0]; - D_8019BBCE = D_80114F28 + buf[1]; - D_8019BBD0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019BB7C; -extern SV4 D_8019BB84; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019BB84) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019BB7C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019BB84 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019BB84)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019BB7C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019BB84) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019BBA4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019BBA4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019BB5C; -extern s16 D_8019BCF8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019BB5C = D_8019BB5C + 1; - if (D_8019BB5C >= 0x1F) { - D_8019BCF8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019BB5C; -extern s16 D_8019BCF8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019BB5C = D_8019BB5C + 1; - if (0x18 < D_8019BB5C) { - func_8012A4BC(); - D_8019BCF8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019BB5C; -extern void (*D_8019BBA0)(void); -extern short D_8019BBE4; -extern short D_8019BBE6; -extern short D_8019BBE8; -extern s16 D_8019BCF8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019BB5C = D_8019BB5C + 1; - if (D_8019BB5C >= 0x19) { - if (D_8019BBA0 != 0) { - (*D_8019BBA0)(); - } else { - D_80114F30 = D_80114F30 + D_8019BBE4; - D_80114F34 = D_80114F34 + D_8019BBE6; - D_80114F38 = D_80114F38 + D_8019BBE8; - D_80114F24 = D_80114F24 + D_8019BBE4; - D_80114F28 = D_80114F28 + D_8019BBE6; - D_80114F2C = D_80114F2C + D_8019BBE8; - func_8012A4BC(); - } - D_8019BCF8 = 0; - } -} - - - -extern void (*D_80181FD8[])(void); - -void func_8017BE60(void *a0) { - D_80181FD8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017BE9C); - - -extern void (*D_80182138[])(void); - -void func_8017CD7C(void *a0) { - D_80182138[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017CDB8); - -DEFINE_func_8017CDFC() /* dedup: shared engine-core @0x8017CDFC (src/shared) */ - - -extern void (*D_80182140[])(void); - -void func_8017CE20(void *a0) { - D_80182140[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017CE5C(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CE78(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017CEF4(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018214C[])(void); - -void func_8017CF14(void *a0) { - D_8018214C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017CF50); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017CFC4); - - -extern void (*D_80182158[])(void); - -void func_8017D034(void *a0) { - D_80182158[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D070); - - -extern void (*D_80182160[])(void); - -void func_8017D0B4(void *a0) { - D_80182160[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D0F0); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D134); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D15C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D184); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D1D8); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D244); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D2B4); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D2F8); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D364); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D3FC); - - -extern void (*D_801821E8[])(void); - -void func_8017D424(void *a0) { - D_801821E8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D460); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D4D0); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D528); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D5A8); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D634); - -void func_8017D6CC(void) { -} - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D6D4); - - -extern void (*D_80182210[])(void); - -void func_8017D6FC(void *a0) { - D_80182210[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D738); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D7A4); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D80C); - -extern s32 func_80171990(u8 *a0); - s32 func_8017D8A8(s32 arg0) { - *(s32 *)(arg0 + 0x200) = *(s32 *)(arg0 + 0x200) - 1; - if (*(s32 *)(arg0 + 0x200) == -1) { - ((void (*)(void))func_80171990)(); - } - } - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D8DC); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D918); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D964); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017D98C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DB04); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DBA0); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DC3C); - - -extern void (*D_8018222C[])(void); - -void func_8017DD1C(void *a0) { - D_8018222C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DD58); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DE0C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017DE88); - - -extern void (*D_8018223C[])(void); - -void func_8017E020(void *a0) { - D_8018223C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017E05C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017E07C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017E158); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017E3E0); - - -extern void (*D_80182254[])(void); - -void func_8017E4C8(void *a0) { - D_80182254[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017E504); - -void func_8017E54C(void) { -} - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_801734BC", func_8017E554); - diff --git a/src/ov_SC01_074/ov_SC01_074_jr_80178D40.c b/src/ov_SC01_074/ov_SC01_074_jr_80178D40.c new file mode 100644 index 000000000..ee46332bd --- /dev/null +++ b/src/ov_SC01_074/ov_SC01_074_jr_80178D40.c @@ -0,0 +1,4414 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801817E0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019AEC8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801817D4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181818[]; +extern unsigned short D_80181820[]; +extern unsigned short D_80181828[]; +extern unsigned char D_8019AED0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019AEC8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181830[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019B004; +extern M2C_UNK D_8019B008; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AF90; +extern void (*D_80181860[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019B00C[]; +extern u8 D_8019B014[]; +extern u8 D_8019AFC4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181868[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181884[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018188C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801818F4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181898; +extern u8 D_801818A4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181928[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181930[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181984[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801819B8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801819A8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801819D4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181A4C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181A54[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181A5C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181A64[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181A6C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181A74[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181A80[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181A8C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181A98[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181AA8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181AB8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181AC0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181AC8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181AD0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181AD8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181AE0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181AE8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181AF0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181AF8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181B00[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181B08[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181B10[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181B18[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181B20[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181B28[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181B30[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181B38[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181B40[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181B48[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181B50[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181B58[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181B60[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181B68[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181BAC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181B70; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181BDC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80181C18[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181C70[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80181C80[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80181C88[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181DF0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80181DFC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019A5C8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019BCF8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019B748; +extern short D_8019BD6C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019BD6C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019BD6C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019B748 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019BD6C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019BCC8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019BCC8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019BD6C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019BD6C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019BBA4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019B74C; + extern s32 D_8019BB60; + extern s16 D_8019BB64; + extern s16 D_8019BB68; + extern s16 D_8019BB6C; + extern s16 D_8019BB70; + extern s32 D_8019BB78; + extern s32 D_8019BB7C; + extern s32 D_8019BB8C; + extern s16 D_8019BB90; + extern s16 D_8019BB94; + extern s32 D_8019BB98; + extern s32 D_8019BBA0; + extern s32 D_8019BBA4[10]; + extern s32 D_8019BC10; + extern s16 D_8019BCC8; + extern s32 D_8019BCF4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019BCC8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019BB60); + D_8019BB60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019BB6C, D_8019BB70 ? 0x48 : 0x40); + (*(s16*)&D_8019BD6C) = 2; + break; + case 0: + func_80179B28(D_8019BB60); + D_8019BB60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019BB64, D_8019BB68 ? 0x48 : 0x40); + (*(s16*)&D_8019BD6C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019BC10 != 0) { + func_80179B28(D_8019BB60); + D_8019BB60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019BB64, D_8019BB68 ? 0x48 : 0x40); + (*(s16*)&D_8019BD6C) = 1; + } else { + (*(s16*)&D_8019BD6C) = 3; + } + break; + case 0x32: + func_80179B28(D_8019BB60); + D_8019BB60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019BB64, + D_8019BB68 ? 0x48 : 0x40); + (*(s16*)&D_8019BD6C) = 1; + break; + case 2: + func_80179B28(D_8019BB60); + if (D_8019BB78 != 0) { + D_8019B748 = D_8019BB78; + D_8019BB78 = 0; + (*(s16*)&D_8019BD6C) = 3; + return; + } + (*(s16*)&D_8019BD6C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019BD6C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BD6C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BD6C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x1B: + D_8019BB98 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019BD6C) = 4; + D_8019B74C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019BD6C) = 5; + D_8019BB8C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019BB8C = (s32)func_8017A3B0; + (*(s16*)&D_8019BD6C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x24: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BD6C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BD6C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019BD6C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BD6C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BD6C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BD6C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019BD6C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019BB7C); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019BB7C); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019BB7C); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019BB7C); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x4E: + D_8019BBA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019BD6C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019BCF4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x34: + (*(s16*)&D_8019BD6C) = 3; + D_8019B748 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019BB78 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019BD6C) = 3; + D_8019B748 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019BD6C) = 3; + D_8019B748 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019B748 = *(s32 *)(D_8019B748 + 4); + return; + case 0x37: + (*(s16*)&D_8019BD6C) = 3; + D_8019BB64 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019BB68 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019BD6C) = 3; + D_8019BB6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019BB70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019BD6C) = 3; + D_8019BB64 = w1; + D_8019BB68 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019BD6C) = 3; + D_8019BB6C = w2; + D_8019BB70 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x43: + D_8019BB8C = (s32)func_8017A3D8; + D_8019BB94 = 0; + (*(s16*)&D_8019BD6C) = 5; + D_8019BB90 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BD6C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BD6C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019BBA4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019BD6C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019BBA4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019BD6C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019BBA4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019BD6C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019BBA4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019BD6C) = 3; + break; + default: + break; + } +Lend: + D_8019B748 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019BB74; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019BB74 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019BB74; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019BB74 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019BB9C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019BB9C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019BB58; + +s32 func_8017A3B0(void) { + switch (D_8019BB58) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019BB94; +extern short D_8019BB90; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019BB94) { + case 0: + func_800D0CA0(1); + D_8019BB94 = D_8019BB94 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019BB90; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019BB94 = D_8019BB94 + 1; + if (D_8019BB94 < 0x1E) { + return 0; + } + D_8019BB94 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019BBD4; + extern s16 D_8019BBD6; + extern s16 D_8019BBD8; + extern s16 D_8019BBCC; + extern s16 D_8019BBCE; + extern s16 D_8019BBD0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019BBD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019BBD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019BBD8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019BBCC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019BBCE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019BBD0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019BB5C; +extern u16 D_8019BBDC; +extern u16 D_8019BBDE; +extern u16 D_8019BBE0; +extern s16 D_8019BCF8; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019BCF8 = 0; + D_8019BB5C = 0; + D_8019BBDC = D_80126B5E; + D_8019BBDE = D_80126B62; + D_8019BBE0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181F38[]; + extern s16 D_8019BBD4; + extern s16 D_8019BBCC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181F38[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181F38[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019BBD4; + s16 *p78C = &D_8019BBCC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019BCF8 = 1; + D_8019BB5C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019BB7C; + extern SV4_8017B368 D_8019BB84; + extern s16 D_8019BBD4; + extern s16 D_8019BBCC; + extern u16 D_80181F38; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019BB7C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019BB84; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181F38)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181F38)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019BBD4) = loc0; + (*(SV4_8017B368 *)&D_8019BBCC) = loc1; + D_8019BCF8 = 1; + D_8019BB5C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181F38[]; + extern s16 D_8019BBD4; + extern s16 D_8019BBD6; + extern s16 D_8019BBD8; + extern s16 D_8019BBCC; + extern s16 D_8019BBCE; + extern s16 D_8019BBD0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181F38[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181F38[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019BBD4; + s16 *p78C = &D_8019BBCC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019BBD6; + v798 = D_8019BBD8; + v78C = *p78C; + v78E = D_8019BBCE; + v790 = D_8019BBD0; + __asm__ __volatile__(""); + D_8019BCF8 = 1; + D_8019BB5C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019BB5C; +extern s16 D_8019BBD4; +extern s16 D_8019BBD6; +extern s16 D_8019BBD8; +extern s16 D_8019BBCC; +extern s16 D_8019BBCE; +extern s16 D_8019BBD0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019BB5C = 0; + D_8019BBD4 = (s16) D_80114F30; + D_8019BBD6 = (s16) D_80114F34; + D_8019BBD8 = (s16) D_80114F38; + D_8019BBCC = (s16) D_80114F24; + D_8019BBCE = (s16) D_80114F28; + D_8019BBD0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019BBEC; +extern s16 D_8019BBEE; +extern s16 D_8019BBF0; +extern s16 D_8019BBF4; +extern s16 D_8019BBF6; +extern s16 D_8019BBF8; + +void func_8017B824(void) { + D_8019BBEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019BBEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019BBF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019BBF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019BBF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019BBF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019BBEC; +extern s16 D_8019BBEE; +extern s16 D_8019BBF0; +extern s16 D_8019BBF4; +extern s16 D_8019BBF6; +extern s16 D_8019BBF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019BBEC; + D_80114F34 = D_8019BBEE; + D_80114F38 = D_8019BBF0; + D_80114F24 = D_8019BBF4; + D_80114F28 = D_8019BBF6; + D_80114F2C = D_8019BBF8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019BBD4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019BBCC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019BBD4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019BBCC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019BBDC; +extern u16 D_8019BBDE; +extern u16 D_8019BBE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019BB5C; +extern short D_8019BBE4; +extern short D_8019BBE6; +extern short D_8019BBE8; +extern s16 D_8019BBD4; +extern s16 D_8019BBD6; +extern s16 D_8019BBD8; +extern s16 D_8019BBCC; +extern s16 D_8019BBCE; +extern s16 D_8019BBD0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019BBDC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019BBDE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019BBE0); + (*(s16 *)&D_8019BBE4) = buf[0]; + (*(s16 *)&D_8019BBE6) = buf[1]; + (*(s16 *)&D_8019BBE8) = buf[2]; + D_8019BBD4 = D_80114F30 + buf[0]; + D_8019BB5C = 0; + D_8019BBD6 = D_80114F34 + buf[1]; + D_8019BBD8 = D_80114F38 + buf[2]; + D_8019BBCC = D_80114F24 + buf[0]; + D_8019BBCE = D_80114F28 + buf[1]; + D_8019BBD0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019BB7C; +extern SV4 D_8019BB84; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019BB84) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019BB7C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019BB84 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019BB84)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019BB7C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019BB84) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019BBA4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019BBA4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019BB5C; +extern s16 D_8019BCF8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019BB5C = D_8019BB5C + 1; + if (D_8019BB5C >= 0x1F) { + D_8019BCF8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019BB5C; +extern s16 D_8019BCF8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019BB5C = D_8019BB5C + 1; + if (0x18 < D_8019BB5C) { + func_8012A4BC(); + D_8019BCF8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019BB5C; +extern void (*D_8019BBA0)(void); +extern short D_8019BBE4; +extern short D_8019BBE6; +extern short D_8019BBE8; +extern s16 D_8019BCF8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019BB5C = D_8019BB5C + 1; + if (D_8019BB5C >= 0x19) { + if (D_8019BBA0 != 0) { + (*D_8019BBA0)(); + } else { + D_80114F30 = D_80114F30 + D_8019BBE4; + D_80114F34 = D_80114F34 + D_8019BBE6; + D_80114F38 = D_80114F38 + D_8019BBE8; + D_80114F24 = D_80114F24 + D_8019BBE4; + D_80114F28 = D_80114F28 + D_8019BBE6; + D_80114F2C = D_80114F2C + D_8019BBE8; + func_8012A4BC(); + } + D_8019BCF8 = 0; + } +} + + + +extern void (*D_80181FD8[])(void); + +void func_8017BE60(void *a0) { + D_80181FD8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017BE9C); + + +extern void (*D_80182138[])(void); + +void func_8017CD7C(void *a0) { + D_80182138[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017CDB8); + +DEFINE_func_8017CDFC() /* dedup: shared engine-core @0x8017CDFC (src/shared) */ + + +extern void (*D_80182140[])(void); + +void func_8017CE20(void *a0) { + D_80182140[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017CE5C(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CE78(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017CEF4(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018214C[])(void); + +void func_8017CF14(void *a0) { + D_8018214C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017CF50); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017CFC4); + + +extern void (*D_80182158[])(void); + +void func_8017D034(void *a0) { + D_80182158[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D070); + + +extern void (*D_80182160[])(void); + +void func_8017D0B4(void *a0) { + D_80182160[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D0F0); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D134); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D15C); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D184); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D1D8); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D244); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D2B4); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D2F8); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D364); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D3FC); + + +extern void (*D_801821E8[])(void); + +void func_8017D424(void *a0) { + D_801821E8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D460); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D4D0); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D528); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D5A8); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D634); + +void func_8017D6CC(void) { +} + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D6D4); + + +extern void (*D_80182210[])(void); + +void func_8017D6FC(void *a0) { + D_80182210[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D738); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D7A4); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D80C); + +extern s32 func_80171990(u8 *a0); + s32 func_8017D8A8(s32 arg0) { + *(s32 *)(arg0 + 0x200) = *(s32 *)(arg0 + 0x200) - 1; + if (*(s32 *)(arg0 + 0x200) == -1) { + ((void (*)(void))func_80171990)(); + } + } + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D8DC); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D918); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D964); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017D98C); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DB04); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DBA0); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DC3C); + + +extern void (*D_8018222C[])(void); + +void func_8017DD1C(void *a0) { + D_8018222C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DD58); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DE0C); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017DE88); + + +extern void (*D_8018223C[])(void); + +void func_8017E020(void *a0) { + D_8018223C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017E05C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017E07C); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017E158); + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017E3E0); + + +extern void (*D_80182254[])(void); + +void func_8017E4C8(void *a0) { + D_80182254[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017E504); + +void func_8017E54C(void) { +} + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_80178D40", func_8017E554); + + diff --git a/src/ov_SC01_080/ov_SC01_080_jr_801734BC.c b/src/ov_SC01_080/ov_SC01_080_jr_801734BC.c index ea46f871f..93c141eaf 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_801734BC.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_801734BC.c @@ -3104,1424 +3104,3 @@ void func_80178D18(void) { D_801C7F4C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C59A4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C59A4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C59A4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C59A4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C59CC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C59CC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C5988; - -s32 func_8017A3B0(void) { - switch (D_801C5988) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C59C4; -extern short D_801C59C0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C59C4) { - case 0: - func_800D0CA0(1); - D_801C59C4 = D_801C59C4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C59C0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C59C4 = D_801C59C4 + 1; - if (D_801C59C4 < 0x1E) { - return 0; - } - D_801C59C4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C5A04; - extern s16 D_801C5A06; - extern s16 D_801C5A08; - extern s16 D_801C59FC; - extern s16 D_801C59FE; - extern s16 D_801C5A00; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C5A04, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C5A06, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C5A08, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C59FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C59FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5A00, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C598C; -extern u16 D_801C5A0C; -extern u16 D_801C5A0E; -extern u16 D_801C5A10; -extern s16 D_801C7EDC; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C7EDC = 0; - D_801C598C = 0; - D_801C5A0C = D_80126B5E; - D_801C5A0E = D_80126B62; - D_801C5A10 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186E98[]; - extern s16 D_801C5A04; - extern s16 D_801C59FC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186E98[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186E98[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C5A04; - s16 *p78C = &D_801C59FC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C7EDC = 1; - D_801C598C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C59AC; - extern SV4_8017B368 D_801C59B4; - extern s16 D_801C5A04; - extern s16 D_801C59FC; - extern u16 D_80186E98; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C59AC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C59B4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80186E98)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80186E98)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C5A04) = loc0; - (*(SV4_8017B368 *)&D_801C59FC) = loc1; - D_801C7EDC = 1; - D_801C598C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186E98[]; - extern s16 D_801C5A04; - extern s16 D_801C5A06; - extern s16 D_801C5A08; - extern s16 D_801C59FC; - extern s16 D_801C59FE; - extern s16 D_801C5A00; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186E98[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186E98[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C5A04; - s16 *p78C = &D_801C59FC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C5A06; - v798 = D_801C5A08; - v78C = *p78C; - v78E = D_801C59FE; - v790 = D_801C5A00; - __asm__ __volatile__(""); - D_801C7EDC = 1; - D_801C598C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C598C; -extern s16 D_801C5A04; -extern s16 D_801C5A06; -extern s16 D_801C5A08; -extern s16 D_801C59FC; -extern s16 D_801C59FE; -extern s16 D_801C5A00; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C598C = 0; - D_801C5A04 = (s16) D_80114F30; - D_801C5A06 = (s16) D_80114F34; - D_801C5A08 = (s16) D_80114F38; - D_801C59FC = (s16) D_80114F24; - D_801C59FE = (s16) D_80114F28; - D_801C5A00 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C5A1C; -extern s16 D_801C5A1E; -extern s16 D_801C5A20; -extern s16 D_801C5A24; -extern s16 D_801C5A26; -extern s16 D_801C5A28; - -void func_8017B824(void) { - D_801C5A1C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C5A1E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C5A20 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C5A24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C5A26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C5A28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C5A1C; -extern s16 D_801C5A1E; -extern s16 D_801C5A20; -extern s16 D_801C5A24; -extern s16 D_801C5A26; -extern s16 D_801C5A28; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C5A1C; - D_80114F34 = D_801C5A1E; - D_80114F38 = D_801C5A20; - D_80114F24 = D_801C5A24; - D_80114F28 = D_801C5A26; - D_80114F2C = D_801C5A28; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C5A04), src[8..15] -> (*(S8_8017B8E8 *)&D_801C59FC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C5A04) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C59FC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C5A0C; -extern u16 D_801C5A0E; -extern u16 D_801C5A10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C598C; -extern short D_801C5A14; -extern short D_801C5A16; -extern short D_801C5A18; -extern s16 D_801C5A04; -extern s16 D_801C5A06; -extern s16 D_801C5A08; -extern s16 D_801C59FC; -extern s16 D_801C59FE; -extern s16 D_801C5A00; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C5A0C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C5A0E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C5A10); - (*(s16 *)&D_801C5A14) = buf[0]; - (*(s16 *)&D_801C5A16) = buf[1]; - (*(s16 *)&D_801C5A18) = buf[2]; - D_801C5A04 = D_80114F30 + buf[0]; - D_801C598C = 0; - D_801C5A06 = D_80114F34 + buf[1]; - D_801C5A08 = D_80114F38 + buf[2]; - D_801C59FC = D_80114F24 + buf[0]; - D_801C59FE = D_80114F28 + buf[1]; - D_801C5A00 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C59AC; -extern SV4 D_801C59B4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C59B4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C59AC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C59B4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C59B4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C59AC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C59B4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C59D4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C59D4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C598C; -extern s16 D_801C7EDC; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C598C = D_801C598C + 1; - if (D_801C598C >= 0x1F) { - D_801C7EDC = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C598C; -extern s16 D_801C7EDC; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C598C = D_801C598C + 1; - if (0x18 < D_801C598C) { - func_8012A4BC(); - D_801C7EDC = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C598C; -extern void (*D_801C59D0)(void); -extern short D_801C5A14; -extern short D_801C5A16; -extern short D_801C5A18; -extern s16 D_801C7EDC; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C598C = D_801C598C + 1; - if (D_801C598C >= 0x19) { - if (D_801C59D0 != 0) { - (*D_801C59D0)(); - } else { - D_80114F30 = D_80114F30 + D_801C5A14; - D_80114F34 = D_80114F34 + D_801C5A16; - D_80114F38 = D_80114F38 + D_801C5A18; - D_80114F24 = D_80114F24 + D_801C5A14; - D_80114F28 = D_80114F28 + D_801C5A16; - D_80114F2C = D_80114F2C + D_801C5A18; - func_8012A4BC(); - } - D_801C7EDC = 0; - } -} - - - -extern void (*D_80186F38[])(void); - -void func_8017BE60(void *a0) { - D_80186F38[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017C338); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017C530); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017C59C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017D468); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017D72C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017D93C); - - -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern M2C_UNK D_80183884; -extern M2C_UNK D_801891AC; - -void func_8017DBF4(void *arg0) { - void *temp_v1; - - func_8001C214(M2C_FIELD(arg0, void **, 0x20), &D_801891AC); - func_8012A828(arg0, &D_80183884); - M2C_FIELD(arg0, s16 *, 2) = 3; - M2C_FIELD(arg0, u16 *, 6) = (u16) M2C_FIELD(arg0, u16 *, 0xDC); - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(arg0, u16 *, 0xE) = (u16) M2C_FIELD(arg0, u16 *, 0xDE); - M2C_FIELD(arg0, u16 *, 0x5C) = (u16) (M2C_FIELD(arg0, u16 *, 0x5C) & 0x77FF); - M2C_FIELD(temp_v1, u16 *, 0x2C) = (u16) (M2C_FIELD(temp_v1, u16 *, 0x2C) & 0xFFEF); - M2C_FIELD(arg0, s32 *, 0x1C) = 0; -} - - - -// @class: schedule -// @stuck: none — MATCH (pending byte-gate); pure store sequence, gcc -O2 schedules a0/a1 materialization - -extern void func_8012A828(s32 a0, void *a1); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80174784(void); -extern M2C_UNK D_80183884; - -void func_8017DC78(int param_1) { - unsigned short uVar1; - - func_8012A828(param_1, &D_80183884); - *(short *)(param_1 + 2) = 4; - *(short *)(param_1 + 0x34) = 0; - *(int *)(param_1 + 0x1c) = 0x1e; - uVar1 = *(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12); - *(short *)(param_1 + 0xe8) = 0; - *(int *)(param_1 + 0xe0) = 0x400000; - *(int *)(param_1 + 0xe4) = 0; - *(short *)(param_1 + 0xea) = uVar1; - func_8002D4C8(0x49e, 0); - func_8002D4C8(0x4a2, 0); - func_80174784(); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017DCF8); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold; (unsigned)(field-1)<2 forces sltiu not slti) - -extern void func_8017D72C(); -extern void (*D_80187028[])(); - -void func_8017DE38(int param_1) -{ - if (((unsigned int)(*(unsigned short *)(param_1 + 2) - 1) < 2) && - ((*(unsigned short *)(param_1 + 0x5c) & 1) != 0)) { - func_8017D72C(); - } else { - D_80187028[*(unsigned short *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017DEB0); - - -extern void (*D_80187050[])(void); - -void func_8017E0A4(void *a0) { - D_80187050[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern Blk8 D_80187014; - -void func_8017E0E0(s32 a0) { - if (*(s16 *)((s32)a0 + 0x70) == 4) { - *(Blk8 *)((s32)a0 + 0x50) = D_80187014; - } -} - - - -// @class: struct -// @stuck: none — MATCH; int *p=&D_801270DC + deref for both load AND store forces addiu-base in $s1 (callee-saved), reused via 0x0($s1) — direct global ref re-materializes lui per access -extern void func_8012BD14(s32 a0); -extern s32 func_8012E544(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8017DC78(int param_1); - -extern int D_801270DC; -extern s32 D_80126D50; - -void func_8017E124(int param_1) { - int v; - int *p = &D_801270DC; - - if (*p == 0) { - if (((int (*)(int))func_8012BD14)(param_1) < 0x4001) { - v = func_8012E544(0x161); - if (v != 0) { - *(short *)(v + 0xfc) = 1; - *(short *)(v + 0xfe) = 3 - *(short *)(param_1 + 0x70); - } - *p = 1; - *(int *)(param_1 + 0x1c) = 0x1e; - } - } else { - ((void (*)(int))func_8012BEE8)(param_1); - if (*(int *)(param_1 + 0x1c) == 0 && D_80126D50 == 0 && - ((int (*)(int))func_8012BD14)(param_1) < 0x241) { - func_8017DC78(param_1); - } - } -} - - - -// @class: remat -// @stuck: none — MATCH. Key idiom: D_801270C8 read+write via a pointer var (s32 *p = &D_801270C8; *p+=1; *p>=4) forces gcc to materialize the symbol address ONCE (lui+addiu %lo into one reg) and reuse it for both lw and sw, vs two separate %lo-folded lui's from `D_801270C8 += 1`. Also 0x34 field is lhu (u16) not lh. - -extern s32 D_801270C8; -extern s32 D_801270CC; -extern u8 D_80189450; -extern M2C_UNK D_80183884; - -extern void func_8017D468(void *arg0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern s32 func_801747AC(s32 a0); - -void func_8017E1FC(s32 arg0) { - s32 temp; - s32 *p; - - if (*(u16 *)(arg0 + 0x34) == 0) { - temp = *(s32 *)(arg0 + 0xE4) + *(s32 *)(arg0 + 0xE0); - *(s32 *)(arg0 + 0xE8) = *(s32 *)(arg0 + 0xE8) + temp; - *(s32 *)(arg0 + 0xE4) = temp; - *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) = *(s16 *)(arg0 + 0xEA); - func_8017D468((void *)arg0); - if (((s32 (*)(void *))func_8012BEE8)((void *)arg0) != 0) { - *(s16 *)(arg0 + 0x34) = 1; - ((void (*)(s32, void *))func_8001C214)(*(s32 *)(arg0 + 0x20), &D_80189450); - ((void (*)(void *, void *))func_8012A828)((void *)arg0, &D_80183884); - ((void (*)(void))func_801747AC)(); - p = &D_801270C8; - *p += 1; - if (*p >= 4) { - D_801270CC = 2; - } - } - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins; key lever: §3-T4 branch-polarity invert >=0x30 → OR-block falls through, AND-block is branch target with lui hoisted to delay slot) - -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -void func_8017E2C8(int param_1) -{ - int iVar1; - - ((void (*)(void))func_8012AD80)(); - if (*(int *)(param_1 + 0x1c) >= 0x30) { - *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) = - *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) | 0x80000000; - } else { - *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) = - *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) & 0x7fffffff; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) + 0x17; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 0x43; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 0x58; - iVar1 = func_8012BEE8(param_1); - if (iVar1 != 0) { - ((void (*)(int))func_8012C218)(param_1); - } - return; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E448); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E4F4); - - -extern void (*D_80189458[])(void); - -void func_8017E578(void *a0) { - D_80189458[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E5B4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E630); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E724); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017E8A0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EA68); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EB64); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EC48); - - -extern void (*D_801894B8[])(void); - -void func_8017ED0C(void *a0) { - D_801894B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017ED48); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017ED98(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801894C0[])(void); - -void func_8017EDBC(void *a0) { - D_801894C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EDF8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EE44(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(2); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017EEC0(void) { - func_800D1EBC(); - } - - - -extern void (*D_80189638[])(void); - -void func_8017EEE0(void *a0) { - D_80189638[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EF1C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EF58); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017EFDC); - - -// @class: plumbing -// @stuck: none — MATCH (param_1 survives across func_8016F0E4 → lands in $s0; passed to func_80165770) - -extern void func_8016F0E4(void); -extern void func_80165770(void); -extern void func_80175414(s32); - -void func_8017F14C(s32 param_1) -{ - func_8016F0E4(); - ((void (*)(s32))func_80165770)(param_1); - ((void (*)(void))func_80175414)(); -} - - - -extern void (*D_80189648[])(void); - -void func_8017F184(void *a0) { - D_80189648[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F1C0); - - -// @class: plumbing -// @stuck: none — MATCH (expected); simple call + conditional u8 increment - -extern s32 func_80171B4C(s32 a0, s32 a1); - -void func_8017F204(int param_1) -{ - if (func_80171B4C(param_1, 0x2) != 0) { - *(unsigned char *)(param_1 + 0x214) += 1; - } - return; -} - - -extern void func_8016F0E4(void); - void func_8017F248(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - - -extern void (*D_80189654[])(void); - -void func_8017F268(void *a0) { - D_80189654[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F2A4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F344); - - -extern s32 func_801399F0(s32 a0); -extern void func_80139914(s32 a0); - -void func_8017F3C0(u8 *a0) { - if (func_801399F0(*(s32 *)(a0 + 0x198)) != 0) { - func_80139914(*(s32 *)(a0 + 0x198)); - *(u8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F414); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F458); - - -extern void (*D_80189690[])(void); - -void func_8017F480(void *a0) { - D_80189690[*(u8 *)((s32)a0 + 0x215)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F4BC); - - -extern void (*D_8018A05C[])(void); - -void func_8017F500(void *a0) { - D_8018A05C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F53C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F638); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F710); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F7D0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017F8C0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FB5C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FC04); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FCC0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FCFC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FD64); - -extern void (*D_8018A1F8[])(void); - -void func_8017FF78(void *a0) { - D_8018A1F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8017FFB4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801800F4); - - -extern s32 D_801C7EC0; - -void func_80180174(void) { - D_801C7EC0 = 1; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180188); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801802D8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180320); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801803AC); - - -extern void (*D_8018A20C[])(void); - -void func_80180420(void *a0) { - D_8018A20C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8018045C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180528); - -extern void (*D_8018A214[])(void); - -void func_8018055C(void *a0) { - D_8018A214[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180598); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180654); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180694); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801806DC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180728); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801808B8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801809E4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180D54); - -extern void (*D_8018A22C[])(void); - -void func_80180F30(void *a0) { - D_8018A22C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_8018A240[])(void); - -void func_80180F6C(void *a0) { - D_8018A240[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80180FA8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181040); - -extern void (*D_8018A248[])(void); - -void func_801810A8(void *a0) { - D_8018A248[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801810E4); - -extern void (*D_8018A250[])(void); - -void func_801813D4(void *a0) { - D_8018A250[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181410); - -extern void (*D_8018A258[])(void); - -void func_8018155C(void *a0) { - D_8018A258[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_8018A264[])(void); - -void func_80181598(void *a0) { - D_8018A264[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801815D4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801816E4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181770); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801817CC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181854); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181918); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801819D0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181A70); - -void func_80181B80(void *a0) { - *(short *)((char *)a0 + 0x2) = 1; - } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181B8C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181BB0); - -extern void (*D_8018A26C[])(void); - -void func_80181C68(void *a0) { - D_8018A26C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181CA4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181D98); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181F5C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80181FAC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801820AC); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182290); - - -extern void (*D_8018A2F4[])(void); - -void func_801822D0(void *a0) { - D_8018A2F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8018230C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801824D0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801824FC); - -extern void (*D_8018A32C[])(void); - -void func_80182670(void *a0) { - D_8018A32C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_8018A40C[])(void); - -void func_801826AC(void *a0) { - D_8018A40C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801826E8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801827B4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8018287C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182990); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182A00); - -s32 func_80182A70(void) { - return 0x2; - } - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_80182EF8(u8 *a0); -extern void (*D_8018A454[])(int); - -void func_80182A78(int param_1) -{ - ((void (*)(void))func_80182EF8)(); - D_8018A454[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182AC4); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182B30); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182B90); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182CB8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182EF8); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80182F64); - -extern s32 func_8012AD50(void *a0); - void func_80183034(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80183054); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801831A0); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_801831E8); - -extern void func_80183278(void); - void func_80183258(s32 *a0) { - *(s16 *)((s32)a0 + 0xFE) = 0; - func_80183278(); - } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_80183278); - -extern void (*D_8018A488[])(void); - -void func_801832C0(void *a0) { - D_8018A488[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_801832FC(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_801734BC", func_8018331C); - diff --git a/src/ov_SC01_080/ov_SC01_080_jr_80178D40.c b/src/ov_SC01_080/ov_SC01_080_jr_80178D40.c new file mode 100644 index 000000000..bf3af3e34 --- /dev/null +++ b/src/ov_SC01_080/ov_SC01_080_jr_80178D40.c @@ -0,0 +1,4891 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186740[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C4CF8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186734[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80186778[]; +extern unsigned short D_80186780[]; +extern unsigned short D_80186788[]; +extern unsigned char D_801C4D00[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C4CF8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186790[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C4E34; +extern M2C_UNK D_801C4E38; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C4DC0; +extern void (*D_801867C0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C4E3C[]; +extern u8 D_801C4E44[]; +extern u8 D_801C4DF4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801867C8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801867E4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801867EC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186854[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801867F8; +extern u8 D_80186804; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80186888[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186890[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801868E4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80186918[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80186908[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80186934; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801869AC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801869B4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801869BC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801869C4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801869CC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801869D4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801869E0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801869EC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801869F8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80186A08[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80186A18[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80186A20[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80186A28[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80186A30[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80186A38[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80186A40[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80186A48[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80186A50[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80186A58[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80186A60[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80186A68[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80186A70[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80186A78[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186A80[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80186A88[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186A90[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80186A98[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186AA0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80186AA8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80186AB0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80186AB8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80186AC0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80186AC8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80186B0C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80186AD0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186B3C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80186B78[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80186BD0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186BE0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186BE8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80186D50[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80186D5C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C43E8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C7EDC; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C5578; +extern short D_801C7F4C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C7F4C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C7F4C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C5578 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C7F4C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C7EA8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C7EA8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C7F4C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C7F4C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C59D4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C557C; + extern s32 D_801C5990; + extern s16 D_801C5994; + extern s16 D_801C5998; + extern s16 D_801C599C; + extern s16 D_801C59A0; + extern s32 D_801C59A8; + extern s32 D_801C59AC; + extern s32 D_801C59BC; + extern s16 D_801C59C0; + extern s16 D_801C59C4; + extern s32 D_801C59C8; + extern s32 D_801C59D0; + extern s32 D_801C59D4[10]; + extern s32 D_801C75E8; + extern s16 D_801C7EA8; + extern s32 D_801C7ED8; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C7EA8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C5990); + D_801C5990 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C599C, D_801C59A0 ? 0x48 : 0x40); + (*(s16*)&D_801C7F4C) = 2; + break; + case 0: + func_80179B28(D_801C5990); + D_801C5990 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C5994, D_801C5998 ? 0x48 : 0x40); + (*(s16*)&D_801C7F4C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C75E8 != 0) { + func_80179B28(D_801C5990); + D_801C5990 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C5994, D_801C5998 ? 0x48 : 0x40); + (*(s16*)&D_801C7F4C) = 1; + } else { + (*(s16*)&D_801C7F4C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C5990); + D_801C5990 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C5994, + D_801C5998 ? 0x48 : 0x40); + (*(s16*)&D_801C7F4C) = 1; + break; + case 2: + func_80179B28(D_801C5990); + if (D_801C59A8 != 0) { + D_801C5578 = D_801C59A8; + D_801C59A8 = 0; + (*(s16*)&D_801C7F4C) = 3; + return; + } + (*(s16*)&D_801C7F4C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C7F4C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C7F4C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C7F4C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x1B: + D_801C59C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C7F4C) = 4; + D_801C557C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C7F4C) = 5; + D_801C59BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C59BC = (s32)func_8017A3B0; + (*(s16*)&D_801C7F4C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x24: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C7F4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C7F4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C7F4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7F4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7F4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7F4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C7F4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C59AC); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C59AC); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C59AC); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C59AC); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x4E: + D_801C59D0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C7F4C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C7ED8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x34: + (*(s16*)&D_801C7F4C) = 3; + D_801C5578 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C59A8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C7F4C) = 3; + D_801C5578 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C7F4C) = 3; + D_801C5578 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C5578 = *(s32 *)(D_801C5578 + 4); + return; + case 0x37: + (*(s16*)&D_801C7F4C) = 3; + D_801C5994 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C5998 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C7F4C) = 3; + D_801C599C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C59A0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C7F4C) = 3; + D_801C5994 = w1; + D_801C5998 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C7F4C) = 3; + D_801C599C = w2; + D_801C59A0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x43: + D_801C59BC = (s32)func_8017A3D8; + D_801C59C4 = 0; + (*(s16*)&D_801C7F4C) = 5; + D_801C59C0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7F4C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7F4C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C59D4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C7F4C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C59D4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C7F4C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C59D4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C7F4C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C59D4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C7F4C) = 3; + break; + default: + break; + } +Lend: + D_801C5578 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C59A4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C59A4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C59A4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C59A4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C59CC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C59CC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C5988; + +s32 func_8017A3B0(void) { + switch (D_801C5988) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C59C4; +extern short D_801C59C0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C59C4) { + case 0: + func_800D0CA0(1); + D_801C59C4 = D_801C59C4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C59C0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C59C4 = D_801C59C4 + 1; + if (D_801C59C4 < 0x1E) { + return 0; + } + D_801C59C4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C5A04; + extern s16 D_801C5A06; + extern s16 D_801C5A08; + extern s16 D_801C59FC; + extern s16 D_801C59FE; + extern s16 D_801C5A00; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C5A04, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C5A06, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C5A08, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C59FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C59FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5A00, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C598C; +extern u16 D_801C5A0C; +extern u16 D_801C5A0E; +extern u16 D_801C5A10; +extern s16 D_801C7EDC; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C7EDC = 0; + D_801C598C = 0; + D_801C5A0C = D_80126B5E; + D_801C5A0E = D_80126B62; + D_801C5A10 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186E98[]; + extern s16 D_801C5A04; + extern s16 D_801C59FC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186E98[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186E98[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C5A04; + s16 *p78C = &D_801C59FC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C7EDC = 1; + D_801C598C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C59AC; + extern SV4_8017B368 D_801C59B4; + extern s16 D_801C5A04; + extern s16 D_801C59FC; + extern u16 D_80186E98; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C59AC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C59B4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80186E98)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80186E98)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C5A04) = loc0; + (*(SV4_8017B368 *)&D_801C59FC) = loc1; + D_801C7EDC = 1; + D_801C598C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186E98[]; + extern s16 D_801C5A04; + extern s16 D_801C5A06; + extern s16 D_801C5A08; + extern s16 D_801C59FC; + extern s16 D_801C59FE; + extern s16 D_801C5A00; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186E98[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186E98[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C5A04; + s16 *p78C = &D_801C59FC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C5A06; + v798 = D_801C5A08; + v78C = *p78C; + v78E = D_801C59FE; + v790 = D_801C5A00; + __asm__ __volatile__(""); + D_801C7EDC = 1; + D_801C598C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C598C; +extern s16 D_801C5A04; +extern s16 D_801C5A06; +extern s16 D_801C5A08; +extern s16 D_801C59FC; +extern s16 D_801C59FE; +extern s16 D_801C5A00; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C598C = 0; + D_801C5A04 = (s16) D_80114F30; + D_801C5A06 = (s16) D_80114F34; + D_801C5A08 = (s16) D_80114F38; + D_801C59FC = (s16) D_80114F24; + D_801C59FE = (s16) D_80114F28; + D_801C5A00 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C5A1C; +extern s16 D_801C5A1E; +extern s16 D_801C5A20; +extern s16 D_801C5A24; +extern s16 D_801C5A26; +extern s16 D_801C5A28; + +void func_8017B824(void) { + D_801C5A1C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C5A1E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C5A20 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C5A24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C5A26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C5A28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C5A1C; +extern s16 D_801C5A1E; +extern s16 D_801C5A20; +extern s16 D_801C5A24; +extern s16 D_801C5A26; +extern s16 D_801C5A28; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C5A1C; + D_80114F34 = D_801C5A1E; + D_80114F38 = D_801C5A20; + D_80114F24 = D_801C5A24; + D_80114F28 = D_801C5A26; + D_80114F2C = D_801C5A28; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C5A04), src[8..15] -> (*(S8_8017B8E8 *)&D_801C59FC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C5A04) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C59FC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C5A0C; +extern u16 D_801C5A0E; +extern u16 D_801C5A10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C598C; +extern short D_801C5A14; +extern short D_801C5A16; +extern short D_801C5A18; +extern s16 D_801C5A04; +extern s16 D_801C5A06; +extern s16 D_801C5A08; +extern s16 D_801C59FC; +extern s16 D_801C59FE; +extern s16 D_801C5A00; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C5A0C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C5A0E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C5A10); + (*(s16 *)&D_801C5A14) = buf[0]; + (*(s16 *)&D_801C5A16) = buf[1]; + (*(s16 *)&D_801C5A18) = buf[2]; + D_801C5A04 = D_80114F30 + buf[0]; + D_801C598C = 0; + D_801C5A06 = D_80114F34 + buf[1]; + D_801C5A08 = D_80114F38 + buf[2]; + D_801C59FC = D_80114F24 + buf[0]; + D_801C59FE = D_80114F28 + buf[1]; + D_801C5A00 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C59AC; +extern SV4 D_801C59B4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C59B4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C59AC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C59B4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C59B4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C59AC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C59B4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C59D4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C59D4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C598C; +extern s16 D_801C7EDC; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C598C = D_801C598C + 1; + if (D_801C598C >= 0x1F) { + D_801C7EDC = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C598C; +extern s16 D_801C7EDC; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C598C = D_801C598C + 1; + if (0x18 < D_801C598C) { + func_8012A4BC(); + D_801C7EDC = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C598C; +extern void (*D_801C59D0)(void); +extern short D_801C5A14; +extern short D_801C5A16; +extern short D_801C5A18; +extern s16 D_801C7EDC; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C598C = D_801C598C + 1; + if (D_801C598C >= 0x19) { + if (D_801C59D0 != 0) { + (*D_801C59D0)(); + } else { + D_80114F30 = D_80114F30 + D_801C5A14; + D_80114F34 = D_80114F34 + D_801C5A16; + D_80114F38 = D_80114F38 + D_801C5A18; + D_80114F24 = D_80114F24 + D_801C5A14; + D_80114F28 = D_80114F28 + D_801C5A16; + D_80114F2C = D_80114F2C + D_801C5A18; + func_8012A4BC(); + } + D_801C7EDC = 0; + } +} + + + +extern void (*D_80186F38[])(void); + +void func_8017BE60(void *a0) { + D_80186F38[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017C338); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017C530); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017C59C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017D468); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017D72C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017D93C); + + +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern M2C_UNK D_80183884; +extern M2C_UNK D_801891AC; + +void func_8017DBF4(void *arg0) { + void *temp_v1; + + func_8001C214(M2C_FIELD(arg0, void **, 0x20), &D_801891AC); + func_8012A828(arg0, &D_80183884); + M2C_FIELD(arg0, s16 *, 2) = 3; + M2C_FIELD(arg0, u16 *, 6) = (u16) M2C_FIELD(arg0, u16 *, 0xDC); + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(arg0, u16 *, 0xE) = (u16) M2C_FIELD(arg0, u16 *, 0xDE); + M2C_FIELD(arg0, u16 *, 0x5C) = (u16) (M2C_FIELD(arg0, u16 *, 0x5C) & 0x77FF); + M2C_FIELD(temp_v1, u16 *, 0x2C) = (u16) (M2C_FIELD(temp_v1, u16 *, 0x2C) & 0xFFEF); + M2C_FIELD(arg0, s32 *, 0x1C) = 0; +} + + + +// @class: schedule +// @stuck: none — MATCH (pending byte-gate); pure store sequence, gcc -O2 schedules a0/a1 materialization + +extern void func_8012A828(s32 a0, void *a1); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80174784(void); +extern M2C_UNK D_80183884; + +void func_8017DC78(int param_1) { + unsigned short uVar1; + + func_8012A828(param_1, &D_80183884); + *(short *)(param_1 + 2) = 4; + *(short *)(param_1 + 0x34) = 0; + *(int *)(param_1 + 0x1c) = 0x1e; + uVar1 = *(unsigned short *)(*(int *)(param_1 + 0x20) + 0x12); + *(short *)(param_1 + 0xe8) = 0; + *(int *)(param_1 + 0xe0) = 0x400000; + *(int *)(param_1 + 0xe4) = 0; + *(short *)(param_1 + 0xea) = uVar1; + func_8002D4C8(0x49e, 0); + func_8002D4C8(0x4a2, 0); + func_80174784(); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017DCF8); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold; (unsigned)(field-1)<2 forces sltiu not slti) + +extern void func_8017D72C(); +extern void (*D_80187028[])(); + +void func_8017DE38(int param_1) +{ + if (((unsigned int)(*(unsigned short *)(param_1 + 2) - 1) < 2) && + ((*(unsigned short *)(param_1 + 0x5c) & 1) != 0)) { + func_8017D72C(); + } else { + D_80187028[*(unsigned short *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017DEB0); + + +extern void (*D_80187050[])(void); + +void func_8017E0A4(void *a0) { + D_80187050[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern Blk8 D_80187014; + +void func_8017E0E0(s32 a0) { + if (*(s16 *)((s32)a0 + 0x70) == 4) { + *(Blk8 *)((s32)a0 + 0x50) = D_80187014; + } +} + + + +// @class: struct +// @stuck: none — MATCH; int *p=&D_801270DC + deref for both load AND store forces addiu-base in $s1 (callee-saved), reused via 0x0($s1) — direct global ref re-materializes lui per access +extern void func_8012BD14(s32 a0); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8017DC78(int param_1); + +extern int D_801270DC; +extern s32 D_80126D50; + +void func_8017E124(int param_1) { + int v; + int *p = &D_801270DC; + + if (*p == 0) { + if (((int (*)(int))func_8012BD14)(param_1) < 0x4001) { + v = func_8012E544(0x161); + if (v != 0) { + *(short *)(v + 0xfc) = 1; + *(short *)(v + 0xfe) = 3 - *(short *)(param_1 + 0x70); + } + *p = 1; + *(int *)(param_1 + 0x1c) = 0x1e; + } + } else { + ((void (*)(int))func_8012BEE8)(param_1); + if (*(int *)(param_1 + 0x1c) == 0 && D_80126D50 == 0 && + ((int (*)(int))func_8012BD14)(param_1) < 0x241) { + func_8017DC78(param_1); + } + } +} + + + +// @class: remat +// @stuck: none — MATCH. Key idiom: D_801270C8 read+write via a pointer var (s32 *p = &D_801270C8; *p+=1; *p>=4) forces gcc to materialize the symbol address ONCE (lui+addiu %lo into one reg) and reuse it for both lw and sw, vs two separate %lo-folded lui's from `D_801270C8 += 1`. Also 0x34 field is lhu (u16) not lh. + +extern s32 D_801270C8; +extern s32 D_801270CC; +extern u8 D_80189450; +extern M2C_UNK D_80183884; + +extern void func_8017D468(void *arg0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_801747AC(s32 a0); + +void func_8017E1FC(s32 arg0) { + s32 temp; + s32 *p; + + if (*(u16 *)(arg0 + 0x34) == 0) { + temp = *(s32 *)(arg0 + 0xE4) + *(s32 *)(arg0 + 0xE0); + *(s32 *)(arg0 + 0xE8) = *(s32 *)(arg0 + 0xE8) + temp; + *(s32 *)(arg0 + 0xE4) = temp; + *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) = *(s16 *)(arg0 + 0xEA); + func_8017D468((void *)arg0); + if (((s32 (*)(void *))func_8012BEE8)((void *)arg0) != 0) { + *(s16 *)(arg0 + 0x34) = 1; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)(arg0 + 0x20), &D_80189450); + ((void (*)(void *, void *))func_8012A828)((void *)arg0, &D_80183884); + ((void (*)(void))func_801747AC)(); + p = &D_801270C8; + *p += 1; + if (*p >= 4) { + D_801270CC = 2; + } + } + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins; key lever: §3-T4 branch-polarity invert >=0x30 → OR-block falls through, AND-block is branch target with lui hoisted to delay slot) + +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +void func_8017E2C8(int param_1) +{ + int iVar1; + + ((void (*)(void))func_8012AD80)(); + if (*(int *)(param_1 + 0x1c) >= 0x30) { + *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) = + *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) | 0x80000000; + } else { + *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) = + *(unsigned int *)(*(int *)(param_1 + 0x20) + 4) & 0x7fffffff; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) + 0x17; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 0x43; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 0x58; + iVar1 = func_8012BEE8(param_1); + if (iVar1 != 0) { + ((void (*)(int))func_8012C218)(param_1); + } + return; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E448); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E4F4); + + +extern void (*D_80189458[])(void); + +void func_8017E578(void *a0) { + D_80189458[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E5B4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E630); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E724); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017E8A0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EA68); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EB64); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EC48); + + +extern void (*D_801894B8[])(void); + +void func_8017ED0C(void *a0) { + D_801894B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017ED48); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017ED98(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801894C0[])(void); + +void func_8017EDBC(void *a0) { + D_801894C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EDF8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EE44(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(2); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017EEC0(void) { + func_800D1EBC(); + } + + + +extern void (*D_80189638[])(void); + +void func_8017EEE0(void *a0) { + D_80189638[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EF1C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EF58); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017EFDC); + + +// @class: plumbing +// @stuck: none — MATCH (param_1 survives across func_8016F0E4 → lands in $s0; passed to func_80165770) + +extern void func_8016F0E4(void); +extern void func_80165770(void); +extern void func_80175414(s32); + +void func_8017F14C(s32 param_1) +{ + func_8016F0E4(); + ((void (*)(s32))func_80165770)(param_1); + ((void (*)(void))func_80175414)(); +} + + + +extern void (*D_80189648[])(void); + +void func_8017F184(void *a0) { + D_80189648[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F1C0); + + +// @class: plumbing +// @stuck: none — MATCH (expected); simple call + conditional u8 increment + +extern s32 func_80171B4C(s32 a0, s32 a1); + +void func_8017F204(int param_1) +{ + if (func_80171B4C(param_1, 0x2) != 0) { + *(unsigned char *)(param_1 + 0x214) += 1; + } + return; +} + + +extern void func_8016F0E4(void); + void func_8017F248(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + + +extern void (*D_80189654[])(void); + +void func_8017F268(void *a0) { + D_80189654[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F2A4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F344); + + +extern s32 func_801399F0(s32 a0); +extern void func_80139914(s32 a0); + +void func_8017F3C0(u8 *a0) { + if (func_801399F0(*(s32 *)(a0 + 0x198)) != 0) { + func_80139914(*(s32 *)(a0 + 0x198)); + *(u8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F414); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F458); + + +extern void (*D_80189690[])(void); + +void func_8017F480(void *a0) { + D_80189690[*(u8 *)((s32)a0 + 0x215)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F4BC); + + +extern void (*D_8018A05C[])(void); + +void func_8017F500(void *a0) { + D_8018A05C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F53C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F638); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F710); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F7D0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017F8C0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FB5C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FC04); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FCC0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FCFC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FD64); + +extern void (*D_8018A1F8[])(void); + +void func_8017FF78(void *a0) { + D_8018A1F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8017FFB4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801800F4); + + +extern s32 D_801C7EC0; + +void func_80180174(void) { + D_801C7EC0 = 1; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180188); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801802D8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180320); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801803AC); + + +extern void (*D_8018A20C[])(void); + +void func_80180420(void *a0) { + D_8018A20C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8018045C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180528); + +extern void (*D_8018A214[])(void); + +void func_8018055C(void *a0) { + D_8018A214[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180598); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180654); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180694); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801806DC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180728); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801808B8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801809E4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180D54); + +extern void (*D_8018A22C[])(void); + +void func_80180F30(void *a0) { + D_8018A22C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_8018A240[])(void); + +void func_80180F6C(void *a0) { + D_8018A240[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80180FA8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181040); + +extern void (*D_8018A248[])(void); + +void func_801810A8(void *a0) { + D_8018A248[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801810E4); + +extern void (*D_8018A250[])(void); + +void func_801813D4(void *a0) { + D_8018A250[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181410); + +extern void (*D_8018A258[])(void); + +void func_8018155C(void *a0) { + D_8018A258[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_8018A264[])(void); + +void func_80181598(void *a0) { + D_8018A264[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801815D4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801816E4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181770); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801817CC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181854); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181918); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801819D0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181A70); + +void func_80181B80(void *a0) { + *(short *)((char *)a0 + 0x2) = 1; + } + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181B8C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181BB0); + +extern void (*D_8018A26C[])(void); + +void func_80181C68(void *a0) { + D_8018A26C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181CA4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181D98); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181F5C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80181FAC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801820AC); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182290); + + +extern void (*D_8018A2F4[])(void); + +void func_801822D0(void *a0) { + D_8018A2F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8018230C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801824D0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801824FC); + +extern void (*D_8018A32C[])(void); + +void func_80182670(void *a0) { + D_8018A32C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_8018A40C[])(void); + +void func_801826AC(void *a0) { + D_8018A40C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801826E8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801827B4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8018287C); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182990); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182A00); + +s32 func_80182A70(void) { + return 0x2; + } + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_80182EF8(u8 *a0); +extern void (*D_8018A454[])(int); + +void func_80182A78(int param_1) +{ + ((void (*)(void))func_80182EF8)(); + D_8018A454[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182AC4); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182B30); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182B90); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182CB8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182EF8); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80182F64); + +extern s32 func_8012AD50(void *a0); + void func_80183034(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80183054); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801831A0); + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_801831E8); + +extern void func_80183278(void); + void func_80183258(s32 *a0) { + *(s16 *)((s32)a0 + 0xFE) = 0; + func_80183278(); + } + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_80183278); + +extern void (*D_8018A488[])(void); + +void func_801832C0(void *a0) { + D_8018A488[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_801832FC(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_80178D40", func_8018331C); + + diff --git a/src/ov_SC01_084/ov_SC01_084_jr_801734BC.c b/src/ov_SC01_084/ov_SC01_084_jr_801734BC.c index 7645bd9b8..f184d60e0 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_801734BC.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_801734BC.c @@ -3105,1529 +3105,3 @@ void func_80178D18(void) { D_801C7BF4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C744C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C744C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C744C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C744C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C7474; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C7474 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C7430; - -s32 func_8017A3B0(void) { - switch (D_801C7430) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C746C; -extern short D_801C7468; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C746C) { - case 0: - func_800D0CA0(1); - D_801C746C = D_801C746C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C7468; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C746C = D_801C746C + 1; - if (D_801C746C < 0x1E) { - return 0; - } - D_801C746C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C74AC; - extern s16 D_801C74AE; - extern s16 D_801C74B0; - extern s16 D_801C74A4; - extern s16 D_801C74A6; - extern s16 D_801C74A8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C74AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C74AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C74B0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C74A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C74A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C74A8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C7434; -extern u16 D_801C74B4; -extern u16 D_801C74B6; -extern u16 D_801C74B8; -extern s16 D_801C7AB8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C7AB8 = 0; - D_801C7434 = 0; - D_801C74B4 = D_80126B5E; - D_801C74B6 = D_80126B62; - D_801C74B8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A18C[]; - extern s16 D_801C74AC; - extern s16 D_801C74A4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A18C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A18C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C74AC; - s16 *p78C = &D_801C74A4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C7AB8 = 1; - D_801C7434 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C7454; - extern SV4_8017B368 D_801C745C; - extern s16 D_801C74AC; - extern s16 D_801C74A4; - extern u16 D_8018A18C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C7454; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C745C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A18C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A18C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C74AC) = loc0; - (*(SV4_8017B368 *)&D_801C74A4) = loc1; - D_801C7AB8 = 1; - D_801C7434 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A18C[]; - extern s16 D_801C74AC; - extern s16 D_801C74AE; - extern s16 D_801C74B0; - extern s16 D_801C74A4; - extern s16 D_801C74A6; - extern s16 D_801C74A8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A18C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A18C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C74AC; - s16 *p78C = &D_801C74A4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C74AE; - v798 = D_801C74B0; - v78C = *p78C; - v78E = D_801C74A6; - v790 = D_801C74A8; - __asm__ __volatile__(""); - D_801C7AB8 = 1; - D_801C7434 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017B7A8); - - - -extern s32 D_801151D4; -extern s16 D_801C74C4; -extern s16 D_801C74C6; -extern s16 D_801C74C8; -extern s16 D_801C74CC; -extern s16 D_801C74CE; -extern s16 D_801C74D0; - -void func_8017B824(void) { - D_801C74C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C74C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C74C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C74CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C74CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C74D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C74C4; -extern s16 D_801C74C6; -extern s16 D_801C74C8; -extern s16 D_801C74CC; -extern s16 D_801C74CE; -extern s16 D_801C74D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C74C4; - D_80114F34 = D_801C74C6; - D_80114F38 = D_801C74C8; - D_80114F24 = D_801C74CC; - D_80114F28 = D_801C74CE; - D_80114F2C = D_801C74D0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C74AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801C74A4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - extern s16 D_801C74AC; - extern s16 D_801C74A4; - - (*(S8_8017B8E8 *)&D_801C74AC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C74A4) = ((S8_8017B8E8 *)src)[1]; -} - - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017B940); - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C7454; -extern SV4 D_801C745C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C745C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C7454 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C745C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C745C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C7454) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C745C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C747C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C747C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C7434; -extern s16 D_801C7AB8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C7434 = D_801C7434 + 1; - if (D_801C7434 >= 0x1F) { - D_801C7AB8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C7434; -extern s16 D_801C7AB8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C7434 = D_801C7434 + 1; - if (0x18 < D_801C7434) { - func_8012A4BC(); - D_801C7AB8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C7434; -extern void (*D_801C7478)(void); -extern short D_801C74BC; -extern short D_801C74BE; -extern short D_801C74C0; -extern s16 D_801C7AB8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C7434 = D_801C7434 + 1; - if (D_801C7434 >= 0x19) { - if (D_801C7478 != 0) { - (*D_801C7478)(); - } else { - D_80114F30 = D_80114F30 + D_801C74BC; - D_80114F34 = D_80114F34 + D_801C74BE; - D_80114F38 = D_80114F38 + D_801C74C0; - D_80114F24 = D_80114F24 + D_801C74BC; - D_80114F28 = D_80114F28 + D_801C74BE; - D_80114F2C = D_80114F2C + D_801C74C0; - func_8012A4BC(); - } - D_801C7AB8 = 0; - } -} - - - -extern void (*D_8018A22C[])(void); - -void func_8017BE60(void *a0) { - D_8018A22C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018A264[])(void); - -void func_8017BEF8(void *a0) { - D_8018A264[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C218); - - -extern void (*D_8018A278[])(void); - -void func_8017C524(void *a0) { - D_8018A278[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C770); - - -extern void (*D_8018A28C[])(void); - -void func_8017C7C4(void *a0) { - D_8018A28C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DA00); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DAF8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DB44); - -extern s8 D_8012694C; -extern s32 D_8012695C; -extern s16 D_80126968; -extern s16 D_80126976; -extern s16 D_8012697A; - -void func_8017DBA0(void) { - D_8012694C = 4; - D_8012695C = 0x258; - D_80126968 = -0xE3; - D_80126976 = 0; - D_8012697A = 0; -} - - -extern s32 D_8012695C; - extern s8 D_8012694C; - extern s16 D_80126968; - void func_8017DBDC(void) { - D_8012695C = 0x320; - D_8012694C = 0; - D_80126968 = 0x60; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DC04); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DCAC); - - -extern void (*D_8018A294[])(void); - -void func_8017DD2C(void *a0) { - D_8018A294[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DD68); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DDFC); - -void func_8017DE24(s32 *a0) { - *(s32 *)((s32)a0 + 0x3C) = 0x140; - *(s32 *)((s32)a0 + 0x40) = -0x880; - *(s32 *)((s32)a0 + 0x44) = -0x140; - *(s32 *)((s32)a0 + 0x48) = 0; - *(s32 *)((s32)a0 + 0x4C) = -0x440; - *(s32 *)((s32)a0 + 0x50) = 0; - } - - -void func_8017DE50(s32 *a0) { - *(s32 *)((s32)a0 + 0x3c) = 0x409; - *(s32 *)((s32)a0 + 0x40) = -0x840; - *(s32 *)((s32)a0 + 0x44) = 0x1df; - *(s32 *)((s32)a0 + 0x48) = 0x129; - *(s32 *)((s32)a0 + 0x4c) = -0x592; - *(s32 *)((s32)a0 + 0x50) = 0x36; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DE84); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017DECC); - - -extern void (*D_8018A2F8[])(void); - -void func_8017E0C0(void *a0) { - D_8018A2F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E0FC); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E14C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018A300[])(void); - -void func_8017E170(void *a0) { - D_8018A300[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E1AC); - -s32 func_8017E21C(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E224); - -extern void func_800D1EBC(void); - void func_8017E270(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018A47C[])(void); - -void func_8017E290(void *a0) { - D_8018A47C[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E2CC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E334); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E384); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E4E4); - - -extern void (*D_8018A48C[])(void); - -void func_8017E524(void *a0) { - D_8018A48C[*(u8 *)((s32)a0 + 0x214)](); -} - - -extern void func_80175454(void); - void func_8017E560(u8 *a0) { - u8 *p = a0; - func_80175454(); - *(u8 *)(p + 0x214) += 1; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E598); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E608); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E6A8); - -void func_8017E704(void) { -} - -extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); - extern s32 func_8017E734(void *a0); - void func_8017E70C(void) { - ((void (*)(s32, s32))func_8016EDEC)((s32)&func_8017E734, 0x5000000); - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E734); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E770); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E7C0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E834); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E890); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017E94C); - - -extern s32 func_801399F0(s32 a0); -extern void func_80139914(s32 a0); - -void func_8017E9F8(u8 *a0) { - if (func_801399F0(*(s32 *)(a0 + 0x198)) != 0) { - func_80139914(*(s32 *)(a0 + 0x198)); - *(u8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017EA4C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017EA98); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017ED5C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017EDBC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017EEF4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017EF28); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F198); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F218); - -extern void func_8017484C(s32 a0); - void func_8017F26C(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - *(s16 *)((s32)a0 + 0x5c) = 0; - ((void (*)(void))func_8017484C)(); - } - - - -extern void (*D_8018A798[])(void); - -void func_8017F294(void *a0) { - D_8018A798[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F2D0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F308); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F378); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F474); - -extern s32 func_8012BEE8(s32 arg); - extern void func_8017F26C(s32 *a0); - void func_8017F520(s32 *a0) { - if (func_8012BEE8((s32)a0)) { - func_8017F26C(a0); - } - } - - -void func_8017F558(void) { -} - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F560); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F5E4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F690); - - -extern void (*D_8018A8A0[])(void); - -void func_8017F768(void *a0) { - D_8018A8A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F7A4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F83C); - - -extern void (*D_8018A8E4[])(void); - -void func_8017F87C(void *a0) { - D_8018A8E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F8B8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017F9F4); - -extern void (*D_8018A8EC[])(void); - -void func_8017FBD4(void *a0) { - D_8018A8EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FC10); - -void func_8017FD24(void) { -} - - -extern void (*D_8018A8F4[])(void); - -void func_8017FD2C(void *a0) { - D_8018A8F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FD68); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FDB0); - -extern void (*D_8018A8FC[])(void); - -void func_8017FDE0(void *a0) { - D_8018A8FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FE1C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FE64); - - -extern void (*D_8018A904[])(void); - -void func_8017FF2C(void *a0) { - D_8018A904[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8017FF68); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", listCdBuffer); - -extern void (*D_8018A90C[])(void); - -void func_801801BC(void *a0) { - D_8018A90C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801801F8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018028C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180300); - -extern void (*D_8018A990[])(void); - -void func_80180614(void *a0) { - D_8018A990[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180650); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180720); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018072C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801807D8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801809C4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180CBC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180D38); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80180E74); - -extern s16 D_8018A91A; - -void func_801812F4(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 4; - *(s16 *)&D_8018A91A = -1; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181310); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801814E8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801818E0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181920); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181978); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801819D0); - - -extern void (*D_8018AA50[])(void); - -void func_80181A40(void *a0) { - D_8018AA50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181A7C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181DEC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181ED4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181F3C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80181F80); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801822A4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182328); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801826C4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182A00); - - -// @class: plumbing -// @stuck: none — MATCH (30 ins) - -extern unsigned char D_801A2400[]; - -extern void func_8012A828(s32 a0, void *a1); -extern void func_8012B23C(s32 a0); -extern void func_80143CD4(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern int func_800CB0E8(int param); - -void func_80182D3C(int param_1) -{ - *(short *)(param_1 + 2) = 12; - ((int (*)(int, void *))func_8012A828)(param_1, &D_801A2400); - ((int (*)(int))func_8012B23C)(param_1); - *(int *)(param_1 + 0x1c) = 0x78; - ((int (*)(int))func_80143CD4)(param_1); - ((int (*)(int, int))func_8002D4C8)(0x47b, 0); - ((int (*)(int, int))func_8002D4C8)(0x478, 0); - func_800CB0E8(param_1); - *(char *)(param_1 + 0xc1) = 6; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182DB4); - -void func_80182DF8(void *a0) { - *(short *)((char *)a0 + 0x2) = 0xB; - *(short *)((char *)a0 + 0x5C) = 0; - *(int *)((char *)a0 + 0x1C) = 0x1E; - *(short *)((char *)a0 + 0x98) = 0; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182E14); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182F90); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80182FEC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183068); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183244); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801834B8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018353C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183630); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183790); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801838F0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018392C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183A7C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183BD0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183D38); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80183DA4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184090); - - -extern void (*D_8018AC10[])(void); - -void func_801840FC(void *a0) { - D_8018AC10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184138); - - -extern void (*D_8018AC2C[])(void); - -void func_80184424(void *a0) { - D_8018AC2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184460); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801845A0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801845EC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801846B4); - -extern void (*D_8018AC38[])(void); - -void func_801847F8(void *a0) { - D_8018AC38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184834); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184908); - -extern s32 func_8012BEE8(s32); - extern void func_80180CBC(s32); - void func_801849A0(s32 arg0) { - if (func_8012BEE8(arg0)) { - func_80180CBC(arg0); - } - } - - -void func_801849D8(void *a0) { - M2C_FIELD(a0, s16 *, 0xA) = -0x4BD; - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801849E4); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184AD0); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184B10); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184B80); - - -// @class: plumbing -// @stuck: none — MATCH expected (single call-crossing local pins to $s0 naturally; lhu via unsigned short) - -extern s32 func_8012B8E4(s32 arg0, s32 arg1); -extern s32 func_8012BEE8(s32 a0); -extern void func_801819D0(s32 a0); - -void func_80184C90(int param_1) -{ - int v; - unsigned short *p; - - v = func_8012B8E4(param_1, 4); - p = (unsigned short *)(*(int *)(param_1 + 0x20) + 0x12); - *p = (unsigned short)(*p + v); - if (func_8012BEE8(param_1) != 0) { - func_801819D0(param_1); - } -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184CE8); - -void func_80184D88(void) { -} - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184D90); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184E28); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184EEC); - -extern void func_8012E364(void); - void func_80184F6C(void) { - func_8012E364(); - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80184F8C); - - -// @class: plumbing -// @stuck: none — MATCH expected (clean structural stub) - -extern s32 func_8012BEE8(s32 a0); -extern void func_8012A828(s32 a0, void *a1); -extern unsigned char D_801A24C8; - -void func_80184FC4(int param_1) -{ - ((void (*)(void))func_8012BEE8)(); - if (*(int *)(param_1 + 0x1c) == 1) { - func_8012A828(param_1, &D_801A24C8); - } - return; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018500C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185080); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185150); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801851EC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018528C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185348); - -void func_801853C4(void) { -} - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801853CC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018544C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185528); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801855EC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801856D8); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801857BC); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185834); - -extern void func_800183E0(s32 a0); - extern s32 D_801C4854; - void func_80185904(void) { - ((void (*)(void *))func_800183E0)(&D_801C4854); - } - - - -extern void (*D_8018AC44[])(void); - -void func_8018592C(void *a0) { - D_8018AC44[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s32 a1); - extern s32 func_8012AD50(void *a0); - void func_80185968(s32 arg0) { - ((void (*)(s32, s32))func_8012BF4C)(arg0, 0); - ((void (*)(void *))func_8012AD50)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_8018599C); - - -extern void (*D_8018AC50[])(void); - -void func_80185AF8(void *a0) { - D_8018AC50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185B34); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185B78); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185C0C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185E38); - - -extern s32 D_801C7728; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80185E68(s32 a0, s32 a1) { - D_801C7728 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_80185E98); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801860DC); - -extern void (*D_8018ACBC[])(void); - -void func_8018637C(void *a0) { - D_8018ACBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_801734BC", func_801863B8); - - -extern void (*D_801A2D9C[])(void); - -void func_80186530(void *a0) { - D_801A2D9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A2DB0[])(void); - -void func_8018656C(void *a0) { - D_801A2DB0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801A2D88; -extern s32 D_801A2D94; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_801865A8(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801A2D88); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801A2D94, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801A2DA4; - -void func_80186688(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801A2DA4); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801A3058; - -void func_801867A4(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801A3058); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - diff --git a/src/ov_SC01_084/ov_SC01_084_jr_80178D40.c b/src/ov_SC01_084/ov_SC01_084_jr_80178D40.c new file mode 100644 index 000000000..d2195ffa5 --- /dev/null +++ b/src/ov_SC01_084/ov_SC01_084_jr_80178D40.c @@ -0,0 +1,4997 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80189A34[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C67A0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80189A28[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80189A6C[]; +extern unsigned short D_80189A74[]; +extern unsigned short D_80189A7C[]; +extern unsigned char D_801C67A8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C67A0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189A84[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C68DC; +extern M2C_UNK D_801C68E0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C6868; +extern void (*D_80189AB4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C68E4[]; +extern u8 D_801C68EC[]; +extern u8 D_801C689C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189ABC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189AD8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189AE0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189B48[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189AEC; +extern u8 D_80189AF8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80189B7C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189B84[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189BD8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189C0C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189BFC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80189C28; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80189CA0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189CA8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80189CB0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189CB8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189CC0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189CC8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189CD4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189CE0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189CEC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189CFC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189D0C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189D14[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189D1C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189D24[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189D2C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189D34[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189D3C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189D44[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189D4C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189D54[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80189D5C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189D64[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80189D6C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189D74[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80189D7C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189D84[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80189D8C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189D94[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80189D9C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189DA4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80189DAC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189DB4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189DBC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189E00[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189DC4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189E30[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80189E6C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189EC4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189ED4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189EDC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018A044[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018A050[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C5DB8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C7AB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C7020; +extern short D_801C7BF4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C7BF4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C7BF4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C7020 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C7BF4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C7808 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C7808 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C7BF4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C7BF4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C747C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C7024; + extern s32 D_801C7438; + extern s16 D_801C743C; + extern s16 D_801C7440; + extern s16 D_801C7444; + extern s16 D_801C7448; + extern s32 D_801C7450; + extern s32 D_801C7454; + extern s32 D_801C7464; + extern s16 D_801C7468; + extern s16 D_801C746C; + extern s32 D_801C7470; + extern s32 D_801C7478; + extern s32 D_801C747C[10]; + extern s32 D_801C7740; + extern s16 D_801C7808; + extern s32 D_801C7AB4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C7808; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C7438); + D_801C7438 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C7444, D_801C7448 ? 0x48 : 0x40); + (*(s16*)&D_801C7BF4) = 2; + break; + case 0: + func_80179B28(D_801C7438); + D_801C7438 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C743C, D_801C7440 ? 0x48 : 0x40); + (*(s16*)&D_801C7BF4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C7740 != 0) { + func_80179B28(D_801C7438); + D_801C7438 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C743C, D_801C7440 ? 0x48 : 0x40); + (*(s16*)&D_801C7BF4) = 1; + } else { + (*(s16*)&D_801C7BF4) = 3; + } + break; + case 0x32: + func_80179B28(D_801C7438); + D_801C7438 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C743C, + D_801C7440 ? 0x48 : 0x40); + (*(s16*)&D_801C7BF4) = 1; + break; + case 2: + func_80179B28(D_801C7438); + if (D_801C7450 != 0) { + D_801C7020 = D_801C7450; + D_801C7450 = 0; + (*(s16*)&D_801C7BF4) = 3; + return; + } + (*(s16*)&D_801C7BF4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C7BF4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C7BF4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C7BF4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x1B: + D_801C7470 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C7BF4) = 4; + D_801C7024 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C7BF4) = 5; + D_801C7464 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C7464 = (s32)func_8017A3B0; + (*(s16*)&D_801C7BF4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x24: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C7BF4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C7BF4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C7BF4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7BF4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7BF4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C7BF4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C7BF4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C7454); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C7454); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C7454); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C7454); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x4E: + D_801C7478 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x2B: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C7BF4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C7AB4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x34: + (*(s16*)&D_801C7BF4) = 3; + D_801C7020 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C7450 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C7BF4) = 3; + D_801C7020 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C7BF4) = 3; + D_801C7020 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C7020 = *(s32 *)(D_801C7020 + 4); + return; + case 0x37: + (*(s16*)&D_801C7BF4) = 3; + D_801C743C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C7440 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C7BF4) = 3; + D_801C7444 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C7448 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C7BF4) = 3; + D_801C743C = w1; + D_801C7440 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C7BF4) = 3; + D_801C7444 = w2; + D_801C7448 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x43: + D_801C7464 = (s32)func_8017A3D8; + D_801C746C = 0; + (*(s16*)&D_801C7BF4) = 5; + D_801C7468 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C7BF4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C7BF4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C747C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C7BF4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C747C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C7BF4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C747C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C7BF4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C747C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C7BF4) = 3; + break; + default: + break; + } +Lend: + D_801C7020 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C744C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C744C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C744C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C744C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C7474; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C7474 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C7430; + +s32 func_8017A3B0(void) { + switch (D_801C7430) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C746C; +extern short D_801C7468; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C746C) { + case 0: + func_800D0CA0(1); + D_801C746C = D_801C746C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C7468; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C746C = D_801C746C + 1; + if (D_801C746C < 0x1E) { + return 0; + } + D_801C746C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C74AC; + extern s16 D_801C74AE; + extern s16 D_801C74B0; + extern s16 D_801C74A4; + extern s16 D_801C74A6; + extern s16 D_801C74A8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C74AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C74AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C74B0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C74A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C74A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C74A8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C7434; +extern u16 D_801C74B4; +extern u16 D_801C74B6; +extern u16 D_801C74B8; +extern s16 D_801C7AB8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C7AB8 = 0; + D_801C7434 = 0; + D_801C74B4 = D_80126B5E; + D_801C74B6 = D_80126B62; + D_801C74B8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A18C[]; + extern s16 D_801C74AC; + extern s16 D_801C74A4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A18C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A18C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C74AC; + s16 *p78C = &D_801C74A4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C7AB8 = 1; + D_801C7434 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C7454; + extern SV4_8017B368 D_801C745C; + extern s16 D_801C74AC; + extern s16 D_801C74A4; + extern u16 D_8018A18C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C7454; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C745C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A18C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A18C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C74AC) = loc0; + (*(SV4_8017B368 *)&D_801C74A4) = loc1; + D_801C7AB8 = 1; + D_801C7434 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A18C[]; + extern s16 D_801C74AC; + extern s16 D_801C74AE; + extern s16 D_801C74B0; + extern s16 D_801C74A4; + extern s16 D_801C74A6; + extern s16 D_801C74A8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A18C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A18C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C74AC; + s16 *p78C = &D_801C74A4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C74AE; + v798 = D_801C74B0; + v78C = *p78C; + v78E = D_801C74A6; + v790 = D_801C74A8; + __asm__ __volatile__(""); + D_801C7AB8 = 1; + D_801C7434 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017B7A8); + + + +extern s32 D_801151D4; +extern s16 D_801C74C4; +extern s16 D_801C74C6; +extern s16 D_801C74C8; +extern s16 D_801C74CC; +extern s16 D_801C74CE; +extern s16 D_801C74D0; + +void func_8017B824(void) { + D_801C74C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C74C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C74C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C74CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C74CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C74D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C74C4; +extern s16 D_801C74C6; +extern s16 D_801C74C8; +extern s16 D_801C74CC; +extern s16 D_801C74CE; +extern s16 D_801C74D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C74C4; + D_80114F34 = D_801C74C6; + D_80114F38 = D_801C74C8; + D_80114F24 = D_801C74CC; + D_80114F28 = D_801C74CE; + D_80114F2C = D_801C74D0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C74AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801C74A4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + extern s16 D_801C74AC; + extern s16 D_801C74A4; + + (*(S8_8017B8E8 *)&D_801C74AC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C74A4) = ((S8_8017B8E8 *)src)[1]; +} + + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017B940); + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C7454; +extern SV4 D_801C745C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C745C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C7454 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C745C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C745C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C7454) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C745C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C747C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C747C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C7434; +extern s16 D_801C7AB8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C7434 = D_801C7434 + 1; + if (D_801C7434 >= 0x1F) { + D_801C7AB8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C7434; +extern s16 D_801C7AB8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C7434 = D_801C7434 + 1; + if (0x18 < D_801C7434) { + func_8012A4BC(); + D_801C7AB8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C7434; +extern void (*D_801C7478)(void); +extern short D_801C74BC; +extern short D_801C74BE; +extern short D_801C74C0; +extern s16 D_801C7AB8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C7434 = D_801C7434 + 1; + if (D_801C7434 >= 0x19) { + if (D_801C7478 != 0) { + (*D_801C7478)(); + } else { + D_80114F30 = D_80114F30 + D_801C74BC; + D_80114F34 = D_80114F34 + D_801C74BE; + D_80114F38 = D_80114F38 + D_801C74C0; + D_80114F24 = D_80114F24 + D_801C74BC; + D_80114F28 = D_80114F28 + D_801C74BE; + D_80114F2C = D_80114F2C + D_801C74C0; + func_8012A4BC(); + } + D_801C7AB8 = 0; + } +} + + + +extern void (*D_8018A22C[])(void); + +void func_8017BE60(void *a0) { + D_8018A22C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018A264[])(void); + +void func_8017BEF8(void *a0) { + D_8018A264[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C218); + + +extern void (*D_8018A278[])(void); + +void func_8017C524(void *a0) { + D_8018A278[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C770); + + +extern void (*D_8018A28C[])(void); + +void func_8017C7C4(void *a0) { + D_8018A28C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DA00); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DAF8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DB44); + +extern s8 D_8012694C; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_80126976; +extern s16 D_8012697A; + +void func_8017DBA0(void) { + D_8012694C = 4; + D_8012695C = 0x258; + D_80126968 = -0xE3; + D_80126976 = 0; + D_8012697A = 0; +} + + +extern s32 D_8012695C; + extern s8 D_8012694C; + extern s16 D_80126968; + void func_8017DBDC(void) { + D_8012695C = 0x320; + D_8012694C = 0; + D_80126968 = 0x60; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DC04); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DCAC); + + +extern void (*D_8018A294[])(void); + +void func_8017DD2C(void *a0) { + D_8018A294[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DD68); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DDFC); + +void func_8017DE24(s32 *a0) { + *(s32 *)((s32)a0 + 0x3C) = 0x140; + *(s32 *)((s32)a0 + 0x40) = -0x880; + *(s32 *)((s32)a0 + 0x44) = -0x140; + *(s32 *)((s32)a0 + 0x48) = 0; + *(s32 *)((s32)a0 + 0x4C) = -0x440; + *(s32 *)((s32)a0 + 0x50) = 0; + } + + +void func_8017DE50(s32 *a0) { + *(s32 *)((s32)a0 + 0x3c) = 0x409; + *(s32 *)((s32)a0 + 0x40) = -0x840; + *(s32 *)((s32)a0 + 0x44) = 0x1df; + *(s32 *)((s32)a0 + 0x48) = 0x129; + *(s32 *)((s32)a0 + 0x4c) = -0x592; + *(s32 *)((s32)a0 + 0x50) = 0x36; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DE84); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017DECC); + + +extern void (*D_8018A2F8[])(void); + +void func_8017E0C0(void *a0) { + D_8018A2F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E0FC); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E14C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018A300[])(void); + +void func_8017E170(void *a0) { + D_8018A300[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E1AC); + +s32 func_8017E21C(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E224); + +extern void func_800D1EBC(void); + void func_8017E270(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018A47C[])(void); + +void func_8017E290(void *a0) { + D_8018A47C[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E2CC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E334); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E384); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E4E4); + + +extern void (*D_8018A48C[])(void); + +void func_8017E524(void *a0) { + D_8018A48C[*(u8 *)((s32)a0 + 0x214)](); +} + + +extern void func_80175454(void); + void func_8017E560(u8 *a0) { + u8 *p = a0; + func_80175454(); + *(u8 *)(p + 0x214) += 1; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E598); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E608); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E6A8); + +void func_8017E704(void) { +} + +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); + extern s32 func_8017E734(void *a0); + void func_8017E70C(void) { + ((void (*)(s32, s32))func_8016EDEC)((s32)&func_8017E734, 0x5000000); + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E734); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E770); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E7C0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E834); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E890); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017E94C); + + +extern s32 func_801399F0(s32 a0); +extern void func_80139914(s32 a0); + +void func_8017E9F8(u8 *a0) { + if (func_801399F0(*(s32 *)(a0 + 0x198)) != 0) { + func_80139914(*(s32 *)(a0 + 0x198)); + *(u8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017EA4C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017EA98); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017ED5C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017EDBC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017EEF4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017EF28); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F198); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F218); + +extern void func_8017484C(s32 a0); + void func_8017F26C(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + *(s16 *)((s32)a0 + 0x5c) = 0; + ((void (*)(void))func_8017484C)(); + } + + + +extern void (*D_8018A798[])(void); + +void func_8017F294(void *a0) { + D_8018A798[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F2D0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F308); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F378); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F474); + +extern s32 func_8012BEE8(s32 arg); + extern void func_8017F26C(s32 *a0); + void func_8017F520(s32 *a0) { + if (func_8012BEE8((s32)a0)) { + func_8017F26C(a0); + } + } + + +void func_8017F558(void) { +} + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F560); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F5E4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F690); + + +extern void (*D_8018A8A0[])(void); + +void func_8017F768(void *a0) { + D_8018A8A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F7A4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F83C); + + +extern void (*D_8018A8E4[])(void); + +void func_8017F87C(void *a0) { + D_8018A8E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F8B8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017F9F4); + +extern void (*D_8018A8EC[])(void); + +void func_8017FBD4(void *a0) { + D_8018A8EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FC10); + +void func_8017FD24(void) { +} + + +extern void (*D_8018A8F4[])(void); + +void func_8017FD2C(void *a0) { + D_8018A8F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FD68); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FDB0); + +extern void (*D_8018A8FC[])(void); + +void func_8017FDE0(void *a0) { + D_8018A8FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FE1C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FE64); + + +extern void (*D_8018A904[])(void); + +void func_8017FF2C(void *a0) { + D_8018A904[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8017FF68); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", listCdBuffer); + +extern void (*D_8018A90C[])(void); + +void func_801801BC(void *a0) { + D_8018A90C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801801F8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018028C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180300); + +extern void (*D_8018A990[])(void); + +void func_80180614(void *a0) { + D_8018A990[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180650); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180720); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018072C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801807D8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801809C4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180CBC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180D38); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80180E74); + +extern s16 D_8018A91A; + +void func_801812F4(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 4; + *(s16 *)&D_8018A91A = -1; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181310); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801814E8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801818E0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181920); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181978); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801819D0); + + +extern void (*D_8018AA50[])(void); + +void func_80181A40(void *a0) { + D_8018AA50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181A7C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181DEC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181ED4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181F3C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80181F80); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801822A4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182328); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801826C4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182A00); + + +// @class: plumbing +// @stuck: none — MATCH (30 ins) + +extern unsigned char D_801A2400[]; + +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012B23C(s32 a0); +extern void func_80143CD4(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern int func_800CB0E8(int param); + +void func_80182D3C(int param_1) +{ + *(short *)(param_1 + 2) = 12; + ((int (*)(int, void *))func_8012A828)(param_1, &D_801A2400); + ((int (*)(int))func_8012B23C)(param_1); + *(int *)(param_1 + 0x1c) = 0x78; + ((int (*)(int))func_80143CD4)(param_1); + ((int (*)(int, int))func_8002D4C8)(0x47b, 0); + ((int (*)(int, int))func_8002D4C8)(0x478, 0); + func_800CB0E8(param_1); + *(char *)(param_1 + 0xc1) = 6; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182DB4); + +void func_80182DF8(void *a0) { + *(short *)((char *)a0 + 0x2) = 0xB; + *(short *)((char *)a0 + 0x5C) = 0; + *(int *)((char *)a0 + 0x1C) = 0x1E; + *(short *)((char *)a0 + 0x98) = 0; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182E14); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182F90); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80182FEC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183068); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183244); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801834B8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018353C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183630); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183790); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801838F0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018392C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183A7C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183BD0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183D38); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80183DA4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184090); + + +extern void (*D_8018AC10[])(void); + +void func_801840FC(void *a0) { + D_8018AC10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184138); + + +extern void (*D_8018AC2C[])(void); + +void func_80184424(void *a0) { + D_8018AC2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184460); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801845A0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801845EC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801846B4); + +extern void (*D_8018AC38[])(void); + +void func_801847F8(void *a0) { + D_8018AC38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184834); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184908); + +extern s32 func_8012BEE8(s32); + extern void func_80180CBC(s32); + void func_801849A0(s32 arg0) { + if (func_8012BEE8(arg0)) { + func_80180CBC(arg0); + } + } + + +void func_801849D8(void *a0) { + M2C_FIELD(a0, s16 *, 0xA) = -0x4BD; + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801849E4); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184AD0); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184B10); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184B80); + + +// @class: plumbing +// @stuck: none — MATCH expected (single call-crossing local pins to $s0 naturally; lhu via unsigned short) + +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BEE8(s32 a0); +extern void func_801819D0(s32 a0); + +void func_80184C90(int param_1) +{ + int v; + unsigned short *p; + + v = func_8012B8E4(param_1, 4); + p = (unsigned short *)(*(int *)(param_1 + 0x20) + 0x12); + *p = (unsigned short)(*p + v); + if (func_8012BEE8(param_1) != 0) { + func_801819D0(param_1); + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184CE8); + +void func_80184D88(void) { +} + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184D90); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184E28); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184EEC); + +extern void func_8012E364(void); + void func_80184F6C(void) { + func_8012E364(); + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80184F8C); + + +// @class: plumbing +// @stuck: none — MATCH expected (clean structural stub) + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012A828(s32 a0, void *a1); +extern unsigned char D_801A24C8; + +void func_80184FC4(int param_1) +{ + ((void (*)(void))func_8012BEE8)(); + if (*(int *)(param_1 + 0x1c) == 1) { + func_8012A828(param_1, &D_801A24C8); + } + return; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018500C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185080); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185150); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801851EC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018528C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185348); + +void func_801853C4(void) { +} + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801853CC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018544C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185528); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801855EC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801856D8); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801857BC); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185834); + +extern void func_800183E0(s32 a0); + extern s32 D_801C4854; + void func_80185904(void) { + ((void (*)(void *))func_800183E0)(&D_801C4854); + } + + + +extern void (*D_8018AC44[])(void); + +void func_8018592C(void *a0) { + D_8018AC44[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s32 a1); + extern s32 func_8012AD50(void *a0); + void func_80185968(s32 arg0) { + ((void (*)(s32, s32))func_8012BF4C)(arg0, 0); + ((void (*)(void *))func_8012AD50)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_8018599C); + + +extern void (*D_8018AC50[])(void); + +void func_80185AF8(void *a0) { + D_8018AC50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185B34); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185B78); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185C0C); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185E38); + + +extern s32 D_801C7728; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80185E68(s32 a0, s32 a1) { + D_801C7728 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_80185E98); + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801860DC); + +extern void (*D_8018ACBC[])(void); + +void func_8018637C(void *a0) { + D_8018ACBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_80178D40", func_801863B8); + + +extern void (*D_801A2D9C[])(void); + +void func_80186530(void *a0) { + D_801A2D9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A2DB0[])(void); + +void func_8018656C(void *a0) { + D_801A2DB0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801A2D88; +extern s32 D_801A2D94; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_801865A8(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801A2D88); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801A2D94, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801A2DA4; + +void func_80186688(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801A2DA4); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801A3058; + +void func_801867A4(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801A3058); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + + diff --git a/src/ov_SC02_000/ov_SC02_000_jr_801734BC.c b/src/ov_SC02_000/ov_SC02_000_jr_801734BC.c index eb910169e..706979f09 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_801734BC.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_801734BC.c @@ -3102,962 +3102,3 @@ void func_80178D18(void) { D_801E8864 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E7F7C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E7F7C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E7F7C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E7F7C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E7FA4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E7FA4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E7F60; - -s32 func_8017A3B0(void) { - switch (D_801E7F60) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E7F9C; -extern short D_801E7F98; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E7F9C) { - case 0: - func_800D0CA0(1); - D_801E7F9C = D_801E7F9C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E7F98; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E7F9C = D_801E7F9C + 1; - if (D_801E7F9C < 0x1E) { - return 0; - } - D_801E7F9C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E7FDC; - extern s16 D_801E7FDE; - extern s16 D_801E7FE0; - extern s16 D_801E7FD4; - extern s16 D_801E7FD6; - extern s16 D_801E7FD8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E7FDC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E7FDE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E7FE0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E7FD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E7FD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E7FD8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E7F64; -extern u16 D_801E7FE4; -extern u16 D_801E7FE6; -extern u16 D_801E7FE8; -extern s16 D_801E87BC; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E87BC = 0; - D_801E7F64 = 0; - D_801E7FE4 = D_80126B5E; - D_801E7FE6 = D_80126B62; - D_801E7FE8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E53C[]; - extern s16 D_801E7FDC; - extern s16 D_801E7FD4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E7FDC; - s16 *p78C = &D_801E7FD4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E87BC = 1; - D_801E7F64 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E7F84; - extern SV4_8017B368 D_801E7F8C; - extern s16 D_801E7FDC; - extern s16 D_801E7FD4; - extern u16 D_8018E53C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E7F84; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E7F8C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E7FDC) = loc0; - (*(SV4_8017B368 *)&D_801E7FD4) = loc1; - D_801E87BC = 1; - D_801E7F64 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E53C[]; - extern s16 D_801E7FDC; - extern s16 D_801E7FDE; - extern s16 D_801E7FE0; - extern s16 D_801E7FD4; - extern s16 D_801E7FD6; - extern s16 D_801E7FD8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E7FDC; - s16 *p78C = &D_801E7FD4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E7FDE; - v798 = D_801E7FE0; - v78C = *p78C; - v78E = D_801E7FD6; - v790 = D_801E7FD8; - __asm__ __volatile__(""); - D_801E87BC = 1; - D_801E7F64 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E7F64; -extern s16 D_801E7FDC; -extern s16 D_801E7FDE; -extern s16 D_801E7FE0; -extern s16 D_801E7FD4; -extern s16 D_801E7FD6; -extern s16 D_801E7FD8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E7F64 = 0; - D_801E7FDC = (s16) D_80114F30; - D_801E7FDE = (s16) D_80114F34; - D_801E7FE0 = (s16) D_80114F38; - D_801E7FD4 = (s16) D_80114F24; - D_801E7FD6 = (s16) D_80114F28; - D_801E7FD8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E7FF4; -extern s16 D_801E7FF6; -extern s16 D_801E7FF8; -extern s16 D_801E7FFC; -extern s16 D_801E7FFE; -extern s16 D_801E8000; - -void func_8017B824(void) { - D_801E7FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E7FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E7FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E7FFC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E7FFE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E8000 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E7FF4; -extern s16 D_801E7FF6; -extern s16 D_801E7FF8; -extern s16 D_801E7FFC; -extern s16 D_801E7FFE; -extern s16 D_801E8000; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E7FF4; - D_80114F34 = D_801E7FF6; - D_80114F38 = D_801E7FF8; - D_80114F24 = D_801E7FFC; - D_80114F28 = D_801E7FFE; - D_80114F2C = D_801E8000; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E7FDC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E7FD4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E7FDC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E7FD4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E7FE4; -extern u16 D_801E7FE6; -extern u16 D_801E7FE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E7F64; -extern short D_801E7FEC; -extern short D_801E7FEE; -extern short D_801E7FF0; -extern s16 D_801E7FDC; -extern s16 D_801E7FDE; -extern s16 D_801E7FE0; -extern s16 D_801E7FD4; -extern s16 D_801E7FD6; -extern s16 D_801E7FD8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E7FE4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E7FE6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E7FE8); - (*(s16 *)&D_801E7FEC) = buf[0]; - (*(s16 *)&D_801E7FEE) = buf[1]; - (*(s16 *)&D_801E7FF0) = buf[2]; - D_801E7FDC = D_80114F30 + buf[0]; - D_801E7F64 = 0; - D_801E7FDE = D_80114F34 + buf[1]; - D_801E7FE0 = D_80114F38 + buf[2]; - D_801E7FD4 = D_80114F24 + buf[0]; - D_801E7FD6 = D_80114F28 + buf[1]; - D_801E7FD8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E7F84; -extern SV4 D_801E7F8C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E7F8C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E7F84 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E7F8C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E7F8C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E7F84) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E7F8C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E7FAC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E7FAC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E7F64; -extern s16 D_801E87BC; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E7F64 = D_801E7F64 + 1; - if (D_801E7F64 >= 0x1F) { - D_801E87BC = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E7F64; -extern s16 D_801E87BC; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E7F64 = D_801E7F64 + 1; - if (0x18 < D_801E7F64) { - func_8012A4BC(); - D_801E87BC = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E7F64; -extern void (*D_801E7FA8)(void); -extern short D_801E7FEC; -extern short D_801E7FEE; -extern short D_801E7FF0; -extern s16 D_801E87BC; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E7F64 = D_801E7F64 + 1; - if (D_801E7F64 >= 0x19) { - if (D_801E7FA8 != 0) { - (*D_801E7FA8)(); - } else { - D_80114F30 = D_80114F30 + D_801E7FEC; - D_80114F34 = D_80114F34 + D_801E7FEE; - D_80114F38 = D_80114F38 + D_801E7FF0; - D_80114F24 = D_80114F24 + D_801E7FEC; - D_80114F28 = D_80114F28 + D_801E7FEE; - D_80114F2C = D_80114F2C + D_801E7FF0; - func_8012A4BC(); - } - D_801E87BC = 0; - } -} - - - -extern void (*D_8018E5DC[])(void); - -void func_8017BE60(void *a0) { - D_8018E5DC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018E614[])(void); - -void func_8017BEF8(void *a0) { - D_8018E614[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C218); - - -extern void (*D_8018E628[])(void); - -void func_8017C524(void *a0) { - D_8018E628[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C770); - - -extern void (*D_8018E63C[])(void); - -void func_8017C7C4(void *a0) { - D_8018E63C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017C910); - - -extern void (*D_8018E65C[])(void); - -void func_8017CA80(void *a0) { - D_8018E65C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017CABC); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017CC80); - - -extern void (*D_8018E664[])(void); - -void func_8017CD14(void *a0) { - D_8018E664[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018E650; - -void func_8017CD50(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018E650, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017CE58); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017D230); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017D2D4); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017D538); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017E404); - - -// @class: struct -// @stuck: none — MATCH expected (modeled on byte-proven DEFINE_func_8012E504 idiom: D_801202A0 base, 0x6480 end, 0x10C stride for-loop) - -extern u8 D_801202A0[]; -extern s32 func_8017E404(s32 a0, s32 a1); -extern s32 func_8012AE00(s32 a0); - -void func_8017E51C(s32 a0) { - s32 p; - s32 end; - s32 v; - v = *(u16 *)a0; - p = (s32)D_801202A0; - end = (s32)D_801202A0 + 0x6480; - for (; p != end; p += 0x10C) { - if (p != a0) { - if (*(u16 *)p == v) { - if (func_8017E404(a0, p) != 0) { - break; - } - } - } - } - ((void (*)(s32))func_8012AE00)(p); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017E5AC); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017E6D8); - - -extern s16 D_8018E6CC; -extern s16 D_8018E6D0; -extern u16 D_80126B5E; -extern s32 func_80013478(s32 a0, s32 a1); -extern s32 ratan2(s32, s32); -s32 func_8017E958(s32 param_1, s32 param_2) { - s32 local_20[2] = {0x3c100, 0x51000}; - s32 iVar1; - s32 iVar2; - if ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18 == 4) { - iVar1 = ((s32 (*)(s32, void *))func_80013478)(param_1 + 4, &D_8018E6CC); - if (param_2 == 1) { - iVar2 = ratan2((s32)*(s16 *)(param_1 + 0xe) - (s32)D_8018E6D0, - (s32)D_8018E6CC - (s32)*(s16 *)(param_1 + 6)); - if ((((u32)iVar2 - 0x400U) & 0xfff) - 0x381 < 0xff && 0x2df < (*(s16 *)&D_80126B5E) && - 0x3c100 < iVar1) { return 1; } - } - if (local_20[param_2] < iVar1 && *(s32 *)(param_1 + 0xe8) < iVar1) { - *(s32 *)(param_1 + 0xe8) = iVar1; return 1; - } - *(s32 *)(param_1 + 0xe8) = iVar1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017EA84); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017F390); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple param-survives-call store sequence - -extern void func_8012A828(s32 a0, void *a1); -extern char D_801A668C[]; - -void func_8017F5A0(int param_1) -{ - *(short *)(param_1 + 2) = 2; - *(short *)(param_1 + 0x34) = 0; - func_8012A828(param_1, &D_801A668C); - *(int *)(param_1 + 0x1c) = 0x14; -} - - - -// @class: plumbing -// @stuck: none — MATCH expected; param_1 survives call in $s0 naturally (single global allocno) - -extern void func_8012A828(s32 a0, void *a1); -extern s32 D_801A72C4; - -void func_8017F5E4(s32 param_1) { - *(s16 *)(param_1 + 2) = 2; - *(s16 *)(param_1 + 0x34) = 3; - func_8012A828(param_1, &D_801A72C4); - *(s32 *)(param_1 + 0x1c) = 0x1e; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017F950); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_801734BC", func_8017FB24); - -DEFINE_func_8017FC9C() /* dedup: shared engine-core @0x8017FC9C (src/shared) */ - diff --git a/src/ov_SC02_000/ov_SC02_000_jr_80178D40.c b/src/ov_SC02_000/ov_SC02_000_jr_80178D40.c new file mode 100644 index 000000000..4c832e429 --- /dev/null +++ b/src/ov_SC02_000/ov_SC02_000_jr_80178D40.c @@ -0,0 +1,4427 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018DDE4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E72D0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018DDD8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018DE1C[]; +extern unsigned short D_8018DE24[]; +extern unsigned short D_8018DE2C[]; +extern unsigned char D_801E72D8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E72D0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018DE34[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E740C; +extern M2C_UNK D_801E7410; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E7398; +extern void (*D_8018DE64[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E7414[]; +extern u8 D_801E741C[]; +extern u8 D_801E73CC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018DE6C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018DE88[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018DE90[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEF8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DE9C; +extern u8 D_8018DEA8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018DF2C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018DF34[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018DF88[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018DFBC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018DFAC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018DFD8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E050[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E058[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E060[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E068[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E070[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E078[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E084[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E090[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E09C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E0AC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E0BC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E0C4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E0CC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E0D4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E0DC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E0E4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E0EC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E0F4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E0FC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E104[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E10C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E114[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E11C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E124[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E12C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E134[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E13C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E144[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E14C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E154[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E15C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E164[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E16C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E1B0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E174; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E1E0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E21C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E274[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E284[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E28C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018E3F4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018E400[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E660C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E87BC; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E7B50; +extern short D_801E8864; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E8864) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E8864)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E7B50 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E8864) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E8758 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E8758 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E8864) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E8864) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E7FAC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E7B54; + extern s32 D_801E7F68; + extern s16 D_801E7F6C; + extern s16 D_801E7F70; + extern s16 D_801E7F74; + extern s16 D_801E7F78; + extern s32 D_801E7F80; + extern s32 D_801E7F84; + extern s32 D_801E7F94; + extern s16 D_801E7F98; + extern s16 D_801E7F9C; + extern s32 D_801E7FA0; + extern s32 D_801E7FA8; + extern s32 D_801E7FAC[10]; + extern s32 D_801E8680; + extern s16 D_801E8758; + extern s32 D_801E87B8; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E8758; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E7F74, D_801E7F78 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 2; + break; + case 0: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E7F6C, D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E8680 != 0) { + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E7F6C, D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + } else { + (*(s16*)&D_801E8864) = 3; + } + break; + case 0x32: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E7F6C, + D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + break; + case 2: + func_80179B28(D_801E7F68); + if (D_801E7F80 != 0) { + D_801E7B50 = D_801E7F80; + D_801E7F80 = 0; + (*(s16*)&D_801E8864) = 3; + return; + } + (*(s16*)&D_801E8864) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E8864) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1B: + D_801E7FA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E8864) = 4; + D_801E7B54 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E8864) = 5; + D_801E7F94 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E7F94 = (s32)func_8017A3B0; + (*(s16*)&D_801E8864) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x24: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E8864) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E8864) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E8864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4E: + D_801E7FA8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x2B: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E87B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x34: + (*(s16*)&D_801E8864) = 3; + D_801E7B50 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E7F80 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E8864) = 3; + D_801E7B50 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E8864) = 3; + D_801E7B50 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E7B50 = *(s32 *)(D_801E7B50 + 4); + return; + case 0x37: + (*(s16*)&D_801E8864) = 3; + D_801E7F6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E7F70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E8864) = 3; + D_801E7F74 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E7F78 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E8864) = 3; + D_801E7F6C = w1; + D_801E7F70 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E8864) = 3; + D_801E7F74 = w2; + D_801E7F78 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x43: + D_801E7F94 = (s32)func_8017A3D8; + D_801E7F9C = 0; + (*(s16*)&D_801E8864) = 5; + D_801E7F98 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E7FAC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E8864) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E7FAC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E8864) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E7FAC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E8864) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E7FAC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E8864) = 3; + break; + default: + break; + } +Lend: + D_801E7B50 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E7F7C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E7F7C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E7F7C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E7F7C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E7FA4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E7FA4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E7F60; + +s32 func_8017A3B0(void) { + switch (D_801E7F60) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E7F9C; +extern short D_801E7F98; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E7F9C) { + case 0: + func_800D0CA0(1); + D_801E7F9C = D_801E7F9C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E7F98; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E7F9C = D_801E7F9C + 1; + if (D_801E7F9C < 0x1E) { + return 0; + } + D_801E7F9C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E7FDC; + extern s16 D_801E7FDE; + extern s16 D_801E7FE0; + extern s16 D_801E7FD4; + extern s16 D_801E7FD6; + extern s16 D_801E7FD8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E7FDC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E7FDE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E7FE0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E7FD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E7FD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E7FD8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E7F64; +extern u16 D_801E7FE4; +extern u16 D_801E7FE6; +extern u16 D_801E7FE8; +extern s16 D_801E87BC; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E87BC = 0; + D_801E7F64 = 0; + D_801E7FE4 = D_80126B5E; + D_801E7FE6 = D_80126B62; + D_801E7FE8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E53C[]; + extern s16 D_801E7FDC; + extern s16 D_801E7FD4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E7FDC; + s16 *p78C = &D_801E7FD4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E87BC = 1; + D_801E7F64 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E7F84; + extern SV4_8017B368 D_801E7F8C; + extern s16 D_801E7FDC; + extern s16 D_801E7FD4; + extern u16 D_8018E53C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E7F84; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E7F8C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E7FDC) = loc0; + (*(SV4_8017B368 *)&D_801E7FD4) = loc1; + D_801E87BC = 1; + D_801E7F64 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E53C[]; + extern s16 D_801E7FDC; + extern s16 D_801E7FDE; + extern s16 D_801E7FE0; + extern s16 D_801E7FD4; + extern s16 D_801E7FD6; + extern s16 D_801E7FD8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E7FDC; + s16 *p78C = &D_801E7FD4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E7FDE; + v798 = D_801E7FE0; + v78C = *p78C; + v78E = D_801E7FD6; + v790 = D_801E7FD8; + __asm__ __volatile__(""); + D_801E87BC = 1; + D_801E7F64 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E7F64; +extern s16 D_801E7FDC; +extern s16 D_801E7FDE; +extern s16 D_801E7FE0; +extern s16 D_801E7FD4; +extern s16 D_801E7FD6; +extern s16 D_801E7FD8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E7F64 = 0; + D_801E7FDC = (s16) D_80114F30; + D_801E7FDE = (s16) D_80114F34; + D_801E7FE0 = (s16) D_80114F38; + D_801E7FD4 = (s16) D_80114F24; + D_801E7FD6 = (s16) D_80114F28; + D_801E7FD8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E7FF4; +extern s16 D_801E7FF6; +extern s16 D_801E7FF8; +extern s16 D_801E7FFC; +extern s16 D_801E7FFE; +extern s16 D_801E8000; + +void func_8017B824(void) { + D_801E7FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E7FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E7FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E7FFC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E7FFE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E8000 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E7FF4; +extern s16 D_801E7FF6; +extern s16 D_801E7FF8; +extern s16 D_801E7FFC; +extern s16 D_801E7FFE; +extern s16 D_801E8000; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E7FF4; + D_80114F34 = D_801E7FF6; + D_80114F38 = D_801E7FF8; + D_80114F24 = D_801E7FFC; + D_80114F28 = D_801E7FFE; + D_80114F2C = D_801E8000; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E7FDC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E7FD4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E7FDC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E7FD4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E7FE4; +extern u16 D_801E7FE6; +extern u16 D_801E7FE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E7F64; +extern short D_801E7FEC; +extern short D_801E7FEE; +extern short D_801E7FF0; +extern s16 D_801E7FDC; +extern s16 D_801E7FDE; +extern s16 D_801E7FE0; +extern s16 D_801E7FD4; +extern s16 D_801E7FD6; +extern s16 D_801E7FD8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E7FE4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E7FE6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E7FE8); + (*(s16 *)&D_801E7FEC) = buf[0]; + (*(s16 *)&D_801E7FEE) = buf[1]; + (*(s16 *)&D_801E7FF0) = buf[2]; + D_801E7FDC = D_80114F30 + buf[0]; + D_801E7F64 = 0; + D_801E7FDE = D_80114F34 + buf[1]; + D_801E7FE0 = D_80114F38 + buf[2]; + D_801E7FD4 = D_80114F24 + buf[0]; + D_801E7FD6 = D_80114F28 + buf[1]; + D_801E7FD8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E7F84; +extern SV4 D_801E7F8C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E7F8C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E7F84 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E7F8C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E7F8C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E7F84) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E7F8C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E7FAC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E7FAC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E7F64; +extern s16 D_801E87BC; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E7F64 = D_801E7F64 + 1; + if (D_801E7F64 >= 0x1F) { + D_801E87BC = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E7F64; +extern s16 D_801E87BC; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E7F64 = D_801E7F64 + 1; + if (0x18 < D_801E7F64) { + func_8012A4BC(); + D_801E87BC = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E7F64; +extern void (*D_801E7FA8)(void); +extern short D_801E7FEC; +extern short D_801E7FEE; +extern short D_801E7FF0; +extern s16 D_801E87BC; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E7F64 = D_801E7F64 + 1; + if (D_801E7F64 >= 0x19) { + if (D_801E7FA8 != 0) { + (*D_801E7FA8)(); + } else { + D_80114F30 = D_80114F30 + D_801E7FEC; + D_80114F34 = D_80114F34 + D_801E7FEE; + D_80114F38 = D_80114F38 + D_801E7FF0; + D_80114F24 = D_80114F24 + D_801E7FEC; + D_80114F28 = D_80114F28 + D_801E7FEE; + D_80114F2C = D_80114F2C + D_801E7FF0; + func_8012A4BC(); + } + D_801E87BC = 0; + } +} + + + +extern void (*D_8018E5DC[])(void); + +void func_8017BE60(void *a0) { + D_8018E5DC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018E614[])(void); + +void func_8017BEF8(void *a0) { + D_8018E614[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C218); + + +extern void (*D_8018E628[])(void); + +void func_8017C524(void *a0) { + D_8018E628[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C770); + + +extern void (*D_8018E63C[])(void); + +void func_8017C7C4(void *a0) { + D_8018E63C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017C910); + + +extern void (*D_8018E65C[])(void); + +void func_8017CA80(void *a0) { + D_8018E65C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017CABC); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017CC80); + + +extern void (*D_8018E664[])(void); + +void func_8017CD14(void *a0) { + D_8018E664[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018E650; + +void func_8017CD50(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018E650, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017CE58); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017D230); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017D2D4); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017D538); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017E404); + + +// @class: struct +// @stuck: none — MATCH expected (modeled on byte-proven DEFINE_func_8012E504 idiom: D_801202A0 base, 0x6480 end, 0x10C stride for-loop) + +extern u8 D_801202A0[]; +extern s32 func_8017E404(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); + +void func_8017E51C(s32 a0) { + s32 p; + s32 end; + s32 v; + v = *(u16 *)a0; + p = (s32)D_801202A0; + end = (s32)D_801202A0 + 0x6480; + for (; p != end; p += 0x10C) { + if (p != a0) { + if (*(u16 *)p == v) { + if (func_8017E404(a0, p) != 0) { + break; + } + } + } + } + ((void (*)(s32))func_8012AE00)(p); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017E5AC); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017E6D8); + + +extern s16 D_8018E6CC; +extern s16 D_8018E6D0; +extern u16 D_80126B5E; +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 ratan2(s32, s32); +s32 func_8017E958(s32 param_1, s32 param_2) { + s32 local_20[2] = {0x3c100, 0x51000}; + s32 iVar1; + s32 iVar2; + if ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18 == 4) { + iVar1 = ((s32 (*)(s32, void *))func_80013478)(param_1 + 4, &D_8018E6CC); + if (param_2 == 1) { + iVar2 = ratan2((s32)*(s16 *)(param_1 + 0xe) - (s32)D_8018E6D0, + (s32)D_8018E6CC - (s32)*(s16 *)(param_1 + 6)); + if ((((u32)iVar2 - 0x400U) & 0xfff) - 0x381 < 0xff && 0x2df < (*(s16 *)&D_80126B5E) && + 0x3c100 < iVar1) { return 1; } + } + if (local_20[param_2] < iVar1 && *(s32 *)(param_1 + 0xe8) < iVar1) { + *(s32 *)(param_1 + 0xe8) = iVar1; return 1; + } + *(s32 *)(param_1 + 0xe8) = iVar1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017EA84); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017F390); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple param-survives-call store sequence + +extern void func_8012A828(s32 a0, void *a1); +extern char D_801A668C[]; + +void func_8017F5A0(int param_1) +{ + *(short *)(param_1 + 2) = 2; + *(short *)(param_1 + 0x34) = 0; + func_8012A828(param_1, &D_801A668C); + *(int *)(param_1 + 0x1c) = 0x14; +} + + + +// @class: plumbing +// @stuck: none — MATCH expected; param_1 survives call in $s0 naturally (single global allocno) + +extern void func_8012A828(s32 a0, void *a1); +extern s32 D_801A72C4; + +void func_8017F5E4(s32 param_1) { + *(s16 *)(param_1 + 2) = 2; + *(s16 *)(param_1 + 0x34) = 3; + func_8012A828(param_1, &D_801A72C4); + *(s32 *)(param_1 + 0x1c) = 0x1e; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017F950); + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_80178D40", func_8017FB24); + +DEFINE_func_8017FC9C() /* dedup: shared engine-core @0x8017FC9C (src/shared) */ + + diff --git a/src/ov_SC02_003/ov_SC02_003_jr_801734BC.c b/src/ov_SC02_003/ov_SC02_003_jr_801734BC.c index e970e41f5..cbb8d7c34 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_801734BC.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_801734BC.c @@ -3102,962 +3102,3 @@ void func_80178D18(void) { D_801E8864 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E7F7C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E7F7C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E7F7C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E7F7C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E7FA4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E7FA4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E7F60; - -s32 func_8017A3B0(void) { - switch (D_801E7F60) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E7F9C; -extern short D_801E7F98; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E7F9C) { - case 0: - func_800D0CA0(1); - D_801E7F9C = D_801E7F9C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E7F98; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E7F9C = D_801E7F9C + 1; - if (D_801E7F9C < 0x1E) { - return 0; - } - D_801E7F9C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E7FDC; - extern s16 D_801E7FDE; - extern s16 D_801E7FE0; - extern s16 D_801E7FD4; - extern s16 D_801E7FD6; - extern s16 D_801E7FD8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E7FDC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E7FDE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E7FE0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E7FD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E7FD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E7FD8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E7F64; -extern u16 D_801E7FE4; -extern u16 D_801E7FE6; -extern u16 D_801E7FE8; -extern s16 D_801E87BC; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E87BC = 0; - D_801E7F64 = 0; - D_801E7FE4 = D_80126B5E; - D_801E7FE6 = D_80126B62; - D_801E7FE8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E53C[]; - extern s16 D_801E7FDC; - extern s16 D_801E7FD4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E7FDC; - s16 *p78C = &D_801E7FD4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E87BC = 1; - D_801E7F64 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E7F84; - extern SV4_8017B368 D_801E7F8C; - extern s16 D_801E7FDC; - extern s16 D_801E7FD4; - extern u16 D_8018E53C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E7F84; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E7F8C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E7FDC) = loc0; - (*(SV4_8017B368 *)&D_801E7FD4) = loc1; - D_801E87BC = 1; - D_801E7F64 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E53C[]; - extern s16 D_801E7FDC; - extern s16 D_801E7FDE; - extern s16 D_801E7FE0; - extern s16 D_801E7FD4; - extern s16 D_801E7FD6; - extern s16 D_801E7FD8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E7FDC; - s16 *p78C = &D_801E7FD4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E7FDE; - v798 = D_801E7FE0; - v78C = *p78C; - v78E = D_801E7FD6; - v790 = D_801E7FD8; - __asm__ __volatile__(""); - D_801E87BC = 1; - D_801E7F64 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E7F64; -extern s16 D_801E7FDC; -extern s16 D_801E7FDE; -extern s16 D_801E7FE0; -extern s16 D_801E7FD4; -extern s16 D_801E7FD6; -extern s16 D_801E7FD8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E7F64 = 0; - D_801E7FDC = (s16) D_80114F30; - D_801E7FDE = (s16) D_80114F34; - D_801E7FE0 = (s16) D_80114F38; - D_801E7FD4 = (s16) D_80114F24; - D_801E7FD6 = (s16) D_80114F28; - D_801E7FD8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E7FF4; -extern s16 D_801E7FF6; -extern s16 D_801E7FF8; -extern s16 D_801E7FFC; -extern s16 D_801E7FFE; -extern s16 D_801E8000; - -void func_8017B824(void) { - D_801E7FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E7FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E7FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E7FFC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E7FFE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E8000 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E7FF4; -extern s16 D_801E7FF6; -extern s16 D_801E7FF8; -extern s16 D_801E7FFC; -extern s16 D_801E7FFE; -extern s16 D_801E8000; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E7FF4; - D_80114F34 = D_801E7FF6; - D_80114F38 = D_801E7FF8; - D_80114F24 = D_801E7FFC; - D_80114F28 = D_801E7FFE; - D_80114F2C = D_801E8000; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E7FDC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E7FD4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E7FDC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E7FD4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E7FE4; -extern u16 D_801E7FE6; -extern u16 D_801E7FE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E7F64; -extern short D_801E7FEC; -extern short D_801E7FEE; -extern short D_801E7FF0; -extern s16 D_801E7FDC; -extern s16 D_801E7FDE; -extern s16 D_801E7FE0; -extern s16 D_801E7FD4; -extern s16 D_801E7FD6; -extern s16 D_801E7FD8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E7FE4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E7FE6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E7FE8); - (*(s16 *)&D_801E7FEC) = buf[0]; - (*(s16 *)&D_801E7FEE) = buf[1]; - (*(s16 *)&D_801E7FF0) = buf[2]; - D_801E7FDC = D_80114F30 + buf[0]; - D_801E7F64 = 0; - D_801E7FDE = D_80114F34 + buf[1]; - D_801E7FE0 = D_80114F38 + buf[2]; - D_801E7FD4 = D_80114F24 + buf[0]; - D_801E7FD6 = D_80114F28 + buf[1]; - D_801E7FD8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E7F84; -extern SV4 D_801E7F8C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E7F8C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E7F84 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E7F8C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E7F8C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E7F84) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E7F8C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E7FAC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E7FAC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E7F64; -extern s16 D_801E87BC; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E7F64 = D_801E7F64 + 1; - if (D_801E7F64 >= 0x1F) { - D_801E87BC = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E7F64; -extern s16 D_801E87BC; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E7F64 = D_801E7F64 + 1; - if (0x18 < D_801E7F64) { - func_8012A4BC(); - D_801E87BC = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E7F64; -extern void (*D_801E7FA8)(void); -extern short D_801E7FEC; -extern short D_801E7FEE; -extern short D_801E7FF0; -extern s16 D_801E87BC; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E7F64 = D_801E7F64 + 1; - if (D_801E7F64 >= 0x19) { - if (D_801E7FA8 != 0) { - (*D_801E7FA8)(); - } else { - D_80114F30 = D_80114F30 + D_801E7FEC; - D_80114F34 = D_80114F34 + D_801E7FEE; - D_80114F38 = D_80114F38 + D_801E7FF0; - D_80114F24 = D_80114F24 + D_801E7FEC; - D_80114F28 = D_80114F28 + D_801E7FEE; - D_80114F2C = D_80114F2C + D_801E7FF0; - func_8012A4BC(); - } - D_801E87BC = 0; - } -} - - - -extern void (*D_8018E5DC[])(void); - -void func_8017BE60(void *a0) { - D_8018E5DC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018E614[])(void); - -void func_8017BEF8(void *a0) { - D_8018E614[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C218); - - -extern void (*D_8018E628[])(void); - -void func_8017C524(void *a0) { - D_8018E628[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C770); - - -extern void (*D_8018E63C[])(void); - -void func_8017C7C4(void *a0) { - D_8018E63C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017C910); - - -extern void (*D_8018E65C[])(void); - -void func_8017CA80(void *a0) { - D_8018E65C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017CABC); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017CC80); - - -extern void (*D_8018E664[])(void); - -void func_8017CD14(void *a0) { - D_8018E664[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018E650; - -void func_8017CD50(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018E650, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017CE58); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017D230); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017D2D4); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017D538); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017E404); - - -// @class: struct -// @stuck: none — MATCH expected (modeled on byte-proven DEFINE_func_8012E504 idiom: D_801202A0 base, 0x6480 end, 0x10C stride for-loop) - -extern u8 D_801202A0[]; -extern s32 func_8017E404(s32 a0, s32 a1); -extern s32 func_8012AE00(s32 a0); - -void func_8017E51C(s32 a0) { - s32 p; - s32 end; - s32 v; - v = *(u16 *)a0; - p = (s32)D_801202A0; - end = (s32)D_801202A0 + 0x6480; - for (; p != end; p += 0x10C) { - if (p != a0) { - if (*(u16 *)p == v) { - if (func_8017E404(a0, p) != 0) { - break; - } - } - } - } - ((void (*)(s32))func_8012AE00)(p); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017E5AC); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017E6D8); - - -extern s16 D_8018E6CC; -extern s16 D_8018E6D0; -extern u16 D_80126B5E; -extern s32 func_80013478(s32 a0, s32 a1); -extern s32 ratan2(s32, s32); -s32 func_8017E958(s32 param_1, s32 param_2) { - s32 local_20[2] = {0x3c100, 0x51000}; - s32 iVar1; - s32 iVar2; - if ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18 == 4) { - iVar1 = ((s32 (*)(s32, void *))func_80013478)(param_1 + 4, &D_8018E6CC); - if (param_2 == 1) { - iVar2 = ratan2((s32)*(s16 *)(param_1 + 0xe) - (s32)D_8018E6D0, - (s32)D_8018E6CC - (s32)*(s16 *)(param_1 + 6)); - if ((((u32)iVar2 - 0x400U) & 0xfff) - 0x381 < 0xff && 0x2df < (*(s16 *)&D_80126B5E) && - 0x3c100 < iVar1) { return 1; } - } - if (local_20[param_2] < iVar1 && *(s32 *)(param_1 + 0xe8) < iVar1) { - *(s32 *)(param_1 + 0xe8) = iVar1; return 1; - } - *(s32 *)(param_1 + 0xe8) = iVar1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017EA84); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017F390); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple param-survives-call store sequence - -extern void func_8012A828(s32 a0, void *a1); -extern char D_801A668C[]; - -void func_8017F5A0(int param_1) -{ - *(short *)(param_1 + 2) = 2; - *(short *)(param_1 + 0x34) = 0; - func_8012A828(param_1, &D_801A668C); - *(int *)(param_1 + 0x1c) = 0x14; -} - - - -// @class: plumbing -// @stuck: none — MATCH expected; param_1 survives call in $s0 naturally (single global allocno) - -extern void func_8012A828(s32 a0, void *a1); -extern s32 D_801A72C4; - -void func_8017F5E4(s32 param_1) { - *(s16 *)(param_1 + 2) = 2; - *(s16 *)(param_1 + 0x34) = 3; - func_8012A828(param_1, &D_801A72C4); - *(s32 *)(param_1 + 0x1c) = 0x1e; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017F950); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_801734BC", func_8017FB24); - -DEFINE_func_8017FC9C() /* dedup: shared engine-core @0x8017FC9C (src/shared) */ - diff --git a/src/ov_SC02_003/ov_SC02_003_jr_80178D40.c b/src/ov_SC02_003/ov_SC02_003_jr_80178D40.c new file mode 100644 index 000000000..c3bc0f1be --- /dev/null +++ b/src/ov_SC02_003/ov_SC02_003_jr_80178D40.c @@ -0,0 +1,4427 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018DDE4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E72D0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018DDD8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018DE1C[]; +extern unsigned short D_8018DE24[]; +extern unsigned short D_8018DE2C[]; +extern unsigned char D_801E72D8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E72D0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018DE34[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E740C; +extern M2C_UNK D_801E7410; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E7398; +extern void (*D_8018DE64[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E7414[]; +extern u8 D_801E741C[]; +extern u8 D_801E73CC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018DE6C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018DE88[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018DE90[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEF8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DE9C; +extern u8 D_8018DEA8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018DF2C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018DF34[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018DF88[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018DFBC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018DFAC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018DFD8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E050[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E058[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E060[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E068[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E070[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E078[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E084[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E090[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E09C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E0AC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E0BC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E0C4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E0CC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E0D4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E0DC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E0E4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E0EC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E0F4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E0FC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E104[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E10C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E114[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E11C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E124[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E12C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E134[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E13C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E144[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E14C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E154[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E15C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E164[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E16C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E1B0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E174; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E1E0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E21C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E274[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E284[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E28C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018E3F4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018E400[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E660C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E87BC; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E7B50; +extern short D_801E8864; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E8864) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E8864)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E7B50 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E8864) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E8758 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E8758 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E8864) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E8864) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E7FAC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E7B54; + extern s32 D_801E7F68; + extern s16 D_801E7F6C; + extern s16 D_801E7F70; + extern s16 D_801E7F74; + extern s16 D_801E7F78; + extern s32 D_801E7F80; + extern s32 D_801E7F84; + extern s32 D_801E7F94; + extern s16 D_801E7F98; + extern s16 D_801E7F9C; + extern s32 D_801E7FA0; + extern s32 D_801E7FA8; + extern s32 D_801E7FAC[10]; + extern s32 D_801E8680; + extern s16 D_801E8758; + extern s32 D_801E87B8; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E8758; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E7F74, D_801E7F78 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 2; + break; + case 0: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E7F6C, D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E8680 != 0) { + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E7F6C, D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + } else { + (*(s16*)&D_801E8864) = 3; + } + break; + case 0x32: + func_80179B28(D_801E7F68); + D_801E7F68 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E7F6C, + D_801E7F70 ? 0x48 : 0x40); + (*(s16*)&D_801E8864) = 1; + break; + case 2: + func_80179B28(D_801E7F68); + if (D_801E7F80 != 0) { + D_801E7B50 = D_801E7F80; + D_801E7F80 = 0; + (*(s16*)&D_801E8864) = 3; + return; + } + (*(s16*)&D_801E8864) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E8864) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E8864) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E8864) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E8864) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1B: + D_801E7FA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E8864) = 4; + D_801E7B54 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E8864) = 5; + D_801E7F94 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E7F94 = (s32)func_8017A3B0; + (*(s16*)&D_801E8864) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x24: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E8864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E8864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E8864) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E8864) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E8864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E7F84); + (*(s16*)&D_801E8864) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4E: + D_801E7FA8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x2B: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E8864) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E87B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E8864) = 3; + break; + case 0x34: + (*(s16*)&D_801E8864) = 3; + D_801E7B50 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E7F80 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E8864) = 3; + D_801E7B50 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E8864) = 3; + D_801E7B50 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E7B50 = *(s32 *)(D_801E7B50 + 4); + return; + case 0x37: + (*(s16*)&D_801E8864) = 3; + D_801E7F6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E7F70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E8864) = 3; + D_801E7F74 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E7F78 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E8864) = 3; + D_801E7F6C = w1; + D_801E7F70 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E8864) = 3; + D_801E7F74 = w2; + D_801E7F78 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + case 0x43: + D_801E7F94 = (s32)func_8017A3D8; + D_801E7F9C = 0; + (*(s16*)&D_801E8864) = 5; + D_801E7F98 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E8864) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E8864) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E8864) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E7FAC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E8864) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E7FAC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E8864) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E7FAC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E8864) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E7FAC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E8864) = 3; + break; + default: + break; + } +Lend: + D_801E7B50 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E7F7C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E7F7C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E7F7C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E7F7C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E7FA4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E7FA4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E7F60; + +s32 func_8017A3B0(void) { + switch (D_801E7F60) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E7F9C; +extern short D_801E7F98; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E7F9C) { + case 0: + func_800D0CA0(1); + D_801E7F9C = D_801E7F9C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E7F98; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E7F9C = D_801E7F9C + 1; + if (D_801E7F9C < 0x1E) { + return 0; + } + D_801E7F9C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E7FDC; + extern s16 D_801E7FDE; + extern s16 D_801E7FE0; + extern s16 D_801E7FD4; + extern s16 D_801E7FD6; + extern s16 D_801E7FD8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E7FDC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E7FDE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E7FE0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E7FD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E7FD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E7FD8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E7F64; +extern u16 D_801E7FE4; +extern u16 D_801E7FE6; +extern u16 D_801E7FE8; +extern s16 D_801E87BC; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E87BC = 0; + D_801E7F64 = 0; + D_801E7FE4 = D_80126B5E; + D_801E7FE6 = D_80126B62; + D_801E7FE8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E53C[]; + extern s16 D_801E7FDC; + extern s16 D_801E7FD4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E7FDC; + s16 *p78C = &D_801E7FD4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E87BC = 1; + D_801E7F64 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E7F84; + extern SV4_8017B368 D_801E7F8C; + extern s16 D_801E7FDC; + extern s16 D_801E7FD4; + extern u16 D_8018E53C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E7F84; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E7F8C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E53C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E7FDC) = loc0; + (*(SV4_8017B368 *)&D_801E7FD4) = loc1; + D_801E87BC = 1; + D_801E7F64 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E53C[]; + extern s16 D_801E7FDC; + extern s16 D_801E7FDE; + extern s16 D_801E7FE0; + extern s16 D_801E7FD4; + extern s16 D_801E7FD6; + extern s16 D_801E7FD8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E53C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E53C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E7FDC; + s16 *p78C = &D_801E7FD4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E7FDE; + v798 = D_801E7FE0; + v78C = *p78C; + v78E = D_801E7FD6; + v790 = D_801E7FD8; + __asm__ __volatile__(""); + D_801E87BC = 1; + D_801E7F64 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E7F64; +extern s16 D_801E7FDC; +extern s16 D_801E7FDE; +extern s16 D_801E7FE0; +extern s16 D_801E7FD4; +extern s16 D_801E7FD6; +extern s16 D_801E7FD8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E7F64 = 0; + D_801E7FDC = (s16) D_80114F30; + D_801E7FDE = (s16) D_80114F34; + D_801E7FE0 = (s16) D_80114F38; + D_801E7FD4 = (s16) D_80114F24; + D_801E7FD6 = (s16) D_80114F28; + D_801E7FD8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E7FF4; +extern s16 D_801E7FF6; +extern s16 D_801E7FF8; +extern s16 D_801E7FFC; +extern s16 D_801E7FFE; +extern s16 D_801E8000; + +void func_8017B824(void) { + D_801E7FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E7FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E7FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E7FFC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E7FFE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E8000 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E7FF4; +extern s16 D_801E7FF6; +extern s16 D_801E7FF8; +extern s16 D_801E7FFC; +extern s16 D_801E7FFE; +extern s16 D_801E8000; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E7FF4; + D_80114F34 = D_801E7FF6; + D_80114F38 = D_801E7FF8; + D_80114F24 = D_801E7FFC; + D_80114F28 = D_801E7FFE; + D_80114F2C = D_801E8000; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E7FDC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E7FD4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E7FDC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E7FD4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E7FE4; +extern u16 D_801E7FE6; +extern u16 D_801E7FE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E7F64; +extern short D_801E7FEC; +extern short D_801E7FEE; +extern short D_801E7FF0; +extern s16 D_801E7FDC; +extern s16 D_801E7FDE; +extern s16 D_801E7FE0; +extern s16 D_801E7FD4; +extern s16 D_801E7FD6; +extern s16 D_801E7FD8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E7FE4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E7FE6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E7FE8); + (*(s16 *)&D_801E7FEC) = buf[0]; + (*(s16 *)&D_801E7FEE) = buf[1]; + (*(s16 *)&D_801E7FF0) = buf[2]; + D_801E7FDC = D_80114F30 + buf[0]; + D_801E7F64 = 0; + D_801E7FDE = D_80114F34 + buf[1]; + D_801E7FE0 = D_80114F38 + buf[2]; + D_801E7FD4 = D_80114F24 + buf[0]; + D_801E7FD6 = D_80114F28 + buf[1]; + D_801E7FD8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E7F84; +extern SV4 D_801E7F8C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E7F8C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E7F84 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E7F8C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E7F8C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E7F84) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E7F8C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E7FAC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E7FAC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E7F64; +extern s16 D_801E87BC; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E7F64 = D_801E7F64 + 1; + if (D_801E7F64 >= 0x1F) { + D_801E87BC = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E7F64; +extern s16 D_801E87BC; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E7F64 = D_801E7F64 + 1; + if (0x18 < D_801E7F64) { + func_8012A4BC(); + D_801E87BC = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E7F64; +extern void (*D_801E7FA8)(void); +extern short D_801E7FEC; +extern short D_801E7FEE; +extern short D_801E7FF0; +extern s16 D_801E87BC; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E7F64 = D_801E7F64 + 1; + if (D_801E7F64 >= 0x19) { + if (D_801E7FA8 != 0) { + (*D_801E7FA8)(); + } else { + D_80114F30 = D_80114F30 + D_801E7FEC; + D_80114F34 = D_80114F34 + D_801E7FEE; + D_80114F38 = D_80114F38 + D_801E7FF0; + D_80114F24 = D_80114F24 + D_801E7FEC; + D_80114F28 = D_80114F28 + D_801E7FEE; + D_80114F2C = D_80114F2C + D_801E7FF0; + func_8012A4BC(); + } + D_801E87BC = 0; + } +} + + + +extern void (*D_8018E5DC[])(void); + +void func_8017BE60(void *a0) { + D_8018E5DC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018E614[])(void); + +void func_8017BEF8(void *a0) { + D_8018E614[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C218); + + +extern void (*D_8018E628[])(void); + +void func_8017C524(void *a0) { + D_8018E628[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C770); + + +extern void (*D_8018E63C[])(void); + +void func_8017C7C4(void *a0) { + D_8018E63C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017C910); + + +extern void (*D_8018E65C[])(void); + +void func_8017CA80(void *a0) { + D_8018E65C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017CABC); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017CC80); + + +extern void (*D_8018E664[])(void); + +void func_8017CD14(void *a0) { + D_8018E664[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018E650; + +void func_8017CD50(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018E650, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017CE58); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017D230); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017D2D4); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017D538); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017E404); + + +// @class: struct +// @stuck: none — MATCH expected (modeled on byte-proven DEFINE_func_8012E504 idiom: D_801202A0 base, 0x6480 end, 0x10C stride for-loop) + +extern u8 D_801202A0[]; +extern s32 func_8017E404(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); + +void func_8017E51C(s32 a0) { + s32 p; + s32 end; + s32 v; + v = *(u16 *)a0; + p = (s32)D_801202A0; + end = (s32)D_801202A0 + 0x6480; + for (; p != end; p += 0x10C) { + if (p != a0) { + if (*(u16 *)p == v) { + if (func_8017E404(a0, p) != 0) { + break; + } + } + } + } + ((void (*)(s32))func_8012AE00)(p); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017E5AC); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017E6D8); + + +extern s16 D_8018E6CC; +extern s16 D_8018E6D0; +extern u16 D_80126B5E; +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 ratan2(s32, s32); +s32 func_8017E958(s32 param_1, s32 param_2) { + s32 local_20[2] = {0x3c100, 0x51000}; + s32 iVar1; + s32 iVar2; + if ((s32)((u32)*(u16 *)(param_1 + 0x70) << 0x10) >> 0x18 == 4) { + iVar1 = ((s32 (*)(s32, void *))func_80013478)(param_1 + 4, &D_8018E6CC); + if (param_2 == 1) { + iVar2 = ratan2((s32)*(s16 *)(param_1 + 0xe) - (s32)D_8018E6D0, + (s32)D_8018E6CC - (s32)*(s16 *)(param_1 + 6)); + if ((((u32)iVar2 - 0x400U) & 0xfff) - 0x381 < 0xff && 0x2df < (*(s16 *)&D_80126B5E) && + 0x3c100 < iVar1) { return 1; } + } + if (local_20[param_2] < iVar1 && *(s32 *)(param_1 + 0xe8) < iVar1) { + *(s32 *)(param_1 + 0xe8) = iVar1; return 1; + } + *(s32 *)(param_1 + 0xe8) = iVar1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017EA84); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017F390); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple param-survives-call store sequence + +extern void func_8012A828(s32 a0, void *a1); +extern char D_801A668C[]; + +void func_8017F5A0(int param_1) +{ + *(short *)(param_1 + 2) = 2; + *(short *)(param_1 + 0x34) = 0; + func_8012A828(param_1, &D_801A668C); + *(int *)(param_1 + 0x1c) = 0x14; +} + + + +// @class: plumbing +// @stuck: none — MATCH expected; param_1 survives call in $s0 naturally (single global allocno) + +extern void func_8012A828(s32 a0, void *a1); +extern s32 D_801A72C4; + +void func_8017F5E4(s32 param_1) { + *(s16 *)(param_1 + 2) = 2; + *(s16 *)(param_1 + 0x34) = 3; + func_8012A828(param_1, &D_801A72C4); + *(s32 *)(param_1 + 0x1c) = 0x1e; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017F950); + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_80178D40", func_8017FB24); + +DEFINE_func_8017FC9C() /* dedup: shared engine-core @0x8017FC9C (src/shared) */ + + diff --git a/src/ov_SC02_004/ov_SC02_004_jr_801734BC.c b/src/ov_SC02_004/ov_SC02_004_jr_801734BC.c index 8d4a01d5e..32ad08397 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_801734BC.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_801734BC.c @@ -3104,879 +3104,3 @@ void func_80178D18(void) { D_801963C4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801961CC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801961CC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801961CC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801961CC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801961F4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801961F4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801961B0; - -s32 func_8017A3B0(void) { - switch (D_801961B0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801961EC; -extern short D_801961E8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801961EC) { - case 0: - func_800D0CA0(1); - D_801961EC = D_801961EC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801961E8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801961EC = D_801961EC + 1; - if (D_801961EC < 0x1E) { - return 0; - } - D_801961EC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019622C; - extern s16 D_8019622E; - extern s16 D_80196230; - extern s16 D_80196224; - extern s16 D_80196226; - extern s16 D_80196228; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019622C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019622E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80196230, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80196224, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80196226, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80196228, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801961B4; -extern u16 D_80196234; -extern u16 D_80196236; -extern u16 D_80196238; -extern s16 D_80196350; - -void func_8017B1D8(void) { - func_8012A418(); - D_80196350 = 0; - D_801961B4 = 0; - D_80196234 = D_80126B5E; - D_80196236 = D_80126B62; - D_80196238 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018161C[]; - extern s16 D_8019622C; - extern s16 D_80196224; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018161C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018161C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019622C; - s16 *p78C = &D_80196224; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80196350 = 1; - D_801961B4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801961D4; - extern SV4_8017B368 D_801961DC; - extern s16 D_8019622C; - extern s16 D_80196224; - extern u16 D_8018161C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801961D4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801961DC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018161C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018161C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019622C) = loc0; - (*(SV4_8017B368 *)&D_80196224) = loc1; - D_80196350 = 1; - D_801961B4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018161C[]; - extern s16 D_8019622C; - extern s16 D_8019622E; - extern s16 D_80196230; - extern s16 D_80196224; - extern s16 D_80196226; - extern s16 D_80196228; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018161C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018161C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019622C; - s16 *p78C = &D_80196224; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019622E; - v798 = D_80196230; - v78C = *p78C; - v78E = D_80196226; - v790 = D_80196228; - __asm__ __volatile__(""); - D_80196350 = 1; - D_801961B4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801961B4; -extern s16 D_8019622C; -extern s16 D_8019622E; -extern s16 D_80196230; -extern s16 D_80196224; -extern s16 D_80196226; -extern s16 D_80196228; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801961B4 = 0; - D_8019622C = (s16) D_80114F30; - D_8019622E = (s16) D_80114F34; - D_80196230 = (s16) D_80114F38; - D_80196224 = (s16) D_80114F24; - D_80196226 = (s16) D_80114F28; - D_80196228 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80196244; -extern s16 D_80196246; -extern s16 D_80196248; -extern s16 D_8019624C; -extern s16 D_8019624E; -extern s16 D_80196250; - -void func_8017B824(void) { - D_80196244 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80196246 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80196248 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019624C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019624E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80196250 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80196244; -extern s16 D_80196246; -extern s16 D_80196248; -extern s16 D_8019624C; -extern s16 D_8019624E; -extern s16 D_80196250; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80196244; - D_80114F34 = D_80196246; - D_80114F38 = D_80196248; - D_80114F24 = D_8019624C; - D_80114F28 = D_8019624E; - D_80114F2C = D_80196250; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019622C), src[8..15] -> (*(S8_8017B8E8 *)&D_80196224) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019622C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80196224) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80196234; -extern u16 D_80196236; -extern u16 D_80196238; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801961B4; -extern short D_8019623C; -extern short D_8019623E; -extern short D_80196240; -extern s16 D_8019622C; -extern s16 D_8019622E; -extern s16 D_80196230; -extern s16 D_80196224; -extern s16 D_80196226; -extern s16 D_80196228; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80196234); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80196236); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80196238); - (*(s16 *)&D_8019623C) = buf[0]; - (*(s16 *)&D_8019623E) = buf[1]; - (*(s16 *)&D_80196240) = buf[2]; - D_8019622C = D_80114F30 + buf[0]; - D_801961B4 = 0; - D_8019622E = D_80114F34 + buf[1]; - D_80196230 = D_80114F38 + buf[2]; - D_80196224 = D_80114F24 + buf[0]; - D_80196226 = D_80114F28 + buf[1]; - D_80196228 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801961D4; -extern SV4 D_801961DC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801961DC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801961D4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801961DC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801961DC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801961D4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801961DC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801961FC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801961FC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801961B4; -extern s16 D_80196350; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801961B4 = D_801961B4 + 1; - if (D_801961B4 >= 0x1F) { - D_80196350 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801961B4; -extern s16 D_80196350; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801961B4 = D_801961B4 + 1; - if (0x18 < D_801961B4) { - func_8012A4BC(); - D_80196350 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801961B4; -extern void (*D_801961F8)(void); -extern short D_8019623C; -extern short D_8019623E; -extern short D_80196240; -extern s16 D_80196350; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801961B4 = D_801961B4 + 1; - if (D_801961B4 >= 0x19) { - if (D_801961F8 != 0) { - (*D_801961F8)(); - } else { - D_80114F30 = D_80114F30 + D_8019623C; - D_80114F34 = D_80114F34 + D_8019623E; - D_80114F38 = D_80114F38 + D_80196240; - D_80114F24 = D_80114F24 + D_8019623C; - D_80114F28 = D_80114F28 + D_8019623E; - D_80114F2C = D_80114F2C + D_80196240; - func_8012A4BC(); - } - D_80196350 = 0; - } -} - - - -extern void (*D_801816BC[])(void); - -void func_8017BE60(void *a0) { - D_801816BC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017C338); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017C530); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017C59C); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D468); - - -extern void (*D_80181718[])(void); - -void func_8017D49C(void *a0) { - D_80181718[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D4D8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D528(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181720[])(void); - -void func_8017D54C(void *a0) { - D_80181720[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D588); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D5D4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(2); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D650(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018172C[])(void); - -void func_8017D670(void *a0) { - D_8018172C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017D6AC(u8 *a0) { - *(s32 *)(a0 + 0x204) = 0x20; - *(u8 *)(a0 + 0x214) += 1; - } - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D6C4); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D6F0); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D7B4); - - -extern void (*D_8018173C[])(void); - -void func_8017D804(void *a0) { - D_8018173C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017D840(u8 *a0) { - *(u8 *)(a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8017D854(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - - -extern void (*D_801817F8[])(void); - -void func_8017D874(void *a0) { - D_801817F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D8B0); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D910); - -extern u16 D_80126B66; - void func_8017D99C(s32 *a0) { - if (*(s16 *)((char *)a0 + 0xe) < *(s16 *)&D_80126B66) { - *(s16 *)((char *)a0 + 0x2) = 0; - } - } - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017D9C4); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017DA30); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_801734BC", func_8017DB2C); - - -extern void (*D_80181804[])(void); - -void func_8017DC54(void *a0) { - D_80181804[*(u16 *)((s32)a0 + 0x2)](); -} - - diff --git a/src/ov_SC02_004/ov_SC02_004_jr_80178D40.c b/src/ov_SC02_004/ov_SC02_004_jr_80178D40.c new file mode 100644 index 000000000..57240b52f --- /dev/null +++ b/src/ov_SC02_004/ov_SC02_004_jr_80178D40.c @@ -0,0 +1,4346 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80180EC4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80195520; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80180EB8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80180EFC[]; +extern unsigned short D_80180F04[]; +extern unsigned short D_80180F0C[]; +extern unsigned char D_80195528[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80195520; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80180F14[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019565C; +extern M2C_UNK D_80195660; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801955E8; +extern void (*D_80180F44[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80195664[]; +extern u8 D_8019566C[]; +extern u8 D_8019561C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80180F4C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80180F68[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80180F70[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80180FD8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180F7C; +extern u8 D_80180F88; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018100C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181014[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181068[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018109C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018108C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801810B8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181130[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181138[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181140[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181148[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181150[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181158[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181164[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181170[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018117C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018118C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018119C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801811A4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801811AC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801811B4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801811BC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801811C4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801811CC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801811D4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801811DC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801811E4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801811EC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801811F4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801811FC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181204[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018120C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181214[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018121C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181224[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018122C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181234[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018123C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181244[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018124C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181290[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181254; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801812C0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801812FC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181354[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80181364[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018136C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801814D4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801814E0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80194C1C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80196350; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80195DA0; +extern short D_801963C4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801963C4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801963C4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80195DA0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801963C4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80196320 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80196320 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801963C4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801963C4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801961FC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80195DA4; + extern s32 D_801961B8; + extern s16 D_801961BC; + extern s16 D_801961C0; + extern s16 D_801961C4; + extern s16 D_801961C8; + extern s32 D_801961D0; + extern s32 D_801961D4; + extern s32 D_801961E4; + extern s16 D_801961E8; + extern s16 D_801961EC; + extern s32 D_801961F0; + extern s32 D_801961F8; + extern s32 D_801961FC[10]; + extern s32 D_80196268; + extern s16 D_80196320; + extern s32 D_8019634C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80196320; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801961B8); + D_801961B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801961C4, D_801961C8 ? 0x48 : 0x40); + (*(s16*)&D_801963C4) = 2; + break; + case 0: + func_80179B28(D_801961B8); + D_801961B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801961BC, D_801961C0 ? 0x48 : 0x40); + (*(s16*)&D_801963C4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80196268 != 0) { + func_80179B28(D_801961B8); + D_801961B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801961BC, D_801961C0 ? 0x48 : 0x40); + (*(s16*)&D_801963C4) = 1; + } else { + (*(s16*)&D_801963C4) = 3; + } + break; + case 0x32: + func_80179B28(D_801961B8); + D_801961B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801961BC, + D_801961C0 ? 0x48 : 0x40); + (*(s16*)&D_801963C4) = 1; + break; + case 2: + func_80179B28(D_801961B8); + if (D_801961D0 != 0) { + D_80195DA0 = D_801961D0; + D_801961D0 = 0; + (*(s16*)&D_801963C4) = 3; + return; + } + (*(s16*)&D_801963C4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801963C4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801963C4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801963C4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801963C4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801963C4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801963C4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801963C4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801963C4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801963C4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801963C4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801963C4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x1B: + D_801961F0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801963C4) = 4; + D_80195DA4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801963C4) = 5; + D_801961E4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801961E4 = (s32)func_8017A3B0; + (*(s16*)&D_801963C4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x24: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801963C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801963C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801963C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801963C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801963C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801963C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801963C4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801963C4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801963C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801961D4); + (*(s16*)&D_801963C4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801961D4); + (*(s16*)&D_801963C4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801961D4); + (*(s16*)&D_801963C4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801961D4); + (*(s16*)&D_801963C4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + break; + case 0x4E: + D_801961F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x2B: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801963C4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019634C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801963C4) = 3; + break; + case 0x34: + (*(s16*)&D_801963C4) = 3; + D_80195DA0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801961D0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801963C4) = 3; + D_80195DA0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801963C4) = 3; + D_80195DA0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80195DA0 = *(s32 *)(D_80195DA0 + 4); + return; + case 0x37: + (*(s16*)&D_801963C4) = 3; + D_801961BC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801961C0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801963C4) = 3; + D_801961C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801961C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801963C4) = 3; + D_801961BC = w1; + D_801961C0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801963C4) = 3; + D_801961C4 = w2; + D_801961C8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + case 0x43: + D_801961E4 = (s32)func_8017A3D8; + D_801961EC = 0; + (*(s16*)&D_801963C4) = 5; + D_801961E8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801963C4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801963C4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801963C4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801961FC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801963C4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801961FC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801963C4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801961FC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801963C4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801961FC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801963C4) = 3; + break; + default: + break; + } +Lend: + D_80195DA0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801961CC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801961CC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801961CC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801961CC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801961F4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801961F4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801961B0; + +s32 func_8017A3B0(void) { + switch (D_801961B0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801961EC; +extern short D_801961E8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801961EC) { + case 0: + func_800D0CA0(1); + D_801961EC = D_801961EC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801961E8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801961EC = D_801961EC + 1; + if (D_801961EC < 0x1E) { + return 0; + } + D_801961EC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019622C; + extern s16 D_8019622E; + extern s16 D_80196230; + extern s16 D_80196224; + extern s16 D_80196226; + extern s16 D_80196228; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019622C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019622E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80196230, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80196224, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80196226, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80196228, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801961B4; +extern u16 D_80196234; +extern u16 D_80196236; +extern u16 D_80196238; +extern s16 D_80196350; + +void func_8017B1D8(void) { + func_8012A418(); + D_80196350 = 0; + D_801961B4 = 0; + D_80196234 = D_80126B5E; + D_80196236 = D_80126B62; + D_80196238 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018161C[]; + extern s16 D_8019622C; + extern s16 D_80196224; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018161C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018161C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019622C; + s16 *p78C = &D_80196224; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80196350 = 1; + D_801961B4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801961D4; + extern SV4_8017B368 D_801961DC; + extern s16 D_8019622C; + extern s16 D_80196224; + extern u16 D_8018161C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801961D4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801961DC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018161C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018161C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019622C) = loc0; + (*(SV4_8017B368 *)&D_80196224) = loc1; + D_80196350 = 1; + D_801961B4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018161C[]; + extern s16 D_8019622C; + extern s16 D_8019622E; + extern s16 D_80196230; + extern s16 D_80196224; + extern s16 D_80196226; + extern s16 D_80196228; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018161C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018161C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019622C; + s16 *p78C = &D_80196224; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019622E; + v798 = D_80196230; + v78C = *p78C; + v78E = D_80196226; + v790 = D_80196228; + __asm__ __volatile__(""); + D_80196350 = 1; + D_801961B4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801961B4; +extern s16 D_8019622C; +extern s16 D_8019622E; +extern s16 D_80196230; +extern s16 D_80196224; +extern s16 D_80196226; +extern s16 D_80196228; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801961B4 = 0; + D_8019622C = (s16) D_80114F30; + D_8019622E = (s16) D_80114F34; + D_80196230 = (s16) D_80114F38; + D_80196224 = (s16) D_80114F24; + D_80196226 = (s16) D_80114F28; + D_80196228 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80196244; +extern s16 D_80196246; +extern s16 D_80196248; +extern s16 D_8019624C; +extern s16 D_8019624E; +extern s16 D_80196250; + +void func_8017B824(void) { + D_80196244 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80196246 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80196248 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019624C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019624E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80196250 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80196244; +extern s16 D_80196246; +extern s16 D_80196248; +extern s16 D_8019624C; +extern s16 D_8019624E; +extern s16 D_80196250; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80196244; + D_80114F34 = D_80196246; + D_80114F38 = D_80196248; + D_80114F24 = D_8019624C; + D_80114F28 = D_8019624E; + D_80114F2C = D_80196250; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019622C), src[8..15] -> (*(S8_8017B8E8 *)&D_80196224) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019622C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80196224) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80196234; +extern u16 D_80196236; +extern u16 D_80196238; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801961B4; +extern short D_8019623C; +extern short D_8019623E; +extern short D_80196240; +extern s16 D_8019622C; +extern s16 D_8019622E; +extern s16 D_80196230; +extern s16 D_80196224; +extern s16 D_80196226; +extern s16 D_80196228; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80196234); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80196236); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80196238); + (*(s16 *)&D_8019623C) = buf[0]; + (*(s16 *)&D_8019623E) = buf[1]; + (*(s16 *)&D_80196240) = buf[2]; + D_8019622C = D_80114F30 + buf[0]; + D_801961B4 = 0; + D_8019622E = D_80114F34 + buf[1]; + D_80196230 = D_80114F38 + buf[2]; + D_80196224 = D_80114F24 + buf[0]; + D_80196226 = D_80114F28 + buf[1]; + D_80196228 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801961D4; +extern SV4 D_801961DC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801961DC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801961D4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801961DC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801961DC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801961D4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801961DC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801961FC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801961FC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801961B4; +extern s16 D_80196350; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801961B4 = D_801961B4 + 1; + if (D_801961B4 >= 0x1F) { + D_80196350 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801961B4; +extern s16 D_80196350; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801961B4 = D_801961B4 + 1; + if (0x18 < D_801961B4) { + func_8012A4BC(); + D_80196350 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801961B4; +extern void (*D_801961F8)(void); +extern short D_8019623C; +extern short D_8019623E; +extern short D_80196240; +extern s16 D_80196350; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801961B4 = D_801961B4 + 1; + if (D_801961B4 >= 0x19) { + if (D_801961F8 != 0) { + (*D_801961F8)(); + } else { + D_80114F30 = D_80114F30 + D_8019623C; + D_80114F34 = D_80114F34 + D_8019623E; + D_80114F38 = D_80114F38 + D_80196240; + D_80114F24 = D_80114F24 + D_8019623C; + D_80114F28 = D_80114F28 + D_8019623E; + D_80114F2C = D_80114F2C + D_80196240; + func_8012A4BC(); + } + D_80196350 = 0; + } +} + + + +extern void (*D_801816BC[])(void); + +void func_8017BE60(void *a0) { + D_801816BC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017C338); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017C530); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017C59C); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D468); + + +extern void (*D_80181718[])(void); + +void func_8017D49C(void *a0) { + D_80181718[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D4D8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D528(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181720[])(void); + +void func_8017D54C(void *a0) { + D_80181720[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D588); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D5D4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(2); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D650(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018172C[])(void); + +void func_8017D670(void *a0) { + D_8018172C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017D6AC(u8 *a0) { + *(s32 *)(a0 + 0x204) = 0x20; + *(u8 *)(a0 + 0x214) += 1; + } + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D6C4); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D6F0); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D7B4); + + +extern void (*D_8018173C[])(void); + +void func_8017D804(void *a0) { + D_8018173C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017D840(u8 *a0) { + *(u8 *)(a0 + 0x214) += 1; + } + + +extern void func_8016F0E4(void); + void func_8017D854(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + + +extern void (*D_801817F8[])(void); + +void func_8017D874(void *a0) { + D_801817F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D8B0); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D910); + +extern u16 D_80126B66; + void func_8017D99C(s32 *a0) { + if (*(s16 *)((char *)a0 + 0xe) < *(s16 *)&D_80126B66) { + *(s16 *)((char *)a0 + 0x2) = 0; + } + } + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017D9C4); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017DA30); + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_80178D40", func_8017DB2C); + + +extern void (*D_80181804[])(void); + +void func_8017DC54(void *a0) { + D_80181804[*(u16 *)((s32)a0 + 0x2)](); +} + + + diff --git a/src/ov_SC02_005/ov_SC02_005_jr_801734BC.c b/src/ov_SC02_005/ov_SC02_005_jr_801734BC.c index 500f4fe29..1fe443644 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_801734BC.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_801734BC.c @@ -3106,2530 +3106,3 @@ void func_80178D18(void) { D_801E4C4C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E4244; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E4244 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E4244; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E4244 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E426C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E426C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E4228; - -s32 func_8017A3B0(void) { - switch (D_801E4228) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E4264; -extern short D_801E4260; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E4264) { - case 0: - func_800D0CA0(1); - D_801E4264 = D_801E4264 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E4260; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E4264 = D_801E4264 + 1; - if (D_801E4264 < 0x1E) { - return 0; - } - D_801E4264 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E42A4; - extern s16 D_801E42A6; - extern s16 D_801E42A8; - extern s16 D_801E429C; - extern s16 D_801E429E; - extern s16 D_801E42A0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E42A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E42A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E42A8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E429C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E429E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E42A0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E422C; -extern u16 D_801E42AC; -extern u16 D_801E42AE; -extern u16 D_801E42B0; -extern s16 D_801E4BD8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E4BD8 = 0; - D_801E422C = 0; - D_801E42AC = D_80126B5E; - D_801E42AE = D_80126B62; - D_801E42B0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80194220[]; - extern s16 D_801E42A4; - extern s16 D_801E429C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80194220[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80194220[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E42A4; - s16 *p78C = &D_801E429C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E4BD8 = 1; - D_801E422C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E424C; - extern SV4_8017B368 D_801E4254; - extern s16 D_801E42A4; - extern s16 D_801E429C; - extern u16 D_80194220; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E424C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E4254; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80194220)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80194220)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E42A4) = loc0; - (*(SV4_8017B368 *)&D_801E429C) = loc1; - D_801E4BD8 = 1; - D_801E422C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80194220[]; - extern s16 D_801E42A4; - extern s16 D_801E42A6; - extern s16 D_801E42A8; - extern s16 D_801E429C; - extern s16 D_801E429E; - extern s16 D_801E42A0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80194220[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80194220[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E42A4; - s16 *p78C = &D_801E429C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E42A6; - v798 = D_801E42A8; - v78C = *p78C; - v78E = D_801E429E; - v790 = D_801E42A0; - __asm__ __volatile__(""); - D_801E4BD8 = 1; - D_801E422C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E422C; -extern s16 D_801E42A4; -extern s16 D_801E42A6; -extern s16 D_801E42A8; -extern s16 D_801E429C; -extern s16 D_801E429E; -extern s16 D_801E42A0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E422C = 0; - D_801E42A4 = (s16) D_80114F30; - D_801E42A6 = (s16) D_80114F34; - D_801E42A8 = (s16) D_80114F38; - D_801E429C = (s16) D_80114F24; - D_801E429E = (s16) D_80114F28; - D_801E42A0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E42BC; -extern s16 D_801E42BE; -extern s16 D_801E42C0; -extern s16 D_801E42C4; -extern s16 D_801E42C6; -extern s16 D_801E42C8; - -void func_8017B824(void) { - D_801E42BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E42BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E42C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E42C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E42C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E42C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E42BC; -extern s16 D_801E42BE; -extern s16 D_801E42C0; -extern s16 D_801E42C4; -extern s16 D_801E42C6; -extern s16 D_801E42C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E42BC; - D_80114F34 = D_801E42BE; - D_80114F38 = D_801E42C0; - D_80114F24 = D_801E42C4; - D_80114F28 = D_801E42C6; - D_80114F2C = D_801E42C8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E42A4), src[8..15] -> (*(S8_8017B8E8 *)&D_801E429C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E42A4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E429C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E42AC; -extern u16 D_801E42AE; -extern u16 D_801E42B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E422C; -extern short D_801E42B4; -extern short D_801E42B6; -extern short D_801E42B8; -extern s16 D_801E42A4; -extern s16 D_801E42A6; -extern s16 D_801E42A8; -extern s16 D_801E429C; -extern s16 D_801E429E; -extern s16 D_801E42A0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E42AC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E42AE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E42B0); - (*(s16 *)&D_801E42B4) = buf[0]; - (*(s16 *)&D_801E42B6) = buf[1]; - (*(s16 *)&D_801E42B8) = buf[2]; - D_801E42A4 = D_80114F30 + buf[0]; - D_801E422C = 0; - D_801E42A6 = D_80114F34 + buf[1]; - D_801E42A8 = D_80114F38 + buf[2]; - D_801E429C = D_80114F24 + buf[0]; - D_801E429E = D_80114F28 + buf[1]; - D_801E42A0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E424C; -extern SV4 D_801E4254; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E4254) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E424C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E4254 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E4254)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E424C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E4254) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E4274[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E4274; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E422C; -extern s16 D_801E4BD8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E422C = D_801E422C + 1; - if (D_801E422C >= 0x1F) { - D_801E4BD8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E422C; -extern s16 D_801E4BD8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E422C = D_801E422C + 1; - if (0x18 < D_801E422C) { - func_8012A4BC(); - D_801E4BD8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E422C; -extern void (*D_801E4270)(void); -extern short D_801E42B4; -extern short D_801E42B6; -extern short D_801E42B8; -extern s16 D_801E4BD8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E422C = D_801E422C + 1; - if (D_801E422C >= 0x19) { - if (D_801E4270 != 0) { - (*D_801E4270)(); - } else { - D_80114F30 = D_80114F30 + D_801E42B4; - D_80114F34 = D_80114F34 + D_801E42B6; - D_80114F38 = D_80114F38 + D_801E42B8; - D_80114F24 = D_80114F24 + D_801E42B4; - D_80114F28 = D_80114F28 + D_801E42B6; - D_80114F2C = D_80114F2C + D_801E42B8; - func_8012A4BC(); - } - D_801E4BD8 = 0; - } -} - - - -extern void (*D_801942C0[])(void); - -void func_8017BE60(void *a0) { - D_801942C0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017BE9C); - -extern void func_8017BF14(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BEC0(s32 arg0, s32 arg1, s16 arg2) { - func_8017BF14(arg0, arg1, arg2, 0); - } - - -extern void func_8017BF14(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BEE8(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF14)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017BF14); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017BF9C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017BFF0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017C048); - - -extern void (*D_80194320[])(void); - -void func_8017C0F4(void *a0) { - D_80194320[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017C130); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017C41C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017C8B0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017CC88); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017CD2C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017CF24); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017CF90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017DE5C); - -extern void func_8012A018(s32 a, s32 b); - extern void func_8017E97C(); - void func_8017DF00(void) { - ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x2); - } - - -extern void func_8012A018(s32 a, s32 b); - extern void func_8017E97C(); - void func_8017DF28(void) { - ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x3); - } - - -extern void func_8012A018(s32 a, s32 b); - extern void func_8017E97C(void); - void func_8017DF50(void) { - ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x8); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017DF78); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E014); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E0B4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E190); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E26C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E348); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E424); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E454); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E4F8); - -extern void func_8012A0E0(void); - void func_8017E5AC(void) { - ((s32 (*)(void))func_8012A0E0)(); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E664); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E6FC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E798); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E898); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E8E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E97C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017E9B8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EA74); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EA9C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EAD4); - -void func_8017EB30(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EB38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EB8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017ECAC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017ED28); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EDF8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017EFB4); - - -extern void (*D_8019439C[])(void); - -void func_8017F010(void *a0) { - D_8019439C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F04C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017F09C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801943A4[])(void); - -void func_8017F0C0(void *a0) { - D_801943A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017F0FC(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0x14; - a0[0x15] += 1; - return 0; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F118); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F194); - - -extern void (*D_80194454[])(void); - -void func_8017F1DC(void *a0) { - D_80194454[*(u8 *)((s32)a0 + 0x214)](); -} - - -extern void func_80171B44(s32 *a0); - void func_8017F218(u8 *a0) { - *(s8 *)(a0 + 0x214) += 1; - ((void (*)(void))func_80171B44)(); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F244); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F2C4); - - -// @class: plumbing -// @stuck: none — MATCH (param_1 survives across func_8016F0E4 → lands in $s0; passed to func_80165770) - -extern void func_8016F0E4(void); -extern void func_80165770(void); -extern void func_80175414(s32); - -void func_8017F320(s32 param_1) -{ - func_8016F0E4(); - ((void (*)(s32))func_80165770)(param_1); - ((void (*)(void))func_80175414)(); -} - - - -extern void (*D_80194464[])(void); - -void func_8017F358(void *a0) { - D_80194464[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F394); - - -// @class: plumbing -// @stuck: none — MATCH (expected); simple call + conditional u8 increment - -extern s32 func_80171B4C(s32 a0, s32 a1); - -void func_8017F3C4(int param_1) -{ - if (func_80171B4C(param_1, 0x2) != 0) { - *(unsigned char *)(param_1 + 0x214) += 1; - } - return; -} - - -extern void func_8016F0E4(void); - void func_8017F408(void) { - func_8016F0E4(); - } - - - -extern void (*D_80194470[])(void); - -void func_8017F428(void *a0) { - D_80194470[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F464); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F530); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F5B0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F63C); - - -extern s32 D_801270C8; -extern void func_8017F6A4(void); - -void func_8017F674(void) { - if (D_801270C8 == 6) { - func_8017F6A4(); - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F6A4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F6E8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F748); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F7CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F898); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F924); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017F998); - -extern s32 D_801270C8; -extern void func_8017FA3C(void); - -void func_8017FA0C(void) { - if (*(s32 *)&D_801270C8 == 0xC) { - ((void (*)(void))func_8017FA3C)(); - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FA3C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FA94); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FB14); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FB80); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FC64); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FCFC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FDB4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FE08); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FEA0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FF2C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FF8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8017FFF0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180060); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801800CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018016C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801801DC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180234); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801802CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180328); - - -extern void (*D_801944E8[])(void); - -void func_80180380(void *a0) { - D_801944E8[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180454); - -extern void func_8016EE94(); - extern char func_801804D4[]; - void func_801804AC(void) { - ((void (*)(char *, unsigned int))func_8016EE94)(func_801804D4, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801804D4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180510); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180574); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180610); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018074C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801808B0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180A3C); - -extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); - extern s32 func_80180AA4(void); - void func_80180A7C(void) { - ((void (*)(s32, s32))func_8016EDEC)((s32)&func_80180AA4, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180AA4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180AE0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180B18); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180B90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180C04); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180C3C); - - -extern void (*D_8019455C[])(void); - -void func_80180C64(void *a0) { - D_8019455C[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180CA0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180D18); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180DB8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180E08); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180F5C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80180FA8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181028); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181060); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801810F0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018112C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018118C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181238); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181270); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801812B4); - - -extern void (*D_8019458C[])(void); - -void func_801812DC(void *a0) { - D_8019458C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_80181318(void *a0) { - *(s32 *)((s32)a0 + 0x204) = 0x20; - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181330); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181388); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801813F0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018141C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801814B4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181570); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801815FC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018166C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018169C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801816CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801816FC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181900); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181984); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181BE8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181D30); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181F04); - -void func_80181F68(void *a0) { - *(s16 *)((s32)a0 + 0x34) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181F70); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181FA8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80181FE8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018203C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182098); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801820E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801821C8); - -extern void func_801862F0(void * arg0); - void func_80182284(s32 arg0) { - s32 temp_s0 = arg0; - ((void (*)(void))func_801862F0)(); - *(s16 *)(temp_s0 + 0x34) = 0x8; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801822B4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801822EC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801824D0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801827A8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182810); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801828D8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182918); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182998); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182A8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182D80); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182DCC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182E04); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182E78); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182EB0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182F78); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80182FAC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018300C); - -void func_80183060(void *a0) { - *(short *)((char *)a0 + 0x34) = 0x3; - *(int *)((char *)a0 + 0x1c) = 0x20; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183074); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801830F4); - -void func_80183160(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0x8; - *(s16 *)((char *)a0 + 0x34) = 0x6; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183174); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801831A4); - -void func_80183200(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183218); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801834C8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183524); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183584); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183610); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801838A8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183B0C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183C7C); - - -extern void (*D_80196320[])(void); - -void func_80183D18(void *a0) { - D_80196320[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183D54); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183D90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80183FCC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801840E8); - -void func_8018415C(void *a0) { - s32 v0; - if (*(s16 *)((s32)a0 + 0xe) == 0) { - *(s16 *)((s32)a0 + 0xae) = -1; - v0 = *(u16 *)((s32)a0 + 0xfc); - *(u16 *)((s32)a0 + 0xfc) = v0 | 2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184184); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801841E0); - - -extern void (*D_801963E8[])(void); - -void func_8018431C(void *a0) { - D_801963E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184358); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184404); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184480); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801844D4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018454C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801846CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184828); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801849E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184A34); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184A8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184C20); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184CA4); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80184D24(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x7); - } - - - -extern void (*D_80196470[])(void); - -void func_80184D44(void *a0) { - D_80196470[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_80184D80(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184D98); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184E30); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80184EC0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185060); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801851E0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185214); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801853CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801853EC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018548C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018550C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801856E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185764); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185858); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801858C4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018592C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185A04); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185A88); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185B38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185D6C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185D84); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185DD0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185E54); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80185E80); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801860F4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186144); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186178); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018622C); - -void func_801862E0(s32 *a0) { - s32 v0 = *(s32 *)((s32)a0 + 0xCC); - *(s16 *)((s32)a0 + 0x98) = 0; - *(s16 *)(v0 + 0x98) = 0; - } - - -void func_801862F0(void * arg0) { - *(short *)((char *)arg0 + 0x98) = 1; - *(short *)(*(int *)((char *)arg0 + 0xcc) + 0x98) = 1; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186304); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186424); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018655C); - -extern s32 func_8012D714(s32 param_1, u32 param_2); - extern u16 D_80126B96; - void func_801865D0(void *arg0) { - if (func_8012D714((s32)arg0, 0x5)) { - D_80126B96 = 0x4005; - } - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186600); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018675C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018687C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018692C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801869E0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186A04); - -extern s32 D_801961B8; - extern s32 D_801961E0; - void func_80186ADC(s32 arg0) { - *(s32 *)(*(s32 *)(arg0 + 0x20) + 0x80) = &D_801961B8; - *(s32 *)(*(s32 *)(*(s32 *)(arg0 + 0xcc) + 0x20) + 0x80) = &D_801961E0; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186B08); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186BB8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186C0C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186C70); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186CA8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186D00); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186D74); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186DE8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186F14); - -void func_80186F58(void *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186F60); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80186F9C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187070); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801870BC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801871E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187280); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187348); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801873FC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187508); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187560); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187664); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801876B0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187768); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801877FC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801878C0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018791C); - -extern void func_80181900(void *a0); - void func_801879DC(void *a0) { - *(s32 *)((s32)a0 + 0xE8) |= 1; - *(s16 *)((s32)a0 + 0xE0) = -1; - ((void (*)(void *))func_80181900)(a0); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187A0C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187A38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187A8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187AD0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187B0C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187B48); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187B7C); - -extern void func_80181FA8(void); - void func_80187BB4(s32 arg0) { - if (*(s16 *)((char *)arg0 + 0x98) == 0) { - ((void (*)(void))func_80181FA8)(); - } - } - - -extern void func_80181FE8(void); - void func_80187BE4(s32 *a0) { - if (*(s32 *)((char *)a0 + 0x94) == 0xB) { - ((void (*)(void))func_80181FE8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187C14); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187C9C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187CD4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187D4C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187D90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187DCC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187E18); - - -extern void func_8012CBF4(s32 a0); - extern void func_80182E04(void *a0); - void func_80187F1C(void *a0) { - if ((((s32 (*)(s32))func_8012CBF4)((s32)a0) & 0x2000) != 0) { - ((void (*)(s32))func_80182E04)((s32)a0); - } - } - - - -extern s32 D_801270C8; -extern void func_80182EB0(void); - -void func_80187F58(void) { - if (D_801270C8 == 22) { - func_80182EB0(); - } -} - - -void func_80187F88(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187F90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80187FCC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018802C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188068); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801880AC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018810C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188150); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188194); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801881F4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801882A8); - -void func_801882E0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801882E8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188324); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801883C4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188404); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801884C8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018850C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801885BC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188690); - -void func_801886BC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801886C4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188720); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018874C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801887CC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188830); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801888EC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018893C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188968); - - -extern void (*D_801964BC[])(void); - -void func_801889D4(void *a0) { - D_801964BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188A10); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80188A5C(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 1); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188A7C); - - -extern void (*D_801964FC[])(void); - -void func_80188BB4(void *a0) { - D_801964FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188BF0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188D1C); - -extern void func_80188F38(void); - void func_80188F08(u8 *a0) { - *(s8 *)(a0 + 0xC1) = 0; - *(s8 *)(a0 + 0xC2) = 0; - *(u16 *)(a0 + 0x5C) &= 0xFFFE; - func_80188F38(); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188F38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80188FF0); - - -extern void (*D_801965B0[])(void); - -void func_80189204(void *a0) { - D_801965B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189240); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189268); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801892CC); - - -extern void (*D_801965C0[])(void); - -void func_801894C8(void *a0) { - D_801965C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189504); - - -extern void (*D_801965D4[])(void); - -void func_801895A4(void *a0) { - D_801965D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801895E0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018968C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801898F4); - - -extern void (*D_8019660C[])(void); - -void func_80189AF4(void *a0) { - D_8019660C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189B30); - - -extern void (*D_801966A0[])(void); - -void func_80189C90(void *a0) { - D_801966A0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801966B8[])(void); - -void func_80189CCC(void *a0) { - D_801966B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80196760[])(void); - -void func_80189D08(void *a0) { - D_80196760[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801967C4[])(void); - -void func_80189D44(void *a0) { - D_801967C4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801967CC[])(void); - -void func_80189D80(void *a0) { - D_801967CC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80196814[])(void); - -void func_80189DBC(void *a0) { - D_80196814[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80196868[])(void); - -void func_80189DF8(void *a0) { - D_80196868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189E34); - -extern s32 func_80132EF4(s32 a0, s32 a1); - void func_80189F44(s32 arg0) { - ((void (*)(s32, s32))func_80132EF4)(arg0, 0x16); - } - - -extern u8 *func_8012913C(s32 a0); - void func_80189F64(void) { - ((void (*)(s32))func_8012913C)(0x15); - } - - -extern s32 func_80132EF4(s32 a0, s32 a1); - void func_80189F84(s32 arg0) { - ((void (*)(s32, s32))func_80132EF4)(arg0, 0xC); - } - - -extern s32 func_80132EF4(s32 a0, s32 a1); - void func_80189FA4(void *a0) { - ((void (*)(void *, int))func_80132EF4)(a0, 0x13); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80189FC4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A0E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A174); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A1D8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A30C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A3B4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A47C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A4C4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A658); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A6A0); - -void func_8018A7D0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A7D8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018A968); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AA88); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AAAC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AB84); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018ABE0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AC10); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AC48); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018ACB4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AD20); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AD8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018ADF0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AEB4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018AF58); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B058); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B16C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B2DC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B300); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B344); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B368); - -void func_8018B408(void) { -} - -extern void func_80132784(s32 a0, s32 a1, u32 a2); - void func_8018B410(u8 *a0) { - ((void (*)(u8 *, u8 *, u16))func_80132784)(a0, *(u8 **)(a0 + 0x64), *(u16 *)(a0 + 0xfe)); - } - - -void func_8018B438(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B440); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B4D0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B554); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B5E0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B638); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B6A0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B6E8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B7A4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B7F8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B8CC); - -extern s32 D_801270C8; -extern void func_801292C8(u8 *a0); - -void func_8018B93C(void) { - if (*(s32 *)&D_801270C8 == 0x13) { - ((void (*)(void))func_801292C8)(); - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018B96C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BA38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BAE4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BB58); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BB9C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BC48); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BCA4); - -extern s32 func_80128DB4(s32 a0, s32 *a1); - s32 func_8018BCEC(void *a0) { - ((void (*)(void *, void *))func_80128DB4)(*(void **)((char *)a0 + 0x20), (void *)((char *)a0 + 0x24)); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BD14); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BD90); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BDD0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BE88); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018BF88(u8 *a0) { - *(s32 *)(a0 + 0x1c) = 0x20; - *(s16 *)(a0 + 0x102) |= 2; - ((void (*)(void *, s32))func_8012AD44)(a0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018BFBC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018BFDC(u8 *a0) { - *(u16 *)(a0 + 0x102) |= 0x1; - ((void (*)(void *, s32))func_8012AD44)(a0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C008); - - -extern void (*D_801968F4[])(void); - -void func_8018C08C(void *a0) { - D_801968F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C0C8); - - -extern void (*D_80196B80[])(void); - -void func_8018C108(void *a0) { - D_80196B80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C144); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C1C0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C204); - - -extern void (*D_80196B8C[])(void); - -void func_8018C274(void *a0) { - D_80196B8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C2B0); - - -extern void (*D_80196B98[])(void); - -void func_8018C358(void *a0) { - D_80196B98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C394); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018C3C4(void * arg0) { - *(s8 *)((char *)arg0 + 0xfc) = 0x8; - ((void (*)(s32, s32))func_8012AD44)((int)arg0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C3EC); - - -extern void (*D_80196BA0[])(void); - -void func_8018C418(void *a0) { - D_80196BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C454); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C598); - - -extern void (*D_80196BB0[])(void); - -void func_8018C66C(void *a0) { - D_80196BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C6A8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C758); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C84C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C928); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018C978); - -extern void func_8012C218(void *a0); - void func_8018CA1C(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CA3C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CA74); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CB70); - -extern void func_8012C218(void *a0); - void func_8018CBF8(s32 *a0) { - if (*(s16 *)((char *)a0 + 0x98) == 0) { - ((void (*)(void))func_8012C218)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CC28); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CCF8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CD80); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CE04); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CEE0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018CF58); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D04C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D144); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D21C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D270); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D318); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D43C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D488); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D4D8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D574); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D608); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D6B0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D73C); - -void func_8018D7DC(void *a0) { - *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D7F0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D8A8); - -void func_8018D904(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D918); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D964); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018D9A4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DA40); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DA8C); - -void func_8018DAD8(void) { -} - - -extern void (*D_80196C9C[])(void); - -void func_8018DAE0(void *a0) { - D_80196C9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_80196C14; - -void func_8018DB1C(s32 arg0) { - *(s32 *)(arg0 + 0x58) = &D_80196C14; - *(s32 *)(arg0 + 0x1C) = 0x18; - *(s16 *)(arg0 + 0x2) += 1; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DB40); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DCD8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DDFC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DE5C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DEB8); - - -extern void (*D_80196CB0[])(void); - -void func_8018DF88(void *a0) { - D_80196CB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018DFC4); - -void func_8018E22C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E234); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E288); - - -extern void (*D_80196CC0[])(void); - -void func_8018E400(void *a0) { - D_80196CC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018E43C(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E450); - -void func_8018E6D4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E6DC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E730); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018E7E4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018EA04); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018EB60); - - -extern void (*D_80196CD4[])(void); - -void func_8018ECB8(void *a0) { - D_80196CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018ECF4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018ED84); - - -extern void (*D_80196CDC[])(void); - -void func_8018EDF8(void *a0) { - D_80196CDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018EE34); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018EF20); - -extern void func_8012C218(void *a0); - void func_8018EF90(void) { - ((void (*)(void))func_8012C218)(); - } - - - -extern void (*D_80196CE8[])(void); - -void func_8018EFB0(void *a0) { - D_80196CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018EFEC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F164); - -extern void func_8012C218(void *a0); - void func_8018F1D4(void) { - ((s32 (*)(void))func_8012C218)(); - } - - - -extern void (*D_80196CF4[])(void); - -void func_8018F1F4(void *a0) { - D_80196CF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F230); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F2C4); - -extern void func_8013C414(void *a0, void *a1); -extern s32 D_8019AA5C; -extern s32 D_801D91D4; - -void func_8018F414(void) { - func_8013C414(&D_8019AA5C, &D_801D91D4); -} - - -extern void func_8013C414(void *a0, void *a1); - extern s32 D_8019AA5C; - extern s32 D_801DA5FC; - void func_8018F444(void) { - func_8013C414(&D_8019AA5C, &D_801DA5FC); - } - - -extern void func_8013C414(void *a0, void *a1); - extern s32 D_8019AA5C; - extern s32 D_801DB658; - void func_8018F474(void) { - func_8013C414(&D_8019AA5C, &D_801DB658); - } - - -extern void func_8013C414(void *a0, void *a1); -extern s32 D_8019AA5C; -extern s32 D_801DC180; - -void func_8018F4A4(void) { - func_8013C414(&D_8019AA5C, &D_801DC180); -} - - -extern void func_8013C414(void *a0, void *a1); -extern s32 D_8019AA5C; -extern s32 D_801DCD04; - -void func_8018F4D4(void) { - func_8013C414(&D_8019AA5C, &D_801DCD04); -} - - -extern void func_8013C414(void *a0, void *a1); -extern s32 D_8019AA5C; -extern s32 D_801DD2D4; - -void func_8018F504(void) { - func_8013C414(&D_8019AA5C, &D_801DD2D4); -} - - -extern void func_8013C414(void *a0, void *a1); - extern s32 D_8019AA5C; - extern s32 D_801DDD30; - void func_8018F534(void) { - func_8013C414(&D_8019AA5C, &D_801DDD30); - } - - - -extern void func_8013C414(void *a0, void *a1); -extern s32 D_8019AA5C; -extern s32 D_801DE674; - -void func_8018F564(void) { - func_8013C414(&D_8019AA5C, &D_801DE674); -} - - -extern void func_8013C414(void *a0, void *a1); - extern s32 D_8019AA5C; - extern s32 D_801DF3B4; - void func_8018F594(void) { - func_8013C414(&D_8019AA5C, &D_801DF3B4); - } - - -extern void func_8013C360(void *a0); - extern s32 D_801D91D4; - void func_8018F5C4(void) { - func_8013C360(&D_801D91D4); - } - - -extern void func_8013C360(void *a0); - extern s32 D_801DA5FC; - void func_8018F5EC(void) { - func_8013C360(&D_801DA5FC); - } - - -extern void func_8013C360(void *a0); - extern s32 D_801DB658; - void func_8018F614(void) { - func_8013C360(&D_801DB658); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F63C); - -extern void func_8013C360(void *a0); - extern s32 D_801DCD04; - void func_8018F664(void) { - func_8013C360(&D_801DCD04); - } - - -extern void func_8013C360(void *a0); - extern s32 D_801DD2D4; - void func_8018F68C(void) { - func_8013C360(&D_801DD2D4); - } - - -extern void func_8013C360(void *); - extern s32 D_801DDD30; - void func_8018F6B4(void) { - func_8013C360(&D_801DDD30); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F6DC); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F704); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F72C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F894); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F91C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018F944); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FA34); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FAE0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FB8C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FC38); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FCE4); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FE18); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FEA0); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8018FFC4); - -void func_80190068(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0xC; - } - - - -extern void (*D_80196CFC[])(void); - -void func_80190074(void *a0) { - D_80196CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801900B0); - - -extern s32 D_801E4C40; - -void func_801900E0(void) { - D_801E4C40 = 1280; -} - - - -extern s32 D_801E4C40; - -void func_801900F4(void) { - D_801E4C40 = 3796; -} - - - -extern void (*D_80196EA4[])(void); - -void func_80190108(void *a0) { - D_80196EA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80190144); - -extern void func_80190384(void); - void func_80190344(void) { - func_80190384(); - } - - -extern void func_80146C3C(void); - void func_80190364(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80190384); - -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); - void func_801903DC(void *arg0) { - ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80190408); - - -extern void (*D_80196F00[])(void); - -void func_8019044C(void *a0) { - D_80196F00[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_801904B8(s32 arg); - extern void func_80146CA0(void *a0); - void func_80190488(s32 arg0) { - func_801904B8(arg0); - ((void (*)(s32))func_80146CA0)(arg0); - } - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_801904B8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_80190538); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_801734BC", func_8019084C); - diff --git a/src/ov_SC02_005/ov_SC02_005_jr_80178D40.c b/src/ov_SC02_005/ov_SC02_005_jr_80178D40.c new file mode 100644 index 000000000..96c3d7752 --- /dev/null +++ b/src/ov_SC02_005/ov_SC02_005_jr_80178D40.c @@ -0,0 +1,5999 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80193AC8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E3598; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80193ABC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80193B00[]; +extern unsigned short D_80193B08[]; +extern unsigned short D_80193B10[]; +extern unsigned char D_801E35A0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E3598; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80193B18[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E36D4; +extern M2C_UNK D_801E36D8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E3660; +extern void (*D_80193B48[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E36DC[]; +extern u8 D_801E36E4[]; +extern u8 D_801E3694[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80193B50[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80193B6C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80193B74[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80193BDC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80193B80; +extern u8 D_80193B8C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80193C10[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80193C18[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80193C6C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80193CA0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80193C90[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80193CBC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80193D34[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80193D3C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80193D44[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80193D4C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80193D54[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80193D5C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80193D68[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80193D74[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80193D80[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80193D90[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80193DA0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80193DA8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80193DB0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80193DB8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80193DC0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80193DC8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80193DD0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80193DD8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80193DE0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80193DE8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80193DF0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80193DF8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80193E00[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80193E08[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80193E10[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80193E18[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80193E20[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80193E28[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80193E30[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80193E38[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80193E40[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80193E48[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80193E50[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80193E94[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80193E58; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80193EC4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80193F00[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80193F58[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80193F68[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80193F70[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801940D8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801940E4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E2950; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E4BD8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E3E18; +extern short D_801E4C4C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E4C4C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E4C4C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E3E18 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E4C4C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E4BA8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E4BA8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E4C4C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E4C4C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E4274[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E3E1C; + extern s32 D_801E4230; + extern s16 D_801E4234; + extern s16 D_801E4238; + extern s16 D_801E423C; + extern s16 D_801E4240; + extern s32 D_801E4248; + extern s32 D_801E424C; + extern s32 D_801E425C; + extern s16 D_801E4260; + extern s16 D_801E4264; + extern s32 D_801E4268; + extern s32 D_801E4270; + extern s32 D_801E4274[10]; + extern s32 D_801E4A50; + extern s16 D_801E4BA8; + extern s32 D_801E4BD4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E4BA8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E4230); + D_801E4230 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E423C, D_801E4240 ? 0x48 : 0x40); + (*(s16*)&D_801E4C4C) = 2; + break; + case 0: + func_80179B28(D_801E4230); + D_801E4230 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E4234, D_801E4238 ? 0x48 : 0x40); + (*(s16*)&D_801E4C4C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E4A50 != 0) { + func_80179B28(D_801E4230); + D_801E4230 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E4234, D_801E4238 ? 0x48 : 0x40); + (*(s16*)&D_801E4C4C) = 1; + } else { + (*(s16*)&D_801E4C4C) = 3; + } + break; + case 0x32: + func_80179B28(D_801E4230); + D_801E4230 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E4234, + D_801E4238 ? 0x48 : 0x40); + (*(s16*)&D_801E4C4C) = 1; + break; + case 2: + func_80179B28(D_801E4230); + if (D_801E4248 != 0) { + D_801E3E18 = D_801E4248; + D_801E4248 = 0; + (*(s16*)&D_801E4C4C) = 3; + return; + } + (*(s16*)&D_801E4C4C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E4C4C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E4C4C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E4C4C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x1B: + D_801E4268 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E4C4C) = 4; + D_801E3E1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E4C4C) = 5; + D_801E425C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E425C = (s32)func_8017A3B0; + (*(s16*)&D_801E4C4C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x24: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E4C4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E4C4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E4C4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E4C4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E4C4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E4C4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E4C4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E424C); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E424C); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E424C); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E424C); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x4E: + D_801E4270 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x2B: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E4C4C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E4BD4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x34: + (*(s16*)&D_801E4C4C) = 3; + D_801E3E18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E4248 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E4C4C) = 3; + D_801E3E18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E4C4C) = 3; + D_801E3E18 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E3E18 = *(s32 *)(D_801E3E18 + 4); + return; + case 0x37: + (*(s16*)&D_801E4C4C) = 3; + D_801E4234 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E4238 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E4C4C) = 3; + D_801E423C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E4240 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E4C4C) = 3; + D_801E4234 = w1; + D_801E4238 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E4C4C) = 3; + D_801E423C = w2; + D_801E4240 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x43: + D_801E425C = (s32)func_8017A3D8; + D_801E4264 = 0; + (*(s16*)&D_801E4C4C) = 5; + D_801E4260 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E4C4C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E4C4C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E4274; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E4C4C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E4274; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E4C4C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E4274[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E4C4C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E4274; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E4C4C) = 3; + break; + default: + break; + } +Lend: + D_801E3E18 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E4244; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E4244 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E4244; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E4244 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E426C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E426C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E4228; + +s32 func_8017A3B0(void) { + switch (D_801E4228) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E4264; +extern short D_801E4260; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E4264) { + case 0: + func_800D0CA0(1); + D_801E4264 = D_801E4264 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E4260; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E4264 = D_801E4264 + 1; + if (D_801E4264 < 0x1E) { + return 0; + } + D_801E4264 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E42A4; + extern s16 D_801E42A6; + extern s16 D_801E42A8; + extern s16 D_801E429C; + extern s16 D_801E429E; + extern s16 D_801E42A0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E42A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E42A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E42A8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E429C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E429E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E42A0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E422C; +extern u16 D_801E42AC; +extern u16 D_801E42AE; +extern u16 D_801E42B0; +extern s16 D_801E4BD8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E4BD8 = 0; + D_801E422C = 0; + D_801E42AC = D_80126B5E; + D_801E42AE = D_80126B62; + D_801E42B0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80194220[]; + extern s16 D_801E42A4; + extern s16 D_801E429C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80194220[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80194220[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E42A4; + s16 *p78C = &D_801E429C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E4BD8 = 1; + D_801E422C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E424C; + extern SV4_8017B368 D_801E4254; + extern s16 D_801E42A4; + extern s16 D_801E429C; + extern u16 D_80194220; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E424C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E4254; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80194220)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80194220)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E42A4) = loc0; + (*(SV4_8017B368 *)&D_801E429C) = loc1; + D_801E4BD8 = 1; + D_801E422C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80194220[]; + extern s16 D_801E42A4; + extern s16 D_801E42A6; + extern s16 D_801E42A8; + extern s16 D_801E429C; + extern s16 D_801E429E; + extern s16 D_801E42A0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80194220[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80194220[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E42A4; + s16 *p78C = &D_801E429C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E42A6; + v798 = D_801E42A8; + v78C = *p78C; + v78E = D_801E429E; + v790 = D_801E42A0; + __asm__ __volatile__(""); + D_801E4BD8 = 1; + D_801E422C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E422C; +extern s16 D_801E42A4; +extern s16 D_801E42A6; +extern s16 D_801E42A8; +extern s16 D_801E429C; +extern s16 D_801E429E; +extern s16 D_801E42A0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E422C = 0; + D_801E42A4 = (s16) D_80114F30; + D_801E42A6 = (s16) D_80114F34; + D_801E42A8 = (s16) D_80114F38; + D_801E429C = (s16) D_80114F24; + D_801E429E = (s16) D_80114F28; + D_801E42A0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E42BC; +extern s16 D_801E42BE; +extern s16 D_801E42C0; +extern s16 D_801E42C4; +extern s16 D_801E42C6; +extern s16 D_801E42C8; + +void func_8017B824(void) { + D_801E42BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E42BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E42C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E42C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E42C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E42C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E42BC; +extern s16 D_801E42BE; +extern s16 D_801E42C0; +extern s16 D_801E42C4; +extern s16 D_801E42C6; +extern s16 D_801E42C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E42BC; + D_80114F34 = D_801E42BE; + D_80114F38 = D_801E42C0; + D_80114F24 = D_801E42C4; + D_80114F28 = D_801E42C6; + D_80114F2C = D_801E42C8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E42A4), src[8..15] -> (*(S8_8017B8E8 *)&D_801E429C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E42A4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E429C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E42AC; +extern u16 D_801E42AE; +extern u16 D_801E42B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E422C; +extern short D_801E42B4; +extern short D_801E42B6; +extern short D_801E42B8; +extern s16 D_801E42A4; +extern s16 D_801E42A6; +extern s16 D_801E42A8; +extern s16 D_801E429C; +extern s16 D_801E429E; +extern s16 D_801E42A0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E42AC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E42AE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E42B0); + (*(s16 *)&D_801E42B4) = buf[0]; + (*(s16 *)&D_801E42B6) = buf[1]; + (*(s16 *)&D_801E42B8) = buf[2]; + D_801E42A4 = D_80114F30 + buf[0]; + D_801E422C = 0; + D_801E42A6 = D_80114F34 + buf[1]; + D_801E42A8 = D_80114F38 + buf[2]; + D_801E429C = D_80114F24 + buf[0]; + D_801E429E = D_80114F28 + buf[1]; + D_801E42A0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E424C; +extern SV4 D_801E4254; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E4254) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E424C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E4254 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E4254)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E424C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E4254) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E4274[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E4274; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E422C; +extern s16 D_801E4BD8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E422C = D_801E422C + 1; + if (D_801E422C >= 0x1F) { + D_801E4BD8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E422C; +extern s16 D_801E4BD8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E422C = D_801E422C + 1; + if (0x18 < D_801E422C) { + func_8012A4BC(); + D_801E4BD8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E422C; +extern void (*D_801E4270)(void); +extern short D_801E42B4; +extern short D_801E42B6; +extern short D_801E42B8; +extern s16 D_801E4BD8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E422C = D_801E422C + 1; + if (D_801E422C >= 0x19) { + if (D_801E4270 != 0) { + (*D_801E4270)(); + } else { + D_80114F30 = D_80114F30 + D_801E42B4; + D_80114F34 = D_80114F34 + D_801E42B6; + D_80114F38 = D_80114F38 + D_801E42B8; + D_80114F24 = D_80114F24 + D_801E42B4; + D_80114F28 = D_80114F28 + D_801E42B6; + D_80114F2C = D_80114F2C + D_801E42B8; + func_8012A4BC(); + } + D_801E4BD8 = 0; + } +} + + + +extern void (*D_801942C0[])(void); + +void func_8017BE60(void *a0) { + D_801942C0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017BE9C); + +extern void func_8017BF14(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BEC0(s32 arg0, s32 arg1, s16 arg2) { + func_8017BF14(arg0, arg1, arg2, 0); + } + + +extern void func_8017BF14(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BEE8(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF14)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017BF14); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017BF9C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017BFF0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017C048); + + +extern void (*D_80194320[])(void); + +void func_8017C0F4(void *a0) { + D_80194320[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017C130); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017C41C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017C8B0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017CC88); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017CD2C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017CF24); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017CF90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017DE5C); + +extern void func_8012A018(s32 a, s32 b); + extern void func_8017E97C(); + void func_8017DF00(void) { + ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x2); + } + + +extern void func_8012A018(s32 a, s32 b); + extern void func_8017E97C(); + void func_8017DF28(void) { + ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x3); + } + + +extern void func_8012A018(s32 a, s32 b); + extern void func_8017E97C(void); + void func_8017DF50(void) { + ((void (*)(void *, s32))func_8012A018)((void *)func_8017E97C, 0x8); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017DF78); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E014); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E0B4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E190); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E26C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E348); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E424); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E454); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E4F8); + +extern void func_8012A0E0(void); + void func_8017E5AC(void) { + ((s32 (*)(void))func_8012A0E0)(); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E664); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E6FC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E798); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E898); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E8E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E97C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017E9B8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EA74); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EA9C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EAD4); + +void func_8017EB30(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EB38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EB8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017ECAC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017ED28); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EDF8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017EFB4); + + +extern void (*D_8019439C[])(void); + +void func_8017F010(void *a0) { + D_8019439C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F04C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017F09C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801943A4[])(void); + +void func_8017F0C0(void *a0) { + D_801943A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017F0FC(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0x14; + a0[0x15] += 1; + return 0; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F118); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F194); + + +extern void (*D_80194454[])(void); + +void func_8017F1DC(void *a0) { + D_80194454[*(u8 *)((s32)a0 + 0x214)](); +} + + +extern void func_80171B44(s32 *a0); + void func_8017F218(u8 *a0) { + *(s8 *)(a0 + 0x214) += 1; + ((void (*)(void))func_80171B44)(); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F244); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F2C4); + + +// @class: plumbing +// @stuck: none — MATCH (param_1 survives across func_8016F0E4 → lands in $s0; passed to func_80165770) + +extern void func_8016F0E4(void); +extern void func_80165770(void); +extern void func_80175414(s32); + +void func_8017F320(s32 param_1) +{ + func_8016F0E4(); + ((void (*)(s32))func_80165770)(param_1); + ((void (*)(void))func_80175414)(); +} + + + +extern void (*D_80194464[])(void); + +void func_8017F358(void *a0) { + D_80194464[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F394); + + +// @class: plumbing +// @stuck: none — MATCH (expected); simple call + conditional u8 increment + +extern s32 func_80171B4C(s32 a0, s32 a1); + +void func_8017F3C4(int param_1) +{ + if (func_80171B4C(param_1, 0x2) != 0) { + *(unsigned char *)(param_1 + 0x214) += 1; + } + return; +} + + +extern void func_8016F0E4(void); + void func_8017F408(void) { + func_8016F0E4(); + } + + + +extern void (*D_80194470[])(void); + +void func_8017F428(void *a0) { + D_80194470[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F464); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F530); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F5B0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F63C); + + +extern s32 D_801270C8; +extern void func_8017F6A4(void); + +void func_8017F674(void) { + if (D_801270C8 == 6) { + func_8017F6A4(); + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F6A4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F6E8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F748); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F7CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F898); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F924); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017F998); + +extern s32 D_801270C8; +extern void func_8017FA3C(void); + +void func_8017FA0C(void) { + if (*(s32 *)&D_801270C8 == 0xC) { + ((void (*)(void))func_8017FA3C)(); + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FA3C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FA94); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FB14); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FB80); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FC64); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FCFC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FDB4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FE08); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FEA0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FF2C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FF8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8017FFF0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180060); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801800CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018016C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801801DC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180234); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801802CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180328); + + +extern void (*D_801944E8[])(void); + +void func_80180380(void *a0) { + D_801944E8[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180454); + +extern void func_8016EE94(); + extern char func_801804D4[]; + void func_801804AC(void) { + ((void (*)(char *, unsigned int))func_8016EE94)(func_801804D4, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801804D4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180510); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180574); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180610); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018074C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801808B0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180A3C); + +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); + extern s32 func_80180AA4(void); + void func_80180A7C(void) { + ((void (*)(s32, s32))func_8016EDEC)((s32)&func_80180AA4, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180AA4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180AE0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180B18); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180B90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180C04); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180C3C); + + +extern void (*D_8019455C[])(void); + +void func_80180C64(void *a0) { + D_8019455C[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180CA0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180D18); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180DB8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180E08); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180F5C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80180FA8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181028); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181060); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801810F0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018112C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018118C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181238); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181270); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801812B4); + + +extern void (*D_8019458C[])(void); + +void func_801812DC(void *a0) { + D_8019458C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_80181318(void *a0) { + *(s32 *)((s32)a0 + 0x204) = 0x20; + *(u8 *)((s32)a0 + 0x214) += 1; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181330); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181388); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801813F0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018141C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801814B4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181570); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801815FC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018166C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018169C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801816CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801816FC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181900); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181984); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181BE8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181D30); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181F04); + +void func_80181F68(void *a0) { + *(s16 *)((s32)a0 + 0x34) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181F70); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181FA8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80181FE8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018203C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182098); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801820E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801821C8); + +extern void func_801862F0(void * arg0); + void func_80182284(s32 arg0) { + s32 temp_s0 = arg0; + ((void (*)(void))func_801862F0)(); + *(s16 *)(temp_s0 + 0x34) = 0x8; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801822B4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801822EC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801824D0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801827A8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182810); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801828D8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182918); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182998); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182A8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182D80); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182DCC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182E04); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182E78); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182EB0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182F78); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80182FAC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018300C); + +void func_80183060(void *a0) { + *(short *)((char *)a0 + 0x34) = 0x3; + *(int *)((char *)a0 + 0x1c) = 0x20; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183074); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801830F4); + +void func_80183160(void *a0) { + *(s32 *)((char *)a0 + 0x1c) = 0x8; + *(s16 *)((char *)a0 + 0x34) = 0x6; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183174); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801831A4); + +void func_80183200(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183218); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801834C8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183524); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183584); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183610); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801838A8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183B0C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183C7C); + + +extern void (*D_80196320[])(void); + +void func_80183D18(void *a0) { + D_80196320[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183D54); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183D90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80183FCC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801840E8); + +void func_8018415C(void *a0) { + s32 v0; + if (*(s16 *)((s32)a0 + 0xe) == 0) { + *(s16 *)((s32)a0 + 0xae) = -1; + v0 = *(u16 *)((s32)a0 + 0xfc); + *(u16 *)((s32)a0 + 0xfc) = v0 | 2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184184); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801841E0); + + +extern void (*D_801963E8[])(void); + +void func_8018431C(void *a0) { + D_801963E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184358); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184404); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184480); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801844D4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018454C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801846CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184828); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801849E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184A34); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184A8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184C20); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184CA4); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80184D24(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x7); + } + + + +extern void (*D_80196470[])(void); + +void func_80184D44(void *a0) { + D_80196470[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_80184D80(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184D98); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184E30); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80184EC0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185060); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801851E0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185214); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801853CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801853EC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018548C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018550C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801856E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185764); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185858); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801858C4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018592C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185A04); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185A88); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185B38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185D6C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185D84); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185DD0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185E54); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80185E80); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801860F4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186144); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186178); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018622C); + +void func_801862E0(s32 *a0) { + s32 v0 = *(s32 *)((s32)a0 + 0xCC); + *(s16 *)((s32)a0 + 0x98) = 0; + *(s16 *)(v0 + 0x98) = 0; + } + + +void func_801862F0(void * arg0) { + *(short *)((char *)arg0 + 0x98) = 1; + *(short *)(*(int *)((char *)arg0 + 0xcc) + 0x98) = 1; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186304); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186424); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018655C); + +extern s32 func_8012D714(s32 param_1, u32 param_2); + extern u16 D_80126B96; + void func_801865D0(void *arg0) { + if (func_8012D714((s32)arg0, 0x5)) { + D_80126B96 = 0x4005; + } + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186600); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018675C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018687C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018692C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801869E0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186A04); + +extern s32 D_801961B8; + extern s32 D_801961E0; + void func_80186ADC(s32 arg0) { + *(s32 *)(*(s32 *)(arg0 + 0x20) + 0x80) = &D_801961B8; + *(s32 *)(*(s32 *)(*(s32 *)(arg0 + 0xcc) + 0x20) + 0x80) = &D_801961E0; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186B08); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186BB8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186C0C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186C70); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186CA8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186D00); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186D74); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186DE8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186F14); + +void func_80186F58(void *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186F60); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80186F9C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187070); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801870BC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801871E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187280); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187348); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801873FC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187508); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187560); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187664); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801876B0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187768); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801877FC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801878C0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018791C); + +extern void func_80181900(void *a0); + void func_801879DC(void *a0) { + *(s32 *)((s32)a0 + 0xE8) |= 1; + *(s16 *)((s32)a0 + 0xE0) = -1; + ((void (*)(void *))func_80181900)(a0); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187A0C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187A38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187A8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187AD0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187B0C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187B48); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187B7C); + +extern void func_80181FA8(void); + void func_80187BB4(s32 arg0) { + if (*(s16 *)((char *)arg0 + 0x98) == 0) { + ((void (*)(void))func_80181FA8)(); + } + } + + +extern void func_80181FE8(void); + void func_80187BE4(s32 *a0) { + if (*(s32 *)((char *)a0 + 0x94) == 0xB) { + ((void (*)(void))func_80181FE8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187C14); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187C9C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187CD4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187D4C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187D90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187DCC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187E18); + + +extern void func_8012CBF4(s32 a0); + extern void func_80182E04(void *a0); + void func_80187F1C(void *a0) { + if ((((s32 (*)(s32))func_8012CBF4)((s32)a0) & 0x2000) != 0) { + ((void (*)(s32))func_80182E04)((s32)a0); + } + } + + + +extern s32 D_801270C8; +extern void func_80182EB0(void); + +void func_80187F58(void) { + if (D_801270C8 == 22) { + func_80182EB0(); + } +} + + +void func_80187F88(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187F90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80187FCC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018802C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188068); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801880AC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018810C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188150); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188194); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801881F4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801882A8); + +void func_801882E0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801882E8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188324); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801883C4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188404); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801884C8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018850C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801885BC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188690); + +void func_801886BC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801886C4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188720); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018874C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801887CC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188830); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801888EC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018893C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188968); + + +extern void (*D_801964BC[])(void); + +void func_801889D4(void *a0) { + D_801964BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188A10); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80188A5C(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 1); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188A7C); + + +extern void (*D_801964FC[])(void); + +void func_80188BB4(void *a0) { + D_801964FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188BF0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188D1C); + +extern void func_80188F38(void); + void func_80188F08(u8 *a0) { + *(s8 *)(a0 + 0xC1) = 0; + *(s8 *)(a0 + 0xC2) = 0; + *(u16 *)(a0 + 0x5C) &= 0xFFFE; + func_80188F38(); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188F38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80188FF0); + + +extern void (*D_801965B0[])(void); + +void func_80189204(void *a0) { + D_801965B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189240); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189268); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801892CC); + + +extern void (*D_801965C0[])(void); + +void func_801894C8(void *a0) { + D_801965C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189504); + + +extern void (*D_801965D4[])(void); + +void func_801895A4(void *a0) { + D_801965D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801895E0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018968C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801898F4); + + +extern void (*D_8019660C[])(void); + +void func_80189AF4(void *a0) { + D_8019660C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189B30); + + +extern void (*D_801966A0[])(void); + +void func_80189C90(void *a0) { + D_801966A0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801966B8[])(void); + +void func_80189CCC(void *a0) { + D_801966B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80196760[])(void); + +void func_80189D08(void *a0) { + D_80196760[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801967C4[])(void); + +void func_80189D44(void *a0) { + D_801967C4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801967CC[])(void); + +void func_80189D80(void *a0) { + D_801967CC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80196814[])(void); + +void func_80189DBC(void *a0) { + D_80196814[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80196868[])(void); + +void func_80189DF8(void *a0) { + D_80196868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189E34); + +extern s32 func_80132EF4(s32 a0, s32 a1); + void func_80189F44(s32 arg0) { + ((void (*)(s32, s32))func_80132EF4)(arg0, 0x16); + } + + +extern u8 *func_8012913C(s32 a0); + void func_80189F64(void) { + ((void (*)(s32))func_8012913C)(0x15); + } + + +extern s32 func_80132EF4(s32 a0, s32 a1); + void func_80189F84(s32 arg0) { + ((void (*)(s32, s32))func_80132EF4)(arg0, 0xC); + } + + +extern s32 func_80132EF4(s32 a0, s32 a1); + void func_80189FA4(void *a0) { + ((void (*)(void *, int))func_80132EF4)(a0, 0x13); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80189FC4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A0E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A174); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A1D8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A30C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A3B4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A47C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A4C4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A658); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A6A0); + +void func_8018A7D0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A7D8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018A968); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AA88); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AAAC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AB84); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018ABE0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AC10); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AC48); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018ACB4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AD20); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AD8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018ADF0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AEB4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018AF58); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B058); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B16C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B2DC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B300); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B344); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B368); + +void func_8018B408(void) { +} + +extern void func_80132784(s32 a0, s32 a1, u32 a2); + void func_8018B410(u8 *a0) { + ((void (*)(u8 *, u8 *, u16))func_80132784)(a0, *(u8 **)(a0 + 0x64), *(u16 *)(a0 + 0xfe)); + } + + +void func_8018B438(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B440); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B4D0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B554); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B5E0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B638); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B6A0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B6E8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B7A4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B7F8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B8CC); + +extern s32 D_801270C8; +extern void func_801292C8(u8 *a0); + +void func_8018B93C(void) { + if (*(s32 *)&D_801270C8 == 0x13) { + ((void (*)(void))func_801292C8)(); + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018B96C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BA38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BAE4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BB58); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BB9C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BC48); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BCA4); + +extern s32 func_80128DB4(s32 a0, s32 *a1); + s32 func_8018BCEC(void *a0) { + ((void (*)(void *, void *))func_80128DB4)(*(void **)((char *)a0 + 0x20), (void *)((char *)a0 + 0x24)); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BD14); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BD90); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BDD0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BE88); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018BF88(u8 *a0) { + *(s32 *)(a0 + 0x1c) = 0x20; + *(s16 *)(a0 + 0x102) |= 2; + ((void (*)(void *, s32))func_8012AD44)(a0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018BFBC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018BFDC(u8 *a0) { + *(u16 *)(a0 + 0x102) |= 0x1; + ((void (*)(void *, s32))func_8012AD44)(a0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C008); + + +extern void (*D_801968F4[])(void); + +void func_8018C08C(void *a0) { + D_801968F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C0C8); + + +extern void (*D_80196B80[])(void); + +void func_8018C108(void *a0) { + D_80196B80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C144); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C1C0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C204); + + +extern void (*D_80196B8C[])(void); + +void func_8018C274(void *a0) { + D_80196B8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C2B0); + + +extern void (*D_80196B98[])(void); + +void func_8018C358(void *a0) { + D_80196B98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C394); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018C3C4(void * arg0) { + *(s8 *)((char *)arg0 + 0xfc) = 0x8; + ((void (*)(s32, s32))func_8012AD44)((int)arg0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C3EC); + + +extern void (*D_80196BA0[])(void); + +void func_8018C418(void *a0) { + D_80196BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C454); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C598); + + +extern void (*D_80196BB0[])(void); + +void func_8018C66C(void *a0) { + D_80196BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C6A8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C758); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C84C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C928); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018C978); + +extern void func_8012C218(void *a0); + void func_8018CA1C(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CA3C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CA74); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CB70); + +extern void func_8012C218(void *a0); + void func_8018CBF8(s32 *a0) { + if (*(s16 *)((char *)a0 + 0x98) == 0) { + ((void (*)(void))func_8012C218)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CC28); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CCF8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CD80); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CE04); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CEE0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018CF58); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D04C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D144); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D21C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D270); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D318); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D43C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D488); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D4D8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D574); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D608); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D6B0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D73C); + +void func_8018D7DC(void *a0) { + *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D7F0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D8A8); + +void func_8018D904(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D918); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D964); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018D9A4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DA40); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DA8C); + +void func_8018DAD8(void) { +} + + +extern void (*D_80196C9C[])(void); + +void func_8018DAE0(void *a0) { + D_80196C9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 D_80196C14; + +void func_8018DB1C(s32 arg0) { + *(s32 *)(arg0 + 0x58) = &D_80196C14; + *(s32 *)(arg0 + 0x1C) = 0x18; + *(s16 *)(arg0 + 0x2) += 1; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DB40); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DCD8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DDFC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DE5C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DEB8); + + +extern void (*D_80196CB0[])(void); + +void func_8018DF88(void *a0) { + D_80196CB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018DFC4); + +void func_8018E22C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E234); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E288); + + +extern void (*D_80196CC0[])(void); + +void func_8018E400(void *a0) { + D_80196CC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018E43C(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E450); + +void func_8018E6D4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E6DC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E730); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018E7E4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018EA04); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018EB60); + + +extern void (*D_80196CD4[])(void); + +void func_8018ECB8(void *a0) { + D_80196CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018ECF4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018ED84); + + +extern void (*D_80196CDC[])(void); + +void func_8018EDF8(void *a0) { + D_80196CDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018EE34); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018EF20); + +extern void func_8012C218(void *a0); + void func_8018EF90(void) { + ((void (*)(void))func_8012C218)(); + } + + + +extern void (*D_80196CE8[])(void); + +void func_8018EFB0(void *a0) { + D_80196CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018EFEC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F164); + +extern void func_8012C218(void *a0); + void func_8018F1D4(void) { + ((s32 (*)(void))func_8012C218)(); + } + + + +extern void (*D_80196CF4[])(void); + +void func_8018F1F4(void *a0) { + D_80196CF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F230); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F2C4); + +extern void func_8013C414(void *a0, void *a1); +extern s32 D_8019AA5C; +extern s32 D_801D91D4; + +void func_8018F414(void) { + func_8013C414(&D_8019AA5C, &D_801D91D4); +} + + +extern void func_8013C414(void *a0, void *a1); + extern s32 D_8019AA5C; + extern s32 D_801DA5FC; + void func_8018F444(void) { + func_8013C414(&D_8019AA5C, &D_801DA5FC); + } + + +extern void func_8013C414(void *a0, void *a1); + extern s32 D_8019AA5C; + extern s32 D_801DB658; + void func_8018F474(void) { + func_8013C414(&D_8019AA5C, &D_801DB658); + } + + +extern void func_8013C414(void *a0, void *a1); +extern s32 D_8019AA5C; +extern s32 D_801DC180; + +void func_8018F4A4(void) { + func_8013C414(&D_8019AA5C, &D_801DC180); +} + + +extern void func_8013C414(void *a0, void *a1); +extern s32 D_8019AA5C; +extern s32 D_801DCD04; + +void func_8018F4D4(void) { + func_8013C414(&D_8019AA5C, &D_801DCD04); +} + + +extern void func_8013C414(void *a0, void *a1); +extern s32 D_8019AA5C; +extern s32 D_801DD2D4; + +void func_8018F504(void) { + func_8013C414(&D_8019AA5C, &D_801DD2D4); +} + + +extern void func_8013C414(void *a0, void *a1); + extern s32 D_8019AA5C; + extern s32 D_801DDD30; + void func_8018F534(void) { + func_8013C414(&D_8019AA5C, &D_801DDD30); + } + + + +extern void func_8013C414(void *a0, void *a1); +extern s32 D_8019AA5C; +extern s32 D_801DE674; + +void func_8018F564(void) { + func_8013C414(&D_8019AA5C, &D_801DE674); +} + + +extern void func_8013C414(void *a0, void *a1); + extern s32 D_8019AA5C; + extern s32 D_801DF3B4; + void func_8018F594(void) { + func_8013C414(&D_8019AA5C, &D_801DF3B4); + } + + +extern void func_8013C360(void *a0); + extern s32 D_801D91D4; + void func_8018F5C4(void) { + func_8013C360(&D_801D91D4); + } + + +extern void func_8013C360(void *a0); + extern s32 D_801DA5FC; + void func_8018F5EC(void) { + func_8013C360(&D_801DA5FC); + } + + +extern void func_8013C360(void *a0); + extern s32 D_801DB658; + void func_8018F614(void) { + func_8013C360(&D_801DB658); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F63C); + +extern void func_8013C360(void *a0); + extern s32 D_801DCD04; + void func_8018F664(void) { + func_8013C360(&D_801DCD04); + } + + +extern void func_8013C360(void *a0); + extern s32 D_801DD2D4; + void func_8018F68C(void) { + func_8013C360(&D_801DD2D4); + } + + +extern void func_8013C360(void *); + extern s32 D_801DDD30; + void func_8018F6B4(void) { + func_8013C360(&D_801DDD30); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F6DC); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F704); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F72C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F894); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F91C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018F944); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FA34); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FAE0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FB8C); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FC38); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FCE4); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FE18); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FEA0); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8018FFC4); + +void func_80190068(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0xC; + } + + + +extern void (*D_80196CFC[])(void); + +void func_80190074(void *a0) { + D_80196CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801900B0); + + +extern s32 D_801E4C40; + +void func_801900E0(void) { + D_801E4C40 = 1280; +} + + + +extern s32 D_801E4C40; + +void func_801900F4(void) { + D_801E4C40 = 3796; +} + + + +extern void (*D_80196EA4[])(void); + +void func_80190108(void *a0) { + D_80196EA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80190144); + +extern void func_80190384(void); + void func_80190344(void) { + func_80190384(); + } + + +extern void func_80146C3C(void); + void func_80190364(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80190384); + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_801903DC(void *arg0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80190408); + + +extern void (*D_80196F00[])(void); + +void func_8019044C(void *a0) { + D_80196F00[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_801904B8(s32 arg); + extern void func_80146CA0(void *a0); + void func_80190488(s32 arg0) { + func_801904B8(arg0); + ((void (*)(s32))func_80146CA0)(arg0); + } + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_801904B8); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_80190538); + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80178D40", func_8019084C); + + diff --git a/src/ov_SC02_011/ov_SC02_011_jr_801734BC.c b/src/ov_SC02_011/ov_SC02_011_jr_801734BC.c index 7fcc4c521..f28c846d3 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_801734BC.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_801734BC.c @@ -3104,2631 +3104,3 @@ void func_80178D18(void) { D_801EBA7C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EB124; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EB124 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EB124; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EB124 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EB14C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EB14C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EB108; - -s32 func_8017A3B0(void) { - switch (D_801EB108) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EB184; - extern s16 D_801EB186; - extern s16 D_801EB188; - extern s16 D_801EB17C; - extern s16 D_801EB17E; - extern s16 D_801EB180; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EB184, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EB186, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EB188, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EB17C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EB17E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EB180, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EB10C; -extern u16 D_801EB18C; -extern u16 D_801EB18E; -extern u16 D_801EB190; -extern s16 D_801EBA08; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EBA08 = 0; - D_801EB10C = 0; - D_801EB18C = D_80126B5E; - D_801EB18E = D_80126B62; - D_801EB190 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80194670[]; - extern s16 D_801EB184; - extern s16 D_801EB17C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80194670[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80194670[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EB184; - s16 *p78C = &D_801EB17C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EBA08 = 1; - D_801EB10C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EB12C; - extern SV4_8017B368 D_801EB134; - extern s16 D_801EB184; - extern s16 D_801EB17C; - extern u16 D_80194670; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EB12C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EB134; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80194670)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80194670)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EB184) = loc0; - (*(SV4_8017B368 *)&D_801EB17C) = loc1; - D_801EBA08 = 1; - D_801EB10C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80194670[]; - extern s16 D_801EB184; - extern s16 D_801EB186; - extern s16 D_801EB188; - extern s16 D_801EB17C; - extern s16 D_801EB17E; - extern s16 D_801EB180; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80194670[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80194670[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EB184; - s16 *p78C = &D_801EB17C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EB186; - v798 = D_801EB188; - v78C = *p78C; - v78E = D_801EB17E; - v790 = D_801EB180; - __asm__ __volatile__(""); - D_801EBA08 = 1; - D_801EB10C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EB10C; -extern s16 D_801EB184; -extern s16 D_801EB186; -extern s16 D_801EB188; -extern s16 D_801EB17C; -extern s16 D_801EB17E; -extern s16 D_801EB180; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EB10C = 0; - D_801EB184 = (s16) D_80114F30; - D_801EB186 = (s16) D_80114F34; - D_801EB188 = (s16) D_80114F38; - D_801EB17C = (s16) D_80114F24; - D_801EB17E = (s16) D_80114F28; - D_801EB180 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EB19C; -extern s16 D_801EB19E; -extern s16 D_801EB1A0; -extern s16 D_801EB1A4; -extern s16 D_801EB1A6; -extern s16 D_801EB1A8; - -void func_8017B824(void) { - D_801EB19C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EB19E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EB1A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EB1A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EB1A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EB1A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EB19C; -extern s16 D_801EB19E; -extern s16 D_801EB1A0; -extern s16 D_801EB1A4; -extern s16 D_801EB1A6; -extern s16 D_801EB1A8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EB19C; - D_80114F34 = D_801EB19E; - D_80114F38 = D_801EB1A0; - D_80114F24 = D_801EB1A4; - D_80114F28 = D_801EB1A6; - D_80114F2C = D_801EB1A8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EB184), src[8..15] -> (*(S8_8017B8E8 *)&D_801EB17C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EB184) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EB17C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EB18C; -extern u16 D_801EB18E; -extern u16 D_801EB190; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EB10C; -extern short D_801EB194; -extern short D_801EB196; -extern short D_801EB198; -extern s16 D_801EB184; -extern s16 D_801EB186; -extern s16 D_801EB188; -extern s16 D_801EB17C; -extern s16 D_801EB17E; -extern s16 D_801EB180; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EB18C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EB18E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EB190); - (*(s16 *)&D_801EB194) = buf[0]; - (*(s16 *)&D_801EB196) = buf[1]; - (*(s16 *)&D_801EB198) = buf[2]; - D_801EB184 = D_80114F30 + buf[0]; - D_801EB10C = 0; - D_801EB186 = D_80114F34 + buf[1]; - D_801EB188 = D_80114F38 + buf[2]; - D_801EB17C = D_80114F24 + buf[0]; - D_801EB17E = D_80114F28 + buf[1]; - D_801EB180 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EB12C; -extern SV4 D_801EB134; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EB134) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EB12C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EB134 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EB134)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EB12C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EB134) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EB154[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EB154; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EB10C; -extern s16 D_801EBA08; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EB10C = D_801EB10C + 1; - if (D_801EB10C >= 0x1F) { - D_801EBA08 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EB10C; -extern s16 D_801EBA08; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EB10C = D_801EB10C + 1; - if (0x18 < D_801EB10C) { - func_8012A4BC(); - D_801EBA08 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EB10C; -extern void (*D_801EB150)(void); -extern short D_801EB194; -extern short D_801EB196; -extern short D_801EB198; -extern s16 D_801EBA08; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EB10C = D_801EB10C + 1; - if (D_801EB10C >= 0x19) { - if (D_801EB150 != 0) { - (*D_801EB150)(); - } else { - D_80114F30 = D_80114F30 + D_801EB194; - D_80114F34 = D_80114F34 + D_801EB196; - D_80114F38 = D_80114F38 + D_801EB198; - D_80114F24 = D_80114F24 + D_801EB194; - D_80114F28 = D_80114F28 + D_801EB196; - D_80114F2C = D_80114F2C + D_801EB198; - func_8012A4BC(); - } - D_801EBA08 = 0; - } -} - - - -extern void (*D_80194710[])(void); - -void func_8017BE60(void *a0) { - D_80194710[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80194734[])(void); - -void func_8017BEBC(void *a0) { - D_80194734[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_8019473C[])(void); - -void func_8017C150(void *a0) { - D_8019473C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80194728; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80194728, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017C360); - - -extern void (*D_80194750[])(void); - -void func_8017C4BC(void *a0) { - D_80194750[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017C4F8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017C558); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017C688); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017CA14); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017CC8C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017CDD4); - - -extern void (*D_80194868[])(void); - -void func_8017CF54(void *a0) { - D_80194868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017CF90); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017CFDC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D0D0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D150); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D204); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D270); - -extern void func_8012C218(void *a0); - void func_8017D2FC(void) { - ((void (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D31C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D370); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D50C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017D710); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017DB04); - - -extern void (*D_80194B68[])(void); - -void func_8017DC84(void *a0) { - D_80194B68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017DCC0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017DD34); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017DE10); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E024); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E0F8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E1C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E220); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E318); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E358); - - -extern void (*D_80194B8C[])(void); - -void func_8017E380(void *a0) { - D_80194B8C[*(u8 *)((s32)a0 + 0x214)](); -} - - -extern void func_80147060(u8 *a0); - extern void func_80171A1C(u8 *a0); - extern void func_8017E3F4(s32 a0); - void func_8017E3BC(s32 a0) { - s32 s0 = a0; - ((void (*)(s32 *))func_80147060)((s32 *)s0); - ((void (*)(s32))func_80171A1C)(s0); - ((void (*)(s32))func_8017E3F4)(s0); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E3F4); - -void func_8017E434(void) { -} - -extern void func_80174684(void *); - extern s32 func_8017E464; - void func_8017E43C(void) { - func_80174684(&func_8017E464); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E464); - -extern void func_80147060(u8 *a0); - extern void func_80171A1C(u8 *a0); - extern void func_8017E4D8(s32 a0); - void func_8017E4A0(s32 a0) { - s32 s0 = a0; - ((void (*)(s32 *))func_80147060)((s32 *)s0); - ((void (*)(s32))func_80171A1C)(s0); - ((void (*)(s32))func_8017E4D8)(s0); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E4D8); - -void func_8017E518(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E520); - - -extern void (*D_80194C58[])(void); - -void func_8017E564(void *a0) { - D_80194C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E5A0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E5C8); - -void func_8017E5E8(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E5F0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017E72C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017EAC0); - - -extern void (*D_80194C98[])(void); - -void func_8017EB00(void *a0) { - D_80194C98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017EB3C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017ECB0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017ED98); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F0E0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F160); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F1AC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F2AC); - - -extern void (*D_80194CB8[])(void); - -void func_8017F2F0(void *a0) { - D_80194CB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F32C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F458); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F534); - - -extern void (*D_80194CC8[])(void); - -void func_8017F578(void *a0) { - D_80194CC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F5B4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F630); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F67C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017F7B4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FA94); - - -extern void (*D_80194CD4[])(void); - -void func_8017FAD8(void *a0) { - D_80194CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FB14); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FBF8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FCA0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FD2C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FD9C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FE64); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FF34); - - -extern void (*D_80194E58[])(void); - -void func_8017FF9C(void *a0) { - D_80194E58[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8017FFD8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180010); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180060); - -extern void func_80171A1C(u8 *a0); - void func_801800C4(s32 *param) { - param[0x200 / sizeof(s32)] = 1; - ((void (*)(void))func_80171A1C)(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801800E8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018015C); - -DEFINE_func_80180210() /* dedup: shared engine-core @0x80180210 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180218); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180258); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801802C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180328); - -void func_80180418(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180420); - - -extern void (*D_80194EB0[])(void); - -void func_8018045C(void *a0) { - D_80194EB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180498); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801804E8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180544); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801805C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180730); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018077C); - - -extern void (*D_80194EC4[])(void); - -void func_80180A88(void *a0) { - D_80194EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180AC4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180B04); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180B74); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180C00); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180CD4); - - -extern void (*D_80194ED8[])(void); - -void func_80180D28(void *a0) { - D_80194ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180D64); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180E18); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180E74); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80180FE4); - - -extern void (*D_80194FA4[])(void); - -void func_80181A64(void *a0) { - D_80194FA4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181AA0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80181AE4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80194FAC[])(void); - -void func_80181B08(void *a0) { - D_80194FAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181B44); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181B84); - -extern void func_800D1EBC(void); - void func_80181BF8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80194FB8[])(void); - -void func_80181C18(void *a0) { - D_80194FB8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80181C54(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - - -extern void (*D_80194FC4[])(void); - -void func_80181CD0(void *a0) { - D_80194FC4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181D0C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80181D50(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_80194FD4; - -void func_80181D74(void) { - ((void (*)(s32 *, s32))func_8016EE40)(&D_80194FD4, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_80194FE0; - -void func_80181D9C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80194FE0, 0x1000000); -} - - - -extern void (*D_8019501C[])(void); - -void func_80181DC4(void *a0) { - D_8019501C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181E00); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181E40); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181EF4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181F6C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80181FA0); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_80194FF4; - -void func_80182090(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80194FF4, 0x1000000); -} - - - -extern void (*D_80195030[])(void); - -void func_801820B8(void *a0) { - D_80195030[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801820F4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182148); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801821AC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801821FC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182268); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801822F4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182344); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182380); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801823B8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801823EC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182488); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182564); - -extern void func_8012A568(void (*a0)(void)); - extern s32 func_801823EC(s32 a0); - void func_80182614(void) { - ((void (*)(void *))func_8012A568)((void *)func_801823EC); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018263C); - - -extern void (*D_80195048[])(void); - -void func_801826D8(void *a0) { - D_80195048[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182714); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182A08); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182A9C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182AF8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182B88); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182D60); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182DB8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182E68); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182EC8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182FA8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80182FF0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183054); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183080); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018312C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183178); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801834EC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183558); - -extern void func_8018452C(void); - void func_8018360C(short *param) { - param[1] = 0xB; - func_8018452C(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183630); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183954); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183994); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183B30); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80183C2C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801840C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184134); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018418C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184414); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018446C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018452C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184590); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801845C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801845F4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184738); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018479C); - -extern void func_8012A568(void (*a0)(void)); - extern s32 func_8018263C(s32); - void func_801847C8(void) { - ((void (*)(void *))func_8012A568)((void *)func_8018263C); - } - - -extern void func_8012A568(void (*a0)(void)); - extern s32 func_801823EC(s32 a0); - void func_801847F0(void) { - ((void (*)(void *))func_8012A568)((void *)func_801823EC); - } - - -extern void func_80184918(s32 arg0, s32 arg1); - void func_80184818(s32 arg0) { - func_80184918(arg0, 0x1D); - } - - -extern void func_80184918(s32 arg0, s32 arg1); - void func_80184838(s32 arg0) { - func_80184918(arg0, 0x1E); - } - - -extern void func_80029124(s32 arg0, s32 arg1); - void func_80184858(void) { - func_80029124(0x9E, 1); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018487C); - -void func_8018490C(s32 *a0, s32 a1, s16 a2) { - *(s32 *)((s32)a0 + 0xCC) = a1; - *(s16 *)((s32)a0 + 0x102) = a2; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184918); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184964); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801849D4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184A28); - -extern s32 func_800D0CE0(void); - s32 func_80184A34(void) { - return func_800D0CE0() != 0; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184A54); - - -extern void (*D_801957F8[])(void); - -void func_80184ACC(void *a0) { - D_801957F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184B08); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184C0C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184C98); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184D50); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184E00); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80184F48); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185048); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185098); - - -extern void (*D_801958B8[])(void); - -void func_80185120(void *a0) { - D_801958B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018515C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185268); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801852B0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185388); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801853CC); - -void func_80185464(void *a0) { - s16 v0; - v0 = *(s16 *)((char *)a0 + 0xfc); - if (!v0) { - *(s16 *)((char *)a0 + 0x2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185480); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801854DC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185548); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018567C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018576C); - - -extern void (*D_801958E8[])(void); - -void func_801859E0(void *a0) { - D_801958E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185A1C); - -void func_80185A84(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185A8C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185AAC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185BA4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185BF4); - -extern void func_8001AAA0(s32 arg); - void func_80185C00(void) { - func_8001AAA0(0x2F); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185C20); - - -extern void (*D_80195948[])(void); - -void func_80185C40(void *a0) { - D_80195948[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185C7C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185E20); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80185FA0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186070); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186184); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801861FC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186250); - -s32 func_80186290(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x6; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801862A4); - -extern s32 func_80188168(void); - void func_80186354(void) { - func_80188168(); - } - - -extern s32 func_8013CAE8(void); - void func_80186374(void) { - func_8013CAE8(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186394); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801863D4); - - -extern void (*D_80195CC4[])(void); - -void func_801863F4(void *a0) { - D_80195CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186430); - -void func_80186548(s32 *a0) { - *(s32 *)((s32)a0 + 0x48) = 0x1400; - *(s32 *)((s32)a0 + 0x14) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186558); - -void func_801865B0(s32 arg0) { - s32 *p = *(s32 **)((s32)arg0 + 0xcc); - *(u16 *)((s32)p + 0x8) = *(u16 *)((s32)arg0 + 0x6); - *(s16 *)((s32)p + 0xa) = *(u16 *)((s32)arg0 + 0xa) - 0xe0; - *(s16 *)((s32)p + 0xc) = *(u16 *)((s32)arg0 + 0xe) - 0x10; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801865E4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186680); - -extern s32 func_8017E358(void); - void func_801866E8(void) { - func_8017E358(); - } - - -extern void func_8017E43C(void); - void func_80186708(void) { - func_8017E43C(); - } - - -void func_80186728(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - -void func_80186734(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x3; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186740); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80186790(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x634, 0); - } - - -void func_801867BC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0; - } - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_80186818(u8 *a0); -extern void (*D_80195D18[])(int); - -void func_801867CC(int param_1) -{ - ((void (*)(void))func_80186818)(); - D_80195D18[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186818); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186868); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186AA0); - - -extern void (*D_80195D40[])(void); - -void func_80186AE0(void *a0) { - D_80195D40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186B1C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186BB0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186C30); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186CB4); - -void func_80186D3C(void) { -} - -void func_80186D44(void) { -} - -extern s32 func_80128ED8(void *a0, void *a1); - extern s32 D_801EB518; - void func_80186D4C(void *arg0) { - ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801EB518); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186D78); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186E24); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186E94); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186F24); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80186F74); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187018); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018707C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801870D0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187110); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801871CC); - -extern s32 func_80186740(void); - void func_80187234(void) { - func_80186740(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187254); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801872B4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018734C); - - -extern void (*D_80195D50[])(void); - -void func_801873FC(void *a0) { - D_80195D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187438); - -void func_801874A0(void) { -} - - -extern void (*D_80195D58[])(void); - -void func_801874A8(void *a0) { - D_80195D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801874E4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018754C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187614); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187654); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187724); - - -extern void (*D_80195DC4[])(void); - -void func_80187784(void *a0) { - D_80195DC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801877C0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801877C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187800); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187838); - - -extern void (*D_80195F14[])(void); - -void func_8018788C(void *a0) { - D_80195F14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801878C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018797C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187CE8); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80195FD8[])(); - -void func_80187D90(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80195FD8[*(u16 *)(param_1 + 2)](); - } -} - - -extern s32 func_8012AD50(void *a0); - void func_80187DDC(u8 *a0) { - *(u16 *)(a0 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187E08); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80187FA0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188034); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188114); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188168); - - -// @class: remat -// @stuck: none — MATCH. &D_800C7C60 CSE'd once via pointer local `p` so the same reg feeds the *p=0x18 store AND arg5; writing D_800C7C60=0x18 directly would emit a 2nd address materialization (+1 ins). Mirrors matched sibling func_80128998. - -extern int D_800C7C60; -extern int *D_800C7C64; -extern int D_800A2E20; -extern int D_800AEFA0; -extern int D_801E8C34; - -extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); - -int func_801881BC(int arg0) -{ - int *p = &D_800C7C60; - *p = 0x18; - D_800C7C64 = &D_800A2E20; - ((void (*)(int, int, int *, int, int *))func_8001ABBC)(0, 0, &D_800AEFA0, D_801E8C34, p); -} - - -extern s32 D_8012704C; - void func_80188214(void) { - D_8012704C = 0x1; - } - - - -extern s32 D_801EBA74; - -void func_80188228(void) { - D_801EBA74 = 640; -} - - - -extern s32 D_801EBA74; - -void func_8018823C(void) { - D_801EBA74 = 272; -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188250); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801883C8(void) { - func_8002D4C8(0x6AA, 0); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801883EC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188430); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188508); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188554); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188654); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801887C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801887F8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018898C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188A10); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188D54); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188D80); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188DC8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188DF4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80188E3C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189050); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801890C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801891E8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189324); - - -extern void (*D_801960D4[])(void); - -void func_801894E0(void *a0) { - D_801960D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018951C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801895A0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801895CC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189620); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018964C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189674); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801896B4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018974C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801897A4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018983C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189880); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801898C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801899B4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189A50); - - -extern void (*D_801961D4[])(void); - -void func_80189B28(void *a0) { - D_801961D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189B64); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189C20); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189C90); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189E00); - -extern s32 func_800D0CE0(void); - extern void func_8012C218(void *a0); - void func_80189EF4(void *a0) { - if (((s32 (*)(s32))func_800D0CE0)((s32)a0) == 1) { - ((void (*)(s32))func_8012C218)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80189F30); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A084); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A184); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A1A4); - -extern void func_8012A4BC(void); - void func_8018A264(void) { - ((s32 (*)(void))func_8012A4BC)(); - } - - - -extern void (*D_801D6268[])(void); - -void func_8018A284(void *a0) { - D_801D6268[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A2C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A438); - - -extern void (*D_801D626C[])(void); - -void func_8018A5E4(void *a0) { - D_801D626C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8018A620(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A640); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A698); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A708); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A72C); - - -extern s16 D_801EB6DC; - extern s16 D_801EB6DE; - extern s16 D_801EB6E0; - extern s16 D_801EB6E2; - void func_8018A7CC(s32 arg0, s32 arg1, s32 arg2) { - D_801EB6DC = *(u16 *)((s32)arg0 + 0x0); - D_801EB6DE = *(u16 *)((s32)arg0 + 0x2); - D_801EB6E0 = arg1; - D_801EB6E2 = arg2; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A7FC); - - -extern s16 D_801EB6E2; - void func_8018A874(s32 arg0) { - *(s16 *)((s32)&D_801EB6E2 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A890); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A8E8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A9BC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018A9F8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AA44); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AB20); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018ADE4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AE08); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AE30); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AEB8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AF24); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018AF94); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B00C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B058); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B174); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B1B0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B2C4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B5A8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B60C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B76C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018B950); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BA0C); - -extern void func_8012C098(void); - void func_8018BAB8(void) { - func_8012C098(); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BAD8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BB44); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BBCC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BC10); - - -void func_8018BCB4(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BCC4); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801DEB58; - -void func_8018BD70(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801DEB58)) { - func_8012A828(arg0, &D_801DEB58); - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BDB8); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801DEFE0; - -void func_8018BE00(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801DEFE0); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018BEF0 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_8018BEF0(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801DEF38; - -s32 func_8018BE40(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_8018BEF0(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801DEF38); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801DECF8; - -void func_8018BEF0(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801DECF8); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_8018BF4C(void *a0) { - *(short *)((char *)a0 + 0x2) = 5; - *(int *)((char *)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BF60); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018BFBC); - - -extern void (*D_801D6FDC[])(void); - -void func_8018C040(void *a0) { - D_801D6FDC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801D7024[])(void); - -void func_8018C07C(void *a0) { - D_801D7024[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern void func_80143994(s32 a0, s32 a1); -extern int D_801D6FE4; - -void func_8018C0B8(int param_1) -{ - int iVar1; - - iVar1 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = iVar1; - if (iVar1 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - *(short *)(param_1 + 2) = 1; - func_8001CA88(*(int *)(param_1 + 0x20), &D_801D6FE4); - func_80143994(param_1, 0x1000); - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C11C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C174); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C1E0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C31C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C388); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C3C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C424); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C47C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C534); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C5A4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C734); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C7B8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C874); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018C968); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CA04); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CA64); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CAC4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CB20); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CB70); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CBBC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CC6C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CC9C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CEB0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CF04); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CFAC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018CFF4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D0C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D128); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D19C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D1D8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D218); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D288); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D370); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D52C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D574); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D720); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D820); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018D8B8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DAA8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DBF4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DD60); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DDD0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DE30); - - -extern void (*D_801DF7B0[])(void); - -void func_8018DF08(void *a0) { - D_801DF7B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018DF44); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E014); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E0AC); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E208); - - -extern void (*D_801DF818[])(void); - -void func_8018E358(void *a0) { - D_801DF818[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018E394(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 1; - *(s32 *)((char *)a0 + 0x1c) = 2; - *(s8 *)((char *)a0 + 0xfc) = 1; - *(s8 *)((char *)a0 + 0xfe) = 2; - *(s8 *)((char *)a0 + 0xfd) = 0; - *(s8 *)((char *)a0 + 0xff) = 4; - *(s16 *)((char *)a0 + 0xdc) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E3C8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E420); - - -extern void (*D_801DF84C[])(void); - -void func_8018E4BC(void *a0) { - D_801DF84C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E4F8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E5E4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E678); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E780); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018E8A0); - - -extern void (*D_801DF89C[])(void); - -void func_8018EBEC(void *a0) { - D_801DF89C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018EC28); - - -extern void (*D_801E33D8[])(void); - -void func_8018ECA8(void *a0) { - D_801E33D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018ECE4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018EDB8); - -void func_8018EDE0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018EDE8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018EF34); - - -extern void func_8012C218(void *a0); - s32 func_8018F054(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F080); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F090); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F0A0); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018F0E0(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F114); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F138); - - -extern void (*D_801E3400[])(void); - -void func_8018F19C(void *a0) { - D_801E3400[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F1D8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F260); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F320); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F390); - - -extern s32 D_801EB908; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_8018F488(s32 a0, s32 a1) { - D_801EB908 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F4B8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F6FC); - - -extern void (*D_801E3B1C[])(void); - -void func_8018F99C(void *a0) { - D_801E3B1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018F9D8); - - -extern void (*D_801E4210[])(void); - -void func_8018FB50(void *a0) { - D_801E4210[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E4224[])(void); - -void func_8018FB8C(void *a0) { - D_801E4224[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801E41FC; -extern s32 D_801E4208; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_8018FBC8(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801E41FC); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801E4208, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801E4218; - -void func_8018FCA8(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801E4218); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801E44CC; - -void func_8018FDC4(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801E44CC); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018FE20); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8018FE94); - - -extern void (*D_801E4858[])(void); - -void func_801900B4(void *a0) { - D_801E4858[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801900F0); - - -extern void (*D_801E8654[])(void); - -void func_80190184(void *a0) { - D_801E8654[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801901C0); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190298); - -void func_801902C0(void) { -} - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801E8604; - void func_801902C8(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801E8604); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801902F4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190334); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801903F4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190460); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190470); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190480); - -extern void func_800296F8(void); - s32 func_80190498(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801904BC); - - -extern void (*D_801E86CC[])(void); - -void func_80190610(void *a0) { - D_801E86CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_8019064C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190748); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_801909D8); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190B6C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190BC4); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190C40); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_801734BC", func_80190C84); - diff --git a/src/ov_SC02_011/ov_SC02_011_jr_80178D40.c b/src/ov_SC02_011/ov_SC02_011_jr_80178D40.c new file mode 100644 index 000000000..db2e5fbae --- /dev/null +++ b/src/ov_SC02_011/ov_SC02_011_jr_80178D40.c @@ -0,0 +1,6098 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80193F18[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EA478; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80193F0C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80193F50[]; +extern unsigned short D_80193F58[]; +extern unsigned short D_80193F60[]; +extern unsigned char D_801EA480[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EA478; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80193F68[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EA5B4; +extern M2C_UNK D_801EA5B8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EA540; +extern void (*D_80193F98[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EA5BC[]; +extern u8 D_801EA5C4[]; +extern u8 D_801EA574[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80193FA0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80193FBC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80193FC4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8019402C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80193FD0; +extern u8 D_80193FDC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80194060[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80194068[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801940BC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801940F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801940E0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8019410C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80194184[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8019418C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80194194[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8019419C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801941A4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801941AC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801941B8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801941C4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801941D0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801941E0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801941F0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801941F8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80194200[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80194208[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80194210[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80194218[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80194220[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80194228[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80194230[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80194238[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80194240[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80194248[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80194250[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80194258[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80194260[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80194268[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80194270[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80194278[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80194280[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80194288[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80194290[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80194298[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801942A0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801942E4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801942A8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80194314[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80194350[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801943A8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801943B8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801943C0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80194528[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80194534[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E9AAC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EBA08; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EACF8; +extern short D_801EBA7C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EBA7C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EBA7C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EACF8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EBA7C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EB9D8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EB9D8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EBA7C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EBA7C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EB154[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EACFC; + extern s32 D_801EB110; + extern s16 D_801EB114; + extern s16 D_801EB118; + extern s16 D_801EB11C; + extern s16 D_801EB120; + extern s32 D_801EB128; + extern s32 D_801EB12C; + extern s32 D_801EB13C; + extern s16 D_801EB140; + extern s16 D_801EB144; + extern s32 D_801EB148; + extern s32 D_801EB150; + extern s32 D_801EB154[10]; + extern s32 D_801EB920; + extern s16 D_801EB9D8; + extern s32 D_801EBA04; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EB9D8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EB110); + D_801EB110 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EB11C, D_801EB120 ? 0x48 : 0x40); + (*(s16*)&D_801EBA7C) = 2; + break; + case 0: + func_80179B28(D_801EB110); + D_801EB110 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EB114, D_801EB118 ? 0x48 : 0x40); + (*(s16*)&D_801EBA7C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EB920 != 0) { + func_80179B28(D_801EB110); + D_801EB110 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EB114, D_801EB118 ? 0x48 : 0x40); + (*(s16*)&D_801EBA7C) = 1; + } else { + (*(s16*)&D_801EBA7C) = 3; + } + break; + case 0x32: + func_80179B28(D_801EB110); + D_801EB110 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EB114, + D_801EB118 ? 0x48 : 0x40); + (*(s16*)&D_801EBA7C) = 1; + break; + case 2: + func_80179B28(D_801EB110); + if (D_801EB128 != 0) { + D_801EACF8 = D_801EB128; + D_801EB128 = 0; + (*(s16*)&D_801EBA7C) = 3; + return; + } + (*(s16*)&D_801EBA7C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EBA7C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EBA7C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EBA7C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x1B: + D_801EB148 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EBA7C) = 4; + D_801EACFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EBA7C) = 5; + D_801EB13C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EB13C = (s32)func_8017A3B0; + (*(s16*)&D_801EBA7C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x24: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EBA7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EBA7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EBA7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EBA7C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EBA7C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EBA7C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EBA7C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EB12C); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EB12C); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EB12C); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EB12C); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x4E: + D_801EB150 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x2B: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EBA7C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EBA04 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x34: + (*(s16*)&D_801EBA7C) = 3; + D_801EACF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EB128 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EBA7C) = 3; + D_801EACF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EBA7C) = 3; + D_801EACF8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EACF8 = *(s32 *)(D_801EACF8 + 4); + return; + case 0x37: + (*(s16*)&D_801EBA7C) = 3; + D_801EB114 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EB118 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EBA7C) = 3; + D_801EB11C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EB120 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EBA7C) = 3; + D_801EB114 = w1; + D_801EB118 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EBA7C) = 3; + D_801EB11C = w2; + D_801EB120 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x43: + D_801EB13C = (s32)func_8017A3D8; + D_801EB144 = 0; + (*(s16*)&D_801EBA7C) = 5; + D_801EB140 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EBA7C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EBA7C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EB154; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EBA7C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EB154; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EBA7C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EB154[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EBA7C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EB154; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EBA7C) = 3; + break; + default: + break; + } +Lend: + D_801EACF8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EB124; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EB124 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EB124; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EB124 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EB14C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EB14C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EB108; + +s32 func_8017A3B0(void) { + switch (D_801EB108) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EB184; + extern s16 D_801EB186; + extern s16 D_801EB188; + extern s16 D_801EB17C; + extern s16 D_801EB17E; + extern s16 D_801EB180; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EB184, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EB186, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EB188, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EB17C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EB17E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EB180, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EB10C; +extern u16 D_801EB18C; +extern u16 D_801EB18E; +extern u16 D_801EB190; +extern s16 D_801EBA08; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EBA08 = 0; + D_801EB10C = 0; + D_801EB18C = D_80126B5E; + D_801EB18E = D_80126B62; + D_801EB190 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80194670[]; + extern s16 D_801EB184; + extern s16 D_801EB17C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80194670[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80194670[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EB184; + s16 *p78C = &D_801EB17C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EBA08 = 1; + D_801EB10C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EB12C; + extern SV4_8017B368 D_801EB134; + extern s16 D_801EB184; + extern s16 D_801EB17C; + extern u16 D_80194670; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EB12C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EB134; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80194670)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80194670)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EB184) = loc0; + (*(SV4_8017B368 *)&D_801EB17C) = loc1; + D_801EBA08 = 1; + D_801EB10C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80194670[]; + extern s16 D_801EB184; + extern s16 D_801EB186; + extern s16 D_801EB188; + extern s16 D_801EB17C; + extern s16 D_801EB17E; + extern s16 D_801EB180; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80194670[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80194670[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EB184; + s16 *p78C = &D_801EB17C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EB186; + v798 = D_801EB188; + v78C = *p78C; + v78E = D_801EB17E; + v790 = D_801EB180; + __asm__ __volatile__(""); + D_801EBA08 = 1; + D_801EB10C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EB10C; +extern s16 D_801EB184; +extern s16 D_801EB186; +extern s16 D_801EB188; +extern s16 D_801EB17C; +extern s16 D_801EB17E; +extern s16 D_801EB180; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EB10C = 0; + D_801EB184 = (s16) D_80114F30; + D_801EB186 = (s16) D_80114F34; + D_801EB188 = (s16) D_80114F38; + D_801EB17C = (s16) D_80114F24; + D_801EB17E = (s16) D_80114F28; + D_801EB180 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EB19C; +extern s16 D_801EB19E; +extern s16 D_801EB1A0; +extern s16 D_801EB1A4; +extern s16 D_801EB1A6; +extern s16 D_801EB1A8; + +void func_8017B824(void) { + D_801EB19C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EB19E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EB1A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EB1A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EB1A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EB1A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EB19C; +extern s16 D_801EB19E; +extern s16 D_801EB1A0; +extern s16 D_801EB1A4; +extern s16 D_801EB1A6; +extern s16 D_801EB1A8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EB19C; + D_80114F34 = D_801EB19E; + D_80114F38 = D_801EB1A0; + D_80114F24 = D_801EB1A4; + D_80114F28 = D_801EB1A6; + D_80114F2C = D_801EB1A8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EB184), src[8..15] -> (*(S8_8017B8E8 *)&D_801EB17C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EB184) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EB17C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EB18C; +extern u16 D_801EB18E; +extern u16 D_801EB190; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EB10C; +extern short D_801EB194; +extern short D_801EB196; +extern short D_801EB198; +extern s16 D_801EB184; +extern s16 D_801EB186; +extern s16 D_801EB188; +extern s16 D_801EB17C; +extern s16 D_801EB17E; +extern s16 D_801EB180; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EB18C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EB18E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EB190); + (*(s16 *)&D_801EB194) = buf[0]; + (*(s16 *)&D_801EB196) = buf[1]; + (*(s16 *)&D_801EB198) = buf[2]; + D_801EB184 = D_80114F30 + buf[0]; + D_801EB10C = 0; + D_801EB186 = D_80114F34 + buf[1]; + D_801EB188 = D_80114F38 + buf[2]; + D_801EB17C = D_80114F24 + buf[0]; + D_801EB17E = D_80114F28 + buf[1]; + D_801EB180 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EB12C; +extern SV4 D_801EB134; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EB134) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EB12C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EB134 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EB134)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EB12C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EB134) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EB154[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EB154; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EB10C; +extern s16 D_801EBA08; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EB10C = D_801EB10C + 1; + if (D_801EB10C >= 0x1F) { + D_801EBA08 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EB10C; +extern s16 D_801EBA08; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EB10C = D_801EB10C + 1; + if (0x18 < D_801EB10C) { + func_8012A4BC(); + D_801EBA08 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EB10C; +extern void (*D_801EB150)(void); +extern short D_801EB194; +extern short D_801EB196; +extern short D_801EB198; +extern s16 D_801EBA08; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EB10C = D_801EB10C + 1; + if (D_801EB10C >= 0x19) { + if (D_801EB150 != 0) { + (*D_801EB150)(); + } else { + D_80114F30 = D_80114F30 + D_801EB194; + D_80114F34 = D_80114F34 + D_801EB196; + D_80114F38 = D_80114F38 + D_801EB198; + D_80114F24 = D_80114F24 + D_801EB194; + D_80114F28 = D_80114F28 + D_801EB196; + D_80114F2C = D_80114F2C + D_801EB198; + func_8012A4BC(); + } + D_801EBA08 = 0; + } +} + + + +extern void (*D_80194710[])(void); + +void func_8017BE60(void *a0) { + D_80194710[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80194734[])(void); + +void func_8017BEBC(void *a0) { + D_80194734[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_8019473C[])(void); + +void func_8017C150(void *a0) { + D_8019473C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80194728; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80194728, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017C360); + + +extern void (*D_80194750[])(void); + +void func_8017C4BC(void *a0) { + D_80194750[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017C4F8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017C558); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017C688); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017CA14); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017CC8C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017CDD4); + + +extern void (*D_80194868[])(void); + +void func_8017CF54(void *a0) { + D_80194868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017CF90); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017CFDC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D0D0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D150); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D204); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D270); + +extern void func_8012C218(void *a0); + void func_8017D2FC(void) { + ((void (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D31C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D370); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D50C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017D710); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017DB04); + + +extern void (*D_80194B68[])(void); + +void func_8017DC84(void *a0) { + D_80194B68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017DCC0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017DD34); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017DE10); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E024); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E0F8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E1C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E220); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E318); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E358); + + +extern void (*D_80194B8C[])(void); + +void func_8017E380(void *a0) { + D_80194B8C[*(u8 *)((s32)a0 + 0x214)](); +} + + +extern void func_80147060(u8 *a0); + extern void func_80171A1C(u8 *a0); + extern void func_8017E3F4(s32 a0); + void func_8017E3BC(s32 a0) { + s32 s0 = a0; + ((void (*)(s32 *))func_80147060)((s32 *)s0); + ((void (*)(s32))func_80171A1C)(s0); + ((void (*)(s32))func_8017E3F4)(s0); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E3F4); + +void func_8017E434(void) { +} + +extern void func_80174684(void *); + extern s32 func_8017E464; + void func_8017E43C(void) { + func_80174684(&func_8017E464); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E464); + +extern void func_80147060(u8 *a0); + extern void func_80171A1C(u8 *a0); + extern void func_8017E4D8(s32 a0); + void func_8017E4A0(s32 a0) { + s32 s0 = a0; + ((void (*)(s32 *))func_80147060)((s32 *)s0); + ((void (*)(s32))func_80171A1C)(s0); + ((void (*)(s32))func_8017E4D8)(s0); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E4D8); + +void func_8017E518(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E520); + + +extern void (*D_80194C58[])(void); + +void func_8017E564(void *a0) { + D_80194C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E5A0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E5C8); + +void func_8017E5E8(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E5F0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017E72C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017EAC0); + + +extern void (*D_80194C98[])(void); + +void func_8017EB00(void *a0) { + D_80194C98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017EB3C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017ECB0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017ED98); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F0E0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F160); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F1AC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F2AC); + + +extern void (*D_80194CB8[])(void); + +void func_8017F2F0(void *a0) { + D_80194CB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F32C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F458); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F534); + + +extern void (*D_80194CC8[])(void); + +void func_8017F578(void *a0) { + D_80194CC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F5B4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F630); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F67C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017F7B4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FA94); + + +extern void (*D_80194CD4[])(void); + +void func_8017FAD8(void *a0) { + D_80194CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FB14); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FBF8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FCA0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FD2C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FD9C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FE64); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FF34); + + +extern void (*D_80194E58[])(void); + +void func_8017FF9C(void *a0) { + D_80194E58[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8017FFD8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180010); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180060); + +extern void func_80171A1C(u8 *a0); + void func_801800C4(s32 *param) { + param[0x200 / sizeof(s32)] = 1; + ((void (*)(void))func_80171A1C)(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801800E8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018015C); + +DEFINE_func_80180210() /* dedup: shared engine-core @0x80180210 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180218); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180258); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801802C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180328); + +void func_80180418(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180420); + + +extern void (*D_80194EB0[])(void); + +void func_8018045C(void *a0) { + D_80194EB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180498); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801804E8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180544); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801805C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180730); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018077C); + + +extern void (*D_80194EC4[])(void); + +void func_80180A88(void *a0) { + D_80194EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180AC4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180B04); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180B74); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180C00); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180CD4); + + +extern void (*D_80194ED8[])(void); + +void func_80180D28(void *a0) { + D_80194ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180D64); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180E18); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180E74); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80180FE4); + + +extern void (*D_80194FA4[])(void); + +void func_80181A64(void *a0) { + D_80194FA4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181AA0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80181AE4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80194FAC[])(void); + +void func_80181B08(void *a0) { + D_80194FAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181B44); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181B84); + +extern void func_800D1EBC(void); + void func_80181BF8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80194FB8[])(void); + +void func_80181C18(void *a0) { + D_80194FB8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80181C54(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + + +extern void (*D_80194FC4[])(void); + +void func_80181CD0(void *a0) { + D_80194FC4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181D0C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80181D50(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_80194FD4; + +void func_80181D74(void) { + ((void (*)(s32 *, s32))func_8016EE40)(&D_80194FD4, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80194FE0; + +void func_80181D9C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80194FE0, 0x1000000); +} + + + +extern void (*D_8019501C[])(void); + +void func_80181DC4(void *a0) { + D_8019501C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181E00); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181E40); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181EF4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181F6C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80181FA0); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80194FF4; + +void func_80182090(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80194FF4, 0x1000000); +} + + + +extern void (*D_80195030[])(void); + +void func_801820B8(void *a0) { + D_80195030[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801820F4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182148); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801821AC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801821FC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182268); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801822F4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182344); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182380); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801823B8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801823EC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182488); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182564); + +extern void func_8012A568(void (*a0)(void)); + extern s32 func_801823EC(s32 a0); + void func_80182614(void) { + ((void (*)(void *))func_8012A568)((void *)func_801823EC); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018263C); + + +extern void (*D_80195048[])(void); + +void func_801826D8(void *a0) { + D_80195048[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182714); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182A08); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182A9C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182AF8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182B88); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182D60); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182DB8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182E68); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182EC8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182FA8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80182FF0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183054); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183080); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018312C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183178); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801834EC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183558); + +extern void func_8018452C(void); + void func_8018360C(short *param) { + param[1] = 0xB; + func_8018452C(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183630); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183954); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183994); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183B30); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80183C2C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801840C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184134); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018418C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184414); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018446C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018452C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184590); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801845C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801845F4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184738); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018479C); + +extern void func_8012A568(void (*a0)(void)); + extern s32 func_8018263C(s32); + void func_801847C8(void) { + ((void (*)(void *))func_8012A568)((void *)func_8018263C); + } + + +extern void func_8012A568(void (*a0)(void)); + extern s32 func_801823EC(s32 a0); + void func_801847F0(void) { + ((void (*)(void *))func_8012A568)((void *)func_801823EC); + } + + +extern void func_80184918(s32 arg0, s32 arg1); + void func_80184818(s32 arg0) { + func_80184918(arg0, 0x1D); + } + + +extern void func_80184918(s32 arg0, s32 arg1); + void func_80184838(s32 arg0) { + func_80184918(arg0, 0x1E); + } + + +extern void func_80029124(s32 arg0, s32 arg1); + void func_80184858(void) { + func_80029124(0x9E, 1); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018487C); + +void func_8018490C(s32 *a0, s32 a1, s16 a2) { + *(s32 *)((s32)a0 + 0xCC) = a1; + *(s16 *)((s32)a0 + 0x102) = a2; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184918); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184964); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801849D4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184A28); + +extern s32 func_800D0CE0(void); + s32 func_80184A34(void) { + return func_800D0CE0() != 0; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184A54); + + +extern void (*D_801957F8[])(void); + +void func_80184ACC(void *a0) { + D_801957F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184B08); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184C0C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184C98); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184D50); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184E00); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80184F48); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185048); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185098); + + +extern void (*D_801958B8[])(void); + +void func_80185120(void *a0) { + D_801958B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018515C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185268); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801852B0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185388); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801853CC); + +void func_80185464(void *a0) { + s16 v0; + v0 = *(s16 *)((char *)a0 + 0xfc); + if (!v0) { + *(s16 *)((char *)a0 + 0x2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185480); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801854DC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185548); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018567C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018576C); + + +extern void (*D_801958E8[])(void); + +void func_801859E0(void *a0) { + D_801958E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185A1C); + +void func_80185A84(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185A8C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185AAC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185BA4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185BF4); + +extern void func_8001AAA0(s32 arg); + void func_80185C00(void) { + func_8001AAA0(0x2F); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185C20); + + +extern void (*D_80195948[])(void); + +void func_80185C40(void *a0) { + D_80195948[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185C7C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185E20); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80185FA0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186070); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186184); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801861FC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186250); + +s32 func_80186290(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x6; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801862A4); + +extern s32 func_80188168(void); + void func_80186354(void) { + func_80188168(); + } + + +extern s32 func_8013CAE8(void); + void func_80186374(void) { + func_8013CAE8(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186394); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801863D4); + + +extern void (*D_80195CC4[])(void); + +void func_801863F4(void *a0) { + D_80195CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186430); + +void func_80186548(s32 *a0) { + *(s32 *)((s32)a0 + 0x48) = 0x1400; + *(s32 *)((s32)a0 + 0x14) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186558); + +void func_801865B0(s32 arg0) { + s32 *p = *(s32 **)((s32)arg0 + 0xcc); + *(u16 *)((s32)p + 0x8) = *(u16 *)((s32)arg0 + 0x6); + *(s16 *)((s32)p + 0xa) = *(u16 *)((s32)arg0 + 0xa) - 0xe0; + *(s16 *)((s32)p + 0xc) = *(u16 *)((s32)arg0 + 0xe) - 0x10; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801865E4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186680); + +extern s32 func_8017E358(void); + void func_801866E8(void) { + func_8017E358(); + } + + +extern void func_8017E43C(void); + void func_80186708(void) { + func_8017E43C(); + } + + +void func_80186728(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + +void func_80186734(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x3; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186740); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80186790(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x634, 0); + } + + +void func_801867BC(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0; + } + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_80186818(u8 *a0); +extern void (*D_80195D18[])(int); + +void func_801867CC(int param_1) +{ + ((void (*)(void))func_80186818)(); + D_80195D18[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186818); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186868); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186AA0); + + +extern void (*D_80195D40[])(void); + +void func_80186AE0(void *a0) { + D_80195D40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186B1C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186BB0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186C30); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186CB4); + +void func_80186D3C(void) { +} + +void func_80186D44(void) { +} + +extern s32 func_80128ED8(void *a0, void *a1); + extern s32 D_801EB518; + void func_80186D4C(void *arg0) { + ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801EB518); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186D78); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186E24); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186E94); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186F24); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80186F74); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187018); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018707C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801870D0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187110); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801871CC); + +extern s32 func_80186740(void); + void func_80187234(void) { + func_80186740(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187254); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801872B4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018734C); + + +extern void (*D_80195D50[])(void); + +void func_801873FC(void *a0) { + D_80195D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187438); + +void func_801874A0(void) { +} + + +extern void (*D_80195D58[])(void); + +void func_801874A8(void *a0) { + D_80195D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801874E4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018754C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187614); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187654); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187724); + + +extern void (*D_80195DC4[])(void); + +void func_80187784(void *a0) { + D_80195DC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801877C0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801877C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187800); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187838); + + +extern void (*D_80195F14[])(void); + +void func_8018788C(void *a0) { + D_80195F14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801878C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018797C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187CE8); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80195FD8[])(); + +void func_80187D90(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80195FD8[*(u16 *)(param_1 + 2)](); + } +} + + +extern s32 func_8012AD50(void *a0); + void func_80187DDC(u8 *a0) { + *(u16 *)(a0 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187E08); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80187FA0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188034); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188114); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188168); + + +// @class: remat +// @stuck: none — MATCH. &D_800C7C60 CSE'd once via pointer local `p` so the same reg feeds the *p=0x18 store AND arg5; writing D_800C7C60=0x18 directly would emit a 2nd address materialization (+1 ins). Mirrors matched sibling func_80128998. + +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AEFA0; +extern int D_801E8C34; + +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); + +int func_801881BC(int arg0) +{ + int *p = &D_800C7C60; + *p = 0x18; + D_800C7C64 = &D_800A2E20; + ((void (*)(int, int, int *, int, int *))func_8001ABBC)(0, 0, &D_800AEFA0, D_801E8C34, p); +} + + +extern s32 D_8012704C; + void func_80188214(void) { + D_8012704C = 0x1; + } + + + +extern s32 D_801EBA74; + +void func_80188228(void) { + D_801EBA74 = 640; +} + + + +extern s32 D_801EBA74; + +void func_8018823C(void) { + D_801EBA74 = 272; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188250); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801883C8(void) { + func_8002D4C8(0x6AA, 0); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801883EC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188430); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188508); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188554); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188654); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801887C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801887F8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018898C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188A10); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188D54); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188D80); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188DC8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188DF4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80188E3C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189050); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801890C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801891E8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189324); + + +extern void (*D_801960D4[])(void); + +void func_801894E0(void *a0) { + D_801960D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018951C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801895A0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801895CC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189620); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018964C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189674); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801896B4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018974C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801897A4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018983C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189880); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801898C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801899B4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189A50); + + +extern void (*D_801961D4[])(void); + +void func_80189B28(void *a0) { + D_801961D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189B64); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189C20); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189C90); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189E00); + +extern s32 func_800D0CE0(void); + extern void func_8012C218(void *a0); + void func_80189EF4(void *a0) { + if (((s32 (*)(s32))func_800D0CE0)((s32)a0) == 1) { + ((void (*)(s32))func_8012C218)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80189F30); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A084); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A184); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A1A4); + +extern void func_8012A4BC(void); + void func_8018A264(void) { + ((s32 (*)(void))func_8012A4BC)(); + } + + + +extern void (*D_801D6268[])(void); + +void func_8018A284(void *a0) { + D_801D6268[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A2C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A438); + + +extern void (*D_801D626C[])(void); + +void func_8018A5E4(void *a0) { + D_801D626C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8018A620(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A640); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A698); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A708); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A72C); + + +extern s16 D_801EB6DC; + extern s16 D_801EB6DE; + extern s16 D_801EB6E0; + extern s16 D_801EB6E2; + void func_8018A7CC(s32 arg0, s32 arg1, s32 arg2) { + D_801EB6DC = *(u16 *)((s32)arg0 + 0x0); + D_801EB6DE = *(u16 *)((s32)arg0 + 0x2); + D_801EB6E0 = arg1; + D_801EB6E2 = arg2; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A7FC); + + +extern s16 D_801EB6E2; + void func_8018A874(s32 arg0) { + *(s16 *)((s32)&D_801EB6E2 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A890); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A8E8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A9BC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018A9F8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AA44); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AB20); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018ADE4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AE08); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AE30); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AEB8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AF24); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018AF94); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B00C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B058); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B174); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B1B0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B2C4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B5A8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B60C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B76C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018B950); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BA0C); + +extern void func_8012C098(void); + void func_8018BAB8(void) { + func_8012C098(); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BAD8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BB44); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BBCC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BC10); + + +void func_8018BCB4(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BCC4); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801DEB58; + +void func_8018BD70(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801DEB58)) { + func_8012A828(arg0, &D_801DEB58); + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BDB8); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801DEFE0; + +void func_8018BE00(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801DEFE0); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018BEF0 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_8018BEF0(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801DEF38; + +s32 func_8018BE40(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_8018BEF0(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801DEF38); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801DECF8; + +void func_8018BEF0(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801DECF8); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_8018BF4C(void *a0) { + *(short *)((char *)a0 + 0x2) = 5; + *(int *)((char *)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BF60); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018BFBC); + + +extern void (*D_801D6FDC[])(void); + +void func_8018C040(void *a0) { + D_801D6FDC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801D7024[])(void); + +void func_8018C07C(void *a0) { + D_801D7024[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern void func_80143994(s32 a0, s32 a1); +extern int D_801D6FE4; + +void func_8018C0B8(int param_1) +{ + int iVar1; + + iVar1 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = iVar1; + if (iVar1 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + *(short *)(param_1 + 2) = 1; + func_8001CA88(*(int *)(param_1 + 0x20), &D_801D6FE4); + func_80143994(param_1, 0x1000); + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C11C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C174); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C1E0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C31C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C388); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C3C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C424); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C47C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C534); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C5A4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C734); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C7B8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C874); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018C968); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CA04); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CA64); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CAC4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CB20); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CB70); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CBBC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CC6C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CC9C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CEB0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CF04); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CFAC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018CFF4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D0C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D128); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D19C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D1D8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D218); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D288); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D370); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D52C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D574); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D720); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D820); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018D8B8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DAA8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DBF4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DD60); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DDD0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DE30); + + +extern void (*D_801DF7B0[])(void); + +void func_8018DF08(void *a0) { + D_801DF7B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018DF44); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E014); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E0AC); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E208); + + +extern void (*D_801DF818[])(void); + +void func_8018E358(void *a0) { + D_801DF818[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018E394(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 1; + *(s32 *)((char *)a0 + 0x1c) = 2; + *(s8 *)((char *)a0 + 0xfc) = 1; + *(s8 *)((char *)a0 + 0xfe) = 2; + *(s8 *)((char *)a0 + 0xfd) = 0; + *(s8 *)((char *)a0 + 0xff) = 4; + *(s16 *)((char *)a0 + 0xdc) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E3C8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E420); + + +extern void (*D_801DF84C[])(void); + +void func_8018E4BC(void *a0) { + D_801DF84C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E4F8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E5E4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E678); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E780); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018E8A0); + + +extern void (*D_801DF89C[])(void); + +void func_8018EBEC(void *a0) { + D_801DF89C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018EC28); + + +extern void (*D_801E33D8[])(void); + +void func_8018ECA8(void *a0) { + D_801E33D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018ECE4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018EDB8); + +void func_8018EDE0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018EDE8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018EF34); + + +extern void func_8012C218(void *a0); + s32 func_8018F054(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F080); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F090); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F0A0); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018F0E0(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F114); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F138); + + +extern void (*D_801E3400[])(void); + +void func_8018F19C(void *a0) { + D_801E3400[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F1D8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F260); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F320); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F390); + + +extern s32 D_801EB908; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_8018F488(s32 a0, s32 a1) { + D_801EB908 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F4B8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F6FC); + + +extern void (*D_801E3B1C[])(void); + +void func_8018F99C(void *a0) { + D_801E3B1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018F9D8); + + +extern void (*D_801E4210[])(void); + +void func_8018FB50(void *a0) { + D_801E4210[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E4224[])(void); + +void func_8018FB8C(void *a0) { + D_801E4224[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801E41FC; +extern s32 D_801E4208; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_8018FBC8(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801E41FC); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801E4208, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801E4218; + +void func_8018FCA8(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801E4218); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801E44CC; + +void func_8018FDC4(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801E44CC); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018FE20); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8018FE94); + + +extern void (*D_801E4858[])(void); + +void func_801900B4(void *a0) { + D_801E4858[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801900F0); + + +extern void (*D_801E8654[])(void); + +void func_80190184(void *a0) { + D_801E8654[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801901C0); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190298); + +void func_801902C0(void) { +} + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801E8604; + void func_801902C8(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801E8604); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801902F4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190334); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801903F4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190460); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190470); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190480); + +extern void func_800296F8(void); + s32 func_80190498(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801904BC); + + +extern void (*D_801E86CC[])(void); + +void func_80190610(void *a0) { + D_801E86CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_8019064C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190748); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_801909D8); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190B6C); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190BC4); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190C40); + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80178D40", func_80190C84); + + diff --git a/src/ov_SC02_015/ov_SC02_015_jr_801734BC.c b/src/ov_SC02_015/ov_SC02_015_jr_801734BC.c index f6e9385d6..dc0ef2ab5 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_801734BC.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_801734BC.c @@ -3102,941 +3102,3 @@ void func_80178D18(void) { D_8019069C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801902A4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801902A4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801902A4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801902A4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801902CC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801902CC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80190288; - -s32 func_8017A3B0(void) { - switch (D_80190288) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801902C4; -extern short D_801902C0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801902C4) { - case 0: - func_800D0CA0(1); - D_801902C4 = D_801902C4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801902C0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801902C4 = D_801902C4 + 1; - if (D_801902C4 < 0x1E) { - return 0; - } - D_801902C4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80190304; - extern s16 D_80190306; - extern s16 D_80190308; - extern s16 D_801902FC; - extern s16 D_801902FE; - extern s16 D_80190300; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80190304, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80190306, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80190308, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801902FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801902FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80190300, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019028C; -extern u16 D_8019030C; -extern u16 D_8019030E; -extern u16 D_80190310; -extern s16 D_80190628; - -void func_8017B1D8(void) { - func_8012A418(); - D_80190628 = 0; - D_8019028C = 0; - D_8019030C = D_80126B5E; - D_8019030E = D_80126B62; - D_80190310 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181B84[]; - extern s16 D_80190304; - extern s16 D_801902FC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181B84[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181B84[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80190304; - s16 *p78C = &D_801902FC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80190628 = 1; - D_8019028C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801902AC; - extern SV4_8017B368 D_801902B4; - extern s16 D_80190304; - extern s16 D_801902FC; - extern u16 D_80181B84; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801902AC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801902B4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181B84)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181B84)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80190304) = loc0; - (*(SV4_8017B368 *)&D_801902FC) = loc1; - D_80190628 = 1; - D_8019028C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181B84[]; - extern s16 D_80190304; - extern s16 D_80190306; - extern s16 D_80190308; - extern s16 D_801902FC; - extern s16 D_801902FE; - extern s16 D_80190300; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181B84[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181B84[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80190304; - s16 *p78C = &D_801902FC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80190306; - v798 = D_80190308; - v78C = *p78C; - v78E = D_801902FE; - v790 = D_80190300; - __asm__ __volatile__(""); - D_80190628 = 1; - D_8019028C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019028C; -extern s16 D_80190304; -extern s16 D_80190306; -extern s16 D_80190308; -extern s16 D_801902FC; -extern s16 D_801902FE; -extern s16 D_80190300; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019028C = 0; - D_80190304 = (s16) D_80114F30; - D_80190306 = (s16) D_80114F34; - D_80190308 = (s16) D_80114F38; - D_801902FC = (s16) D_80114F24; - D_801902FE = (s16) D_80114F28; - D_80190300 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019031C; -extern s16 D_8019031E; -extern s16 D_80190320; -extern s16 D_80190324; -extern s16 D_80190326; -extern s16 D_80190328; - -void func_8017B824(void) { - D_8019031C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019031E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80190320 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80190324 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80190326 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80190328 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019031C; -extern s16 D_8019031E; -extern s16 D_80190320; -extern s16 D_80190324; -extern s16 D_80190326; -extern s16 D_80190328; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019031C; - D_80114F34 = D_8019031E; - D_80114F38 = D_80190320; - D_80114F24 = D_80190324; - D_80114F28 = D_80190326; - D_80114F2C = D_80190328; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80190304), src[8..15] -> (*(S8_8017B8E8 *)&D_801902FC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80190304) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801902FC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019030C; -extern u16 D_8019030E; -extern u16 D_80190310; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019028C; -extern short D_80190314; -extern short D_80190316; -extern short D_80190318; -extern s16 D_80190304; -extern s16 D_80190306; -extern s16 D_80190308; -extern s16 D_801902FC; -extern s16 D_801902FE; -extern s16 D_80190300; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019030C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019030E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80190310); - (*(s16 *)&D_80190314) = buf[0]; - (*(s16 *)&D_80190316) = buf[1]; - (*(s16 *)&D_80190318) = buf[2]; - D_80190304 = D_80114F30 + buf[0]; - D_8019028C = 0; - D_80190306 = D_80114F34 + buf[1]; - D_80190308 = D_80114F38 + buf[2]; - D_801902FC = D_80114F24 + buf[0]; - D_801902FE = D_80114F28 + buf[1]; - D_80190300 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801902AC; -extern SV4 D_801902B4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801902B4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801902AC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801902B4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801902B4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801902AC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801902B4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801902D4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801902D4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019028C; -extern s16 D_80190628; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019028C = D_8019028C + 1; - if (D_8019028C >= 0x1F) { - D_80190628 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019028C; -extern s16 D_80190628; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019028C = D_8019028C + 1; - if (0x18 < D_8019028C) { - func_8012A4BC(); - D_80190628 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019028C; -extern void (*D_801902D0)(void); -extern short D_80190314; -extern short D_80190316; -extern short D_80190318; -extern s16 D_80190628; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019028C = D_8019028C + 1; - if (D_8019028C >= 0x19) { - if (D_801902D0 != 0) { - (*D_801902D0)(); - } else { - D_80114F30 = D_80114F30 + D_80190314; - D_80114F34 = D_80114F34 + D_80190316; - D_80114F38 = D_80114F38 + D_80190318; - D_80114F24 = D_80114F24 + D_80190314; - D_80114F28 = D_80114F28 + D_80190316; - D_80114F2C = D_80114F2C + D_80190318; - func_8012A4BC(); - } - D_80190628 = 0; - } -} - - - -extern void (*D_80181C24[])(void); - -void func_8017BE60(void *a0) { - D_80181C24[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80181C48[])(void); - -void func_8017BEBC(void *a0) { - D_80181C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80181C50[])(void); - -void func_8017C150(void *a0) { - D_80181C50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80181C3C; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80181C3C, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017C294); - - -extern void (*D_80181CA8[])(void); - -void func_8017D174(void *a0) { - D_80181CA8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D1B0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D1F4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181CB0[])(void); - -void func_8017D218(void *a0) { - D_80181CB0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D294); - -extern s32 func_800D1EBC(void); - void func_8017D328(void) { - func_800D1EBC(); - } - - - -extern void (*D_80181CBC[])(void); - -void func_8017D348(void *a0) { - D_80181CBC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D384); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D418); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D440); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D468); - - -extern void (*D_80181CE8[])(void); - -void func_8017D500(void *a0) { - D_80181CE8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D53C); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D5C8); - - -extern void (*D_80181D80[])(void); - -void func_8017D7A4(void *a0) { - D_80181D80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D7E0); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D878); - - -extern void (*D_80181D88[])(void); - -void func_8017D988(void *a0) { - D_80181D88[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017D9C4(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017D9E4); - - -extern void (*D_80181D94[])(void); - -void func_8017DB0C(void *a0) { - D_80181D94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8017DB48(void *a0) { - *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; - *(int *)((char *)a0 + 0x14) = 0x20000; - } - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017DB60); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017DC24); - - -extern void (*D_80181DB4[])(void); - -void func_8017DE44(void *a0) { - D_80181DB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017DE80); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017DF44); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017DFF8); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017E034); - - -extern void (*D_80181E64[])(void); - -void func_8017E060(void *a0) { - D_80181E64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017E09C); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017E0E8); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_801734BC", func_8017E148); - -s32 func_8017E1F0(void) { - return 0x19; - } - diff --git a/src/ov_SC02_015/ov_SC02_015_jr_80178D40.c b/src/ov_SC02_015/ov_SC02_015_jr_80178D40.c new file mode 100644 index 000000000..949e76eb3 --- /dev/null +++ b/src/ov_SC02_015/ov_SC02_015_jr_80178D40.c @@ -0,0 +1,4406 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018142C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018F5F8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181420[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181464[]; +extern unsigned short D_8018146C[]; +extern unsigned short D_80181474[]; +extern unsigned char D_8018F600[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018F5F8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018147C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F734; +extern M2C_UNK D_8018F738; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F6C0; +extern void (*D_801814AC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018F73C[]; +extern u8 D_8018F744[]; +extern u8 D_8018F6F4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801814B4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801814D0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801814D8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181540[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801814E4; +extern u8 D_801814F0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181574[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018157C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801815D0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181604[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801815F4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181620; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181698[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801816A0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801816A8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801816B0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801816B8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801816C0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801816CC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801816D8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801816E4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801816F4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181704[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018170C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181714[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018171C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181724[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018172C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181734[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018173C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181744[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018174C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181754[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018175C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181764[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018176C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181774[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018177C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181784[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018178C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181794[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018179C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801817A4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801817AC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801817B4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801817F8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801817BC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181828[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80181864[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801818BC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801818CC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801818D4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181A3C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80181A48[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018ED04; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80190628; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018FE78; +extern short D_8019069C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019069C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019069C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018FE78 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019069C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801905F8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801905F8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019069C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019069C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801902D4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018FE7C; + extern s32 D_80190290; + extern s16 D_80190294; + extern s16 D_80190298; + extern s16 D_8019029C; + extern s16 D_801902A0; + extern s32 D_801902A8; + extern s32 D_801902AC; + extern s32 D_801902BC; + extern s16 D_801902C0; + extern s16 D_801902C4; + extern s32 D_801902C8; + extern s32 D_801902D0; + extern s32 D_801902D4[10]; + extern s32 D_80190540; + extern s16 D_801905F8; + extern s32 D_80190624; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801905F8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80190290); + D_80190290 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019029C, D_801902A0 ? 0x48 : 0x40); + (*(s16*)&D_8019069C) = 2; + break; + case 0: + func_80179B28(D_80190290); + D_80190290 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80190294, D_80190298 ? 0x48 : 0x40); + (*(s16*)&D_8019069C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80190540 != 0) { + func_80179B28(D_80190290); + D_80190290 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80190294, D_80190298 ? 0x48 : 0x40); + (*(s16*)&D_8019069C) = 1; + } else { + (*(s16*)&D_8019069C) = 3; + } + break; + case 0x32: + func_80179B28(D_80190290); + D_80190290 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80190294, + D_80190298 ? 0x48 : 0x40); + (*(s16*)&D_8019069C) = 1; + break; + case 2: + func_80179B28(D_80190290); + if (D_801902A8 != 0) { + D_8018FE78 = D_801902A8; + D_801902A8 = 0; + (*(s16*)&D_8019069C) = 3; + return; + } + (*(s16*)&D_8019069C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019069C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019069C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019069C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019069C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019069C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019069C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019069C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019069C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019069C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019069C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019069C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x1B: + D_801902C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019069C) = 4; + D_8018FE7C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019069C) = 5; + D_801902BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801902BC = (s32)func_8017A3B0; + (*(s16*)&D_8019069C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x24: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019069C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019069C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019069C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019069C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019069C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019069C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019069C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019069C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019069C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801902AC); + (*(s16*)&D_8019069C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801902AC); + (*(s16*)&D_8019069C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801902AC); + (*(s16*)&D_8019069C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801902AC); + (*(s16*)&D_8019069C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + break; + case 0x4E: + D_801902D0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019069C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80190624 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019069C) = 3; + break; + case 0x34: + (*(s16*)&D_8019069C) = 3; + D_8018FE78 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801902A8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019069C) = 3; + D_8018FE78 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019069C) = 3; + D_8018FE78 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018FE78 = *(s32 *)(D_8018FE78 + 4); + return; + case 0x37: + (*(s16*)&D_8019069C) = 3; + D_80190294 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80190298 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019069C) = 3; + D_8019029C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801902A0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019069C) = 3; + D_80190294 = w1; + D_80190298 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019069C) = 3; + D_8019029C = w2; + D_801902A0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + case 0x43: + D_801902BC = (s32)func_8017A3D8; + D_801902C4 = 0; + (*(s16*)&D_8019069C) = 5; + D_801902C0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019069C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019069C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019069C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801902D4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019069C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801902D4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019069C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801902D4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019069C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801902D4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019069C) = 3; + break; + default: + break; + } +Lend: + D_8018FE78 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801902A4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801902A4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801902A4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801902A4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801902CC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801902CC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80190288; + +s32 func_8017A3B0(void) { + switch (D_80190288) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801902C4; +extern short D_801902C0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801902C4) { + case 0: + func_800D0CA0(1); + D_801902C4 = D_801902C4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801902C0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801902C4 = D_801902C4 + 1; + if (D_801902C4 < 0x1E) { + return 0; + } + D_801902C4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80190304; + extern s16 D_80190306; + extern s16 D_80190308; + extern s16 D_801902FC; + extern s16 D_801902FE; + extern s16 D_80190300; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80190304, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80190306, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80190308, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801902FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801902FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80190300, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019028C; +extern u16 D_8019030C; +extern u16 D_8019030E; +extern u16 D_80190310; +extern s16 D_80190628; + +void func_8017B1D8(void) { + func_8012A418(); + D_80190628 = 0; + D_8019028C = 0; + D_8019030C = D_80126B5E; + D_8019030E = D_80126B62; + D_80190310 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181B84[]; + extern s16 D_80190304; + extern s16 D_801902FC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181B84[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181B84[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80190304; + s16 *p78C = &D_801902FC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80190628 = 1; + D_8019028C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801902AC; + extern SV4_8017B368 D_801902B4; + extern s16 D_80190304; + extern s16 D_801902FC; + extern u16 D_80181B84; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801902AC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801902B4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181B84)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181B84)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80190304) = loc0; + (*(SV4_8017B368 *)&D_801902FC) = loc1; + D_80190628 = 1; + D_8019028C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181B84[]; + extern s16 D_80190304; + extern s16 D_80190306; + extern s16 D_80190308; + extern s16 D_801902FC; + extern s16 D_801902FE; + extern s16 D_80190300; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181B84[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181B84[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80190304; + s16 *p78C = &D_801902FC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80190306; + v798 = D_80190308; + v78C = *p78C; + v78E = D_801902FE; + v790 = D_80190300; + __asm__ __volatile__(""); + D_80190628 = 1; + D_8019028C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019028C; +extern s16 D_80190304; +extern s16 D_80190306; +extern s16 D_80190308; +extern s16 D_801902FC; +extern s16 D_801902FE; +extern s16 D_80190300; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019028C = 0; + D_80190304 = (s16) D_80114F30; + D_80190306 = (s16) D_80114F34; + D_80190308 = (s16) D_80114F38; + D_801902FC = (s16) D_80114F24; + D_801902FE = (s16) D_80114F28; + D_80190300 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019031C; +extern s16 D_8019031E; +extern s16 D_80190320; +extern s16 D_80190324; +extern s16 D_80190326; +extern s16 D_80190328; + +void func_8017B824(void) { + D_8019031C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019031E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80190320 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80190324 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80190326 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80190328 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019031C; +extern s16 D_8019031E; +extern s16 D_80190320; +extern s16 D_80190324; +extern s16 D_80190326; +extern s16 D_80190328; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019031C; + D_80114F34 = D_8019031E; + D_80114F38 = D_80190320; + D_80114F24 = D_80190324; + D_80114F28 = D_80190326; + D_80114F2C = D_80190328; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80190304), src[8..15] -> (*(S8_8017B8E8 *)&D_801902FC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80190304) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801902FC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019030C; +extern u16 D_8019030E; +extern u16 D_80190310; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019028C; +extern short D_80190314; +extern short D_80190316; +extern short D_80190318; +extern s16 D_80190304; +extern s16 D_80190306; +extern s16 D_80190308; +extern s16 D_801902FC; +extern s16 D_801902FE; +extern s16 D_80190300; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019030C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019030E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80190310); + (*(s16 *)&D_80190314) = buf[0]; + (*(s16 *)&D_80190316) = buf[1]; + (*(s16 *)&D_80190318) = buf[2]; + D_80190304 = D_80114F30 + buf[0]; + D_8019028C = 0; + D_80190306 = D_80114F34 + buf[1]; + D_80190308 = D_80114F38 + buf[2]; + D_801902FC = D_80114F24 + buf[0]; + D_801902FE = D_80114F28 + buf[1]; + D_80190300 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801902AC; +extern SV4 D_801902B4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801902B4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801902AC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801902B4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801902B4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801902AC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801902B4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801902D4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801902D4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019028C; +extern s16 D_80190628; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019028C = D_8019028C + 1; + if (D_8019028C >= 0x1F) { + D_80190628 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019028C; +extern s16 D_80190628; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019028C = D_8019028C + 1; + if (0x18 < D_8019028C) { + func_8012A4BC(); + D_80190628 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019028C; +extern void (*D_801902D0)(void); +extern short D_80190314; +extern short D_80190316; +extern short D_80190318; +extern s16 D_80190628; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019028C = D_8019028C + 1; + if (D_8019028C >= 0x19) { + if (D_801902D0 != 0) { + (*D_801902D0)(); + } else { + D_80114F30 = D_80114F30 + D_80190314; + D_80114F34 = D_80114F34 + D_80190316; + D_80114F38 = D_80114F38 + D_80190318; + D_80114F24 = D_80114F24 + D_80190314; + D_80114F28 = D_80114F28 + D_80190316; + D_80114F2C = D_80114F2C + D_80190318; + func_8012A4BC(); + } + D_80190628 = 0; + } +} + + + +extern void (*D_80181C24[])(void); + +void func_8017BE60(void *a0) { + D_80181C24[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80181C48[])(void); + +void func_8017BEBC(void *a0) { + D_80181C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80181C50[])(void); + +void func_8017C150(void *a0) { + D_80181C50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80181C3C; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80181C3C, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017C294); + + +extern void (*D_80181CA8[])(void); + +void func_8017D174(void *a0) { + D_80181CA8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D1B0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D1F4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181CB0[])(void); + +void func_8017D218(void *a0) { + D_80181CB0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D294); + +extern s32 func_800D1EBC(void); + void func_8017D328(void) { + func_800D1EBC(); + } + + + +extern void (*D_80181CBC[])(void); + +void func_8017D348(void *a0) { + D_80181CBC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D384); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D418); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D440); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D468); + + +extern void (*D_80181CE8[])(void); + +void func_8017D500(void *a0) { + D_80181CE8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D53C); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D5C8); + + +extern void (*D_80181D80[])(void); + +void func_8017D7A4(void *a0) { + D_80181D80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D7E0); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D878); + + +extern void (*D_80181D88[])(void); + +void func_8017D988(void *a0) { + D_80181D88[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017D9C4(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017D9E4); + + +extern void (*D_80181D94[])(void); + +void func_8017DB0C(void *a0) { + D_80181D94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8017DB48(void *a0) { + *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; + *(int *)((char *)a0 + 0x14) = 0x20000; + } + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017DB60); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017DC24); + + +extern void (*D_80181DB4[])(void); + +void func_8017DE44(void *a0) { + D_80181DB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017DE80); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017DF44); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017DFF8); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017E034); + + +extern void (*D_80181E64[])(void); + +void func_8017E060(void *a0) { + D_80181E64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017E09C); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017E0E8); + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_80178D40", func_8017E148); + +s32 func_8017E1F0(void) { + return 0x19; + } + + diff --git a/src/ov_SC02_016/ov_SC02_016_jr_801734BC.c b/src/ov_SC02_016/ov_SC02_016_jr_801734BC.c index 0cfeb67f5..600d50911 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_801734BC.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_801734BC.c @@ -3104,1456 +3104,3 @@ void func_80178D18(void) { D_801B4AD4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B3EBC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B3EBC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B3EBC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B3EBC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B3EE4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B3EE4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B3EA0; - -s32 func_8017A3B0(void) { - switch (D_801B3EA0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B3EDC; -extern short D_801B3ED8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B3EDC) { - case 0: - func_800D0CA0(1); - D_801B3EDC = D_801B3EDC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B3ED8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B3EDC = D_801B3EDC + 1; - if (D_801B3EDC < 0x1E) { - return 0; - } - D_801B3EDC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B3F1C; - extern s16 D_801B3F1E; - extern s16 D_801B3F20; - extern s16 D_801B3F14; - extern s16 D_801B3F16; - extern s16 D_801B3F18; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B3F1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B3F1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B3F20, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B3F14, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B3F16, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B3F18, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B3EA4; -extern u16 D_801B3F24; -extern u16 D_801B3F26; -extern u16 D_801B3F28; -extern s16 D_801B4A60; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B4A60 = 0; - D_801B3EA4 = 0; - D_801B3F24 = D_80126B5E; - D_801B3F26 = D_80126B62; - D_801B3F28 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187DBC[]; - extern s16 D_801B3F1C; - extern s16 D_801B3F14; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187DBC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187DBC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B3F1C; - s16 *p78C = &D_801B3F14; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B4A60 = 1; - D_801B3EA4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B3EC4; - extern SV4_8017B368 D_801B3ECC; - extern s16 D_801B3F1C; - extern s16 D_801B3F14; - extern u16 D_80187DBC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B3EC4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B3ECC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187DBC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187DBC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B3F1C) = loc0; - (*(SV4_8017B368 *)&D_801B3F14) = loc1; - D_801B4A60 = 1; - D_801B3EA4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187DBC[]; - extern s16 D_801B3F1C; - extern s16 D_801B3F1E; - extern s16 D_801B3F20; - extern s16 D_801B3F14; - extern s16 D_801B3F16; - extern s16 D_801B3F18; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187DBC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187DBC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B3F1C; - s16 *p78C = &D_801B3F14; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B3F1E; - v798 = D_801B3F20; - v78C = *p78C; - v78E = D_801B3F16; - v790 = D_801B3F18; - __asm__ __volatile__(""); - D_801B4A60 = 1; - D_801B3EA4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B3EA4; -extern s16 D_801B3F1C; -extern s16 D_801B3F1E; -extern s16 D_801B3F20; -extern s16 D_801B3F14; -extern s16 D_801B3F16; -extern s16 D_801B3F18; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B3EA4 = 0; - D_801B3F1C = (s16) D_80114F30; - D_801B3F1E = (s16) D_80114F34; - D_801B3F20 = (s16) D_80114F38; - D_801B3F14 = (s16) D_80114F24; - D_801B3F16 = (s16) D_80114F28; - D_801B3F18 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B3F34; -extern s16 D_801B3F36; -extern s16 D_801B3F38; -extern s16 D_801B3F3C; -extern s16 D_801B3F3E; -extern s16 D_801B3F40; - -void func_8017B824(void) { - D_801B3F34 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B3F36 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B3F38 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B3F3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B3F3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B3F40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B3F34; -extern s16 D_801B3F36; -extern s16 D_801B3F38; -extern s16 D_801B3F3C; -extern s16 D_801B3F3E; -extern s16 D_801B3F40; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B3F34; - D_80114F34 = D_801B3F36; - D_80114F38 = D_801B3F38; - D_80114F24 = D_801B3F3C; - D_80114F28 = D_801B3F3E; - D_80114F2C = D_801B3F40; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B3F1C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B3F14) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B3F1C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B3F14) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B3F24; -extern u16 D_801B3F26; -extern u16 D_801B3F28; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B3EA4; -extern short D_801B3F2C; -extern short D_801B3F2E; -extern short D_801B3F30; -extern s16 D_801B3F1C; -extern s16 D_801B3F1E; -extern s16 D_801B3F20; -extern s16 D_801B3F14; -extern s16 D_801B3F16; -extern s16 D_801B3F18; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B3F24); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B3F26); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B3F28); - (*(s16 *)&D_801B3F2C) = buf[0]; - (*(s16 *)&D_801B3F2E) = buf[1]; - (*(s16 *)&D_801B3F30) = buf[2]; - D_801B3F1C = D_80114F30 + buf[0]; - D_801B3EA4 = 0; - D_801B3F1E = D_80114F34 + buf[1]; - D_801B3F20 = D_80114F38 + buf[2]; - D_801B3F14 = D_80114F24 + buf[0]; - D_801B3F16 = D_80114F28 + buf[1]; - D_801B3F18 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B3EC4; -extern SV4 D_801B3ECC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B3ECC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B3EC4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B3ECC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B3ECC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B3EC4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B3ECC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B3EEC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B3EEC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B3EA4; -extern s16 D_801B4A60; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B3EA4 = D_801B3EA4 + 1; - if (D_801B3EA4 >= 0x1F) { - D_801B4A60 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B3EA4; -extern s16 D_801B4A60; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B3EA4 = D_801B3EA4 + 1; - if (0x18 < D_801B3EA4) { - func_8012A4BC(); - D_801B4A60 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B3EA4; -extern void (*D_801B3EE8)(void); -extern short D_801B3F2C; -extern short D_801B3F2E; -extern short D_801B3F30; -extern s16 D_801B4A60; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B3EA4 = D_801B3EA4 + 1; - if (D_801B3EA4 >= 0x19) { - if (D_801B3EE8 != 0) { - (*D_801B3EE8)(); - } else { - D_80114F30 = D_80114F30 + D_801B3F2C; - D_80114F34 = D_80114F34 + D_801B3F2E; - D_80114F38 = D_80114F38 + D_801B3F30; - D_80114F24 = D_80114F24 + D_801B3F2C; - D_80114F28 = D_80114F28 + D_801B3F2E; - D_80114F2C = D_80114F2C + D_801B3F30; - func_8012A4BC(); - } - D_801B4A60 = 0; - } -} - - - -extern void (*D_80187E5C[])(void); - -void func_8017BE60(void *a0) { - D_80187E5C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80187E80[])(void); - -void func_8017BEBC(void *a0) { - D_80187E80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80187E88[])(void); - -void func_8017C150(void *a0) { - D_80187E88[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80187E74; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80187E74, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017C3C4); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017C750); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017C9C8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CB10); - - -extern void (*D_80187FA0[])(void); - -void func_8017CC90(void *a0) { - D_80187FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CCCC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CD18); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CE0C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CE8C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017CFAC); - -extern void func_8012C218(void *a0); - void func_8017D038(void) { - ((void (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D058); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D0AC); - - -extern void (*D_80187FF8[])(void); - -void func_8017D0E8(void *a0) { - D_80187FF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D124); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D1D0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D3BC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D408); - - -extern void (*D_8018800C[])(void); - -void func_8017D714(void *a0) { - D_8018800C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D750); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D790); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D800); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D88C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D960); - - -extern void (*D_80188020[])(void); - -void func_8017D9B4(void *a0) { - D_80188020[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017D9F0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017DAA4); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017DC70); - - -extern void (*D_80188078[])(void); - -void func_8017EB50(void *a0) { - D_80188078[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017EB8C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EBD0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188080[])(void); - -void func_8017EBF4(void *a0) { - D_80188080[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017EC30); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017EC70); - -extern void func_800D1EBC(void); - void func_8017ED10(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017ED30); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017ED58); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017ED80); - - -extern void (*D_801880AC[])(void); - -void func_8017EE24(void *a0) { - D_801880AC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017EE60); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017EF84); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F11C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F154); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F190); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F228); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F264); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F33C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F434); - - -extern void (*D_801880FC[])(void); - -void func_8017F4A0(void *a0) { - D_801880FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F4DC); - -extern void func_8017F630(void); - void func_8017F600(s32 *param) { - if (*(u16 *)((char *)param + 0x2) == 0) { - ((void (*)(void))func_8017F630)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F630); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F6A4); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F78C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F880); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F8C0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017F9F4); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017FABC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017FB2C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017FB54); - - -extern void (*D_801884B0[])(void); - -void func_8017FBE0(void *a0) { - D_801884B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017FC1C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8017FCD0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018003C); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_80188514[]; - -extern s32 func_8012C0EC(s32 a0); - -void func_801800E4(int param_1) -{ - D_80188514[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012C0EC)(param_1); - return; -} - - -extern s32 func_8012AD50(void *a0); - void func_80180134(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180154); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801802C8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018035C); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801804D4(void) { - func_8002D4C8(0x6AA, 0); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801804F8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801805D8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801806DC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180728); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180828); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018096C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018099C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180B30); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180BD8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180F6C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180F98); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80180FE0); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801B03E4; - void func_80181028(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 8; - func_8012A828((int)arg0, (int)&D_801B03E4); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181054); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern char D_80188620; - -void func_8018109C(int param_1, int param_2) { - ((int (*)(int, int *, int *, int))func_8012D5E4)(param_1, &D_80188620, &D_80188620 + 8, param_2); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801810C8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018140C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801814A8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801815DC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181714); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801818F8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181AE8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181CB8); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801AF9CC; - void func_80181D3C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 10; - func_8012A828((int)arg0, (int)&D_801AF9CC); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181D68); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801B03E4; - void func_80181DEC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 12; - func_8012A828((int)arg0, (int)&D_801B03E4); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181E18); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181E40); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181E80); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181F54); - -void func_80181FB0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80181FB8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801820C0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182140); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182184); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801821CC); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182224); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182274); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801822E0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182434); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182488); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801824AC); - - -extern void (*D_801886F0[])(void); - -void func_801824F0(void *a0) { - D_801886F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_8018252C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182678); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801826F0); - - -void func_80182720(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182734); - - -extern void (*D_80188728[])(void); - -void func_8018279C(void *a0) { - D_80188728[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801827D8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182824); - -void func_8018286C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182874); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801829D8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182D54); - -extern void func_8012A4BC(void); - void func_80182E14(void) { - func_8012A4BC(); - } - - - -extern void (*D_801A41D4[])(void); - -void func_80182E34(void *a0) { - D_801A41D4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182E70); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80182FE8); - - -extern void (*D_801A41D8[])(void); - -void func_80183194(void *a0) { - D_801A41D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_801831D0(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801831F0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183248); - - -extern void (*D_801A4514[])(void); - -void func_801832B8(void *a0) { - D_801A4514[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801832F4); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801833C8); - -void func_801833F0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801833F8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183544); - - -extern void func_8012C218(void *a0); - s32 func_80183664(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183690); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801836A0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801836B0); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_801836F0(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183724); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183748); - - -extern void (*D_801A453C[])(void); - -void func_801837AC(void *a0) { - D_801A453C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801837E8); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183870); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183930); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_801839A0); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183A98); - - -extern void (*D_801B0758[])(void); - -void func_80183C10(void *a0) { - D_801B0758[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801B076C[])(void); - -void func_80183C4C(void *a0) { - D_801B076C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801B0744; -extern s32 D_801B0750; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_80183C88(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801B0744); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801B0750, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801B0760; - -void func_80183D68(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801B0760); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801B0A14; - -void func_80183E84(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801B0A14); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - - -extern s32 D_801B4960; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80183EE0(s32 a0, s32 a1) { - D_801B4960 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80183F10); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801734BC", func_80184154); - - -extern void (*D_801B0A68[])(void); - -void func_801843F4(void *a0) { - D_801B0A68[*(u16 *)((s32)a0 + 0x2)](); -} - - diff --git a/src/ov_SC02_016/ov_SC02_016_jr_80178D40.c b/src/ov_SC02_016/ov_SC02_016_jr_80178D40.c new file mode 100644 index 000000000..500402ee9 --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_80178D40.c @@ -0,0 +1,4923 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187664[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B3210; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187658[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018769C[]; +extern unsigned short D_801876A4[]; +extern unsigned short D_801876AC[]; +extern unsigned char D_801B3218[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B3210; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801876B4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B334C; +extern M2C_UNK D_801B3350; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B32D8; +extern void (*D_801876E4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B3354[]; +extern u8 D_801B335C[]; +extern u8 D_801B330C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801876EC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187708[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187710[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187778[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018771C; +extern u8 D_80187728; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801877AC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801877B4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187808[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018783C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018782C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187858; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801878D0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801878D8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801878E0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801878E8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801878F0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801878F8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187904[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187910[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018791C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018792C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018793C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187944[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018794C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187954[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018795C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187964[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018796C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187974[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018797C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187984[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018798C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187994[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018799C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801879A4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801879AC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801879B4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801879BC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801879C4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801879CC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801879D4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801879DC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801879E4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801879EC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187A30[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801879F4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187A60[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187A9C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187AF4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187B04[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187B0C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187C74[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187C80[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B28E4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B4A60; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B3A90; +extern short D_801B4AD4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B4AD4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B4AD4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B3A90 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B4AD4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B4A30 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B4A30 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B4AD4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B4AD4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B3EEC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B3A94; + extern s32 D_801B3EA8; + extern s16 D_801B3EAC; + extern s16 D_801B3EB0; + extern s16 D_801B3EB4; + extern s16 D_801B3EB8; + extern s32 D_801B3EC0; + extern s32 D_801B3EC4; + extern s32 D_801B3ED4; + extern s16 D_801B3ED8; + extern s16 D_801B3EDC; + extern s32 D_801B3EE0; + extern s32 D_801B3EE8; + extern s32 D_801B3EEC[10]; + extern s32 D_801B4978; + extern s16 D_801B4A30; + extern s32 D_801B4A5C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B4A30; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B3EA8); + D_801B3EA8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B3EB4, D_801B3EB8 ? 0x48 : 0x40); + (*(s16*)&D_801B4AD4) = 2; + break; + case 0: + func_80179B28(D_801B3EA8); + D_801B3EA8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B3EAC, D_801B3EB0 ? 0x48 : 0x40); + (*(s16*)&D_801B4AD4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B4978 != 0) { + func_80179B28(D_801B3EA8); + D_801B3EA8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B3EAC, D_801B3EB0 ? 0x48 : 0x40); + (*(s16*)&D_801B4AD4) = 1; + } else { + (*(s16*)&D_801B4AD4) = 3; + } + break; + case 0x32: + func_80179B28(D_801B3EA8); + D_801B3EA8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B3EAC, + D_801B3EB0 ? 0x48 : 0x40); + (*(s16*)&D_801B4AD4) = 1; + break; + case 2: + func_80179B28(D_801B3EA8); + if (D_801B3EC0 != 0) { + D_801B3A90 = D_801B3EC0; + D_801B3EC0 = 0; + (*(s16*)&D_801B4AD4) = 3; + return; + } + (*(s16*)&D_801B4AD4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B4AD4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B4AD4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B4AD4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x1B: + D_801B3EE0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B4AD4) = 4; + D_801B3A94 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B4AD4) = 5; + D_801B3ED4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B3ED4 = (s32)func_8017A3B0; + (*(s16*)&D_801B4AD4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x24: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B4AD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B4AD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B4AD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B4AD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B4AD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B4AD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B4AD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B3EC4); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B3EC4); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B3EC4); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B3EC4); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x4E: + D_801B3EE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x2B: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B4AD4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B4A5C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x34: + (*(s16*)&D_801B4AD4) = 3; + D_801B3A90 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B3EC0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B4AD4) = 3; + D_801B3A90 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B4AD4) = 3; + D_801B3A90 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B3A90 = *(s32 *)(D_801B3A90 + 4); + return; + case 0x37: + (*(s16*)&D_801B4AD4) = 3; + D_801B3EAC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B3EB0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B4AD4) = 3; + D_801B3EB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B3EB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B4AD4) = 3; + D_801B3EAC = w1; + D_801B3EB0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B4AD4) = 3; + D_801B3EB4 = w2; + D_801B3EB8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x43: + D_801B3ED4 = (s32)func_8017A3D8; + D_801B3EDC = 0; + (*(s16*)&D_801B4AD4) = 5; + D_801B3ED8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B4AD4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B4AD4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B3EEC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B4AD4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B3EEC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B4AD4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B3EEC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B4AD4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B3EEC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B4AD4) = 3; + break; + default: + break; + } +Lend: + D_801B3A90 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B3EBC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B3EBC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B3EBC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B3EBC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B3EE4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B3EE4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B3EA0; + +s32 func_8017A3B0(void) { + switch (D_801B3EA0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B3EDC; +extern short D_801B3ED8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B3EDC) { + case 0: + func_800D0CA0(1); + D_801B3EDC = D_801B3EDC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B3ED8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B3EDC = D_801B3EDC + 1; + if (D_801B3EDC < 0x1E) { + return 0; + } + D_801B3EDC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B3F1C; + extern s16 D_801B3F1E; + extern s16 D_801B3F20; + extern s16 D_801B3F14; + extern s16 D_801B3F16; + extern s16 D_801B3F18; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B3F1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B3F1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B3F20, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B3F14, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B3F16, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B3F18, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B3EA4; +extern u16 D_801B3F24; +extern u16 D_801B3F26; +extern u16 D_801B3F28; +extern s16 D_801B4A60; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B4A60 = 0; + D_801B3EA4 = 0; + D_801B3F24 = D_80126B5E; + D_801B3F26 = D_80126B62; + D_801B3F28 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187DBC[]; + extern s16 D_801B3F1C; + extern s16 D_801B3F14; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187DBC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187DBC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B3F1C; + s16 *p78C = &D_801B3F14; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B4A60 = 1; + D_801B3EA4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B3EC4; + extern SV4_8017B368 D_801B3ECC; + extern s16 D_801B3F1C; + extern s16 D_801B3F14; + extern u16 D_80187DBC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B3EC4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B3ECC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187DBC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187DBC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B3F1C) = loc0; + (*(SV4_8017B368 *)&D_801B3F14) = loc1; + D_801B4A60 = 1; + D_801B3EA4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187DBC[]; + extern s16 D_801B3F1C; + extern s16 D_801B3F1E; + extern s16 D_801B3F20; + extern s16 D_801B3F14; + extern s16 D_801B3F16; + extern s16 D_801B3F18; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187DBC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187DBC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B3F1C; + s16 *p78C = &D_801B3F14; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B3F1E; + v798 = D_801B3F20; + v78C = *p78C; + v78E = D_801B3F16; + v790 = D_801B3F18; + __asm__ __volatile__(""); + D_801B4A60 = 1; + D_801B3EA4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B3EA4; +extern s16 D_801B3F1C; +extern s16 D_801B3F1E; +extern s16 D_801B3F20; +extern s16 D_801B3F14; +extern s16 D_801B3F16; +extern s16 D_801B3F18; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B3EA4 = 0; + D_801B3F1C = (s16) D_80114F30; + D_801B3F1E = (s16) D_80114F34; + D_801B3F20 = (s16) D_80114F38; + D_801B3F14 = (s16) D_80114F24; + D_801B3F16 = (s16) D_80114F28; + D_801B3F18 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B3F34; +extern s16 D_801B3F36; +extern s16 D_801B3F38; +extern s16 D_801B3F3C; +extern s16 D_801B3F3E; +extern s16 D_801B3F40; + +void func_8017B824(void) { + D_801B3F34 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B3F36 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B3F38 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B3F3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B3F3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B3F40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B3F34; +extern s16 D_801B3F36; +extern s16 D_801B3F38; +extern s16 D_801B3F3C; +extern s16 D_801B3F3E; +extern s16 D_801B3F40; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B3F34; + D_80114F34 = D_801B3F36; + D_80114F38 = D_801B3F38; + D_80114F24 = D_801B3F3C; + D_80114F28 = D_801B3F3E; + D_80114F2C = D_801B3F40; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B3F1C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B3F14) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B3F1C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B3F14) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B3F24; +extern u16 D_801B3F26; +extern u16 D_801B3F28; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B3EA4; +extern short D_801B3F2C; +extern short D_801B3F2E; +extern short D_801B3F30; +extern s16 D_801B3F1C; +extern s16 D_801B3F1E; +extern s16 D_801B3F20; +extern s16 D_801B3F14; +extern s16 D_801B3F16; +extern s16 D_801B3F18; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B3F24); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B3F26); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B3F28); + (*(s16 *)&D_801B3F2C) = buf[0]; + (*(s16 *)&D_801B3F2E) = buf[1]; + (*(s16 *)&D_801B3F30) = buf[2]; + D_801B3F1C = D_80114F30 + buf[0]; + D_801B3EA4 = 0; + D_801B3F1E = D_80114F34 + buf[1]; + D_801B3F20 = D_80114F38 + buf[2]; + D_801B3F14 = D_80114F24 + buf[0]; + D_801B3F16 = D_80114F28 + buf[1]; + D_801B3F18 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B3EC4; +extern SV4 D_801B3ECC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B3ECC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B3EC4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B3ECC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B3ECC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B3EC4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B3ECC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B3EEC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B3EEC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B3EA4; +extern s16 D_801B4A60; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B3EA4 = D_801B3EA4 + 1; + if (D_801B3EA4 >= 0x1F) { + D_801B4A60 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B3EA4; +extern s16 D_801B4A60; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B3EA4 = D_801B3EA4 + 1; + if (0x18 < D_801B3EA4) { + func_8012A4BC(); + D_801B4A60 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B3EA4; +extern void (*D_801B3EE8)(void); +extern short D_801B3F2C; +extern short D_801B3F2E; +extern short D_801B3F30; +extern s16 D_801B4A60; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B3EA4 = D_801B3EA4 + 1; + if (D_801B3EA4 >= 0x19) { + if (D_801B3EE8 != 0) { + (*D_801B3EE8)(); + } else { + D_80114F30 = D_80114F30 + D_801B3F2C; + D_80114F34 = D_80114F34 + D_801B3F2E; + D_80114F38 = D_80114F38 + D_801B3F30; + D_80114F24 = D_80114F24 + D_801B3F2C; + D_80114F28 = D_80114F28 + D_801B3F2E; + D_80114F2C = D_80114F2C + D_801B3F30; + func_8012A4BC(); + } + D_801B4A60 = 0; + } +} + + + +extern void (*D_80187E5C[])(void); + +void func_8017BE60(void *a0) { + D_80187E5C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80187E80[])(void); + +void func_8017BEBC(void *a0) { + D_80187E80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80187E88[])(void); + +void func_8017C150(void *a0) { + D_80187E88[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80187E74; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80187E74, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017C3C4); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017C750); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017C9C8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CB10); + + +extern void (*D_80187FA0[])(void); + +void func_8017CC90(void *a0) { + D_80187FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CCCC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CD18); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CE0C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CE8C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017CFAC); + +extern void func_8012C218(void *a0); + void func_8017D038(void) { + ((void (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D058); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D0AC); + + +extern void (*D_80187FF8[])(void); + +void func_8017D0E8(void *a0) { + D_80187FF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D124); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D1D0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D3BC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D408); + + +extern void (*D_8018800C[])(void); + +void func_8017D714(void *a0) { + D_8018800C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D750); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D790); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D800); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D88C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D960); + + +extern void (*D_80188020[])(void); + +void func_8017D9B4(void *a0) { + D_80188020[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017D9F0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017DAA4); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017DC70); + + +extern void (*D_80188078[])(void); + +void func_8017EB50(void *a0) { + D_80188078[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017EB8C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EBD0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188080[])(void); + +void func_8017EBF4(void *a0) { + D_80188080[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017EC30); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017EC70); + +extern void func_800D1EBC(void); + void func_8017ED10(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017ED30); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017ED58); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017ED80); + + +extern void (*D_801880AC[])(void); + +void func_8017EE24(void *a0) { + D_801880AC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017EE60); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017EF84); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F11C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F154); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F190); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F228); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F264); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F33C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F434); + + +extern void (*D_801880FC[])(void); + +void func_8017F4A0(void *a0) { + D_801880FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F4DC); + +extern void func_8017F630(void); + void func_8017F600(s32 *param) { + if (*(u16 *)((char *)param + 0x2) == 0) { + ((void (*)(void))func_8017F630)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F630); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F6A4); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F78C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F880); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F8C0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017F9F4); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017FABC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017FB2C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017FB54); + + +extern void (*D_801884B0[])(void); + +void func_8017FBE0(void *a0) { + D_801884B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017FC1C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8017FCD0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018003C); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_80188514[]; + +extern s32 func_8012C0EC(s32 a0); + +void func_801800E4(int param_1) +{ + D_80188514[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012C0EC)(param_1); + return; +} + + +extern s32 func_8012AD50(void *a0); + void func_80180134(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180154); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801802C8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018035C); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801804D4(void) { + func_8002D4C8(0x6AA, 0); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801804F8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801805D8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801806DC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180728); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180828); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018096C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018099C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180B30); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180BD8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180F6C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180F98); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80180FE0); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801B03E4; + void func_80181028(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 8; + func_8012A828((int)arg0, (int)&D_801B03E4); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181054); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern char D_80188620; + +void func_8018109C(int param_1, int param_2) { + ((int (*)(int, int *, int *, int))func_8012D5E4)(param_1, &D_80188620, &D_80188620 + 8, param_2); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801810C8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018140C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801814A8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801815DC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181714); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801818F8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181AE8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181CB8); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801AF9CC; + void func_80181D3C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 10; + func_8012A828((int)arg0, (int)&D_801AF9CC); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181D68); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801B03E4; + void func_80181DEC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 12; + func_8012A828((int)arg0, (int)&D_801B03E4); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181E18); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181E40); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181E80); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181F54); + +void func_80181FB0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80181FB8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801820C0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182140); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182184); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801821CC); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182224); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182274); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801822E0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182434); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182488); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801824AC); + + +extern void (*D_801886F0[])(void); + +void func_801824F0(void *a0) { + D_801886F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_8018252C); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182678); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801826F0); + + +void func_80182720(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182734); + + +extern void (*D_80188728[])(void); + +void func_8018279C(void *a0) { + D_80188728[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801827D8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182824); + +void func_8018286C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182874); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801829D8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182D54); + +extern void func_8012A4BC(void); + void func_80182E14(void) { + func_8012A4BC(); + } + + + +extern void (*D_801A41D4[])(void); + +void func_80182E34(void *a0) { + D_801A41D4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182E70); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80182FE8); + + +extern void (*D_801A41D8[])(void); + +void func_80183194(void *a0) { + D_801A41D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_801831D0(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801831F0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183248); + + +extern void (*D_801A4514[])(void); + +void func_801832B8(void *a0) { + D_801A4514[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801832F4); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801833C8); + +void func_801833F0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801833F8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183544); + + +extern void func_8012C218(void *a0); + s32 func_80183664(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183690); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801836A0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801836B0); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_801836F0(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183724); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183748); + + +extern void (*D_801A453C[])(void); + +void func_801837AC(void *a0) { + D_801A453C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801837E8); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183870); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183930); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_801839A0); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183A98); + + +extern void (*D_801B0758[])(void); + +void func_80183C10(void *a0) { + D_801B0758[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801B076C[])(void); + +void func_80183C4C(void *a0) { + D_801B076C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801B0744; +extern s32 D_801B0750; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_80183C88(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801B0744); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801B0750, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801B0760; + +void func_80183D68(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801B0760); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801B0A14; + +void func_80183E84(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801B0A14); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + + +extern s32 D_801B4960; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80183EE0(s32 a0, s32 a1) { + D_801B4960 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80183F10); + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_80178D40", func_80184154); + + +extern void (*D_801B0A68[])(void); + +void func_801843F4(void *a0) { + D_801B0A68[*(u16 *)((s32)a0 + 0x2)](); +} + + + diff --git a/src/ov_SC02_017/ov_SC02_017_jr_801734BC.c b/src/ov_SC02_017/ov_SC02_017_jr_801734BC.c index 3f76e74d6..cc8232f5a 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_801734BC.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_801734BC.c @@ -3104,2160 +3104,3 @@ void func_80178D18(void) { D_801EFD34 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EF6E4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EF6E4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EF6E4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EF6E4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EF70C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EF70C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EF6C8; - -s32 func_8017A3B0(void) { - switch (D_801EF6C8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EF744; - extern s16 D_801EF746; - extern s16 D_801EF748; - extern s16 D_801EF73C; - extern s16 D_801EF73E; - extern s16 D_801EF740; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EF744, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EF746, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EF748, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EF73C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EF73E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EF740, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EF6CC; -extern u16 D_801EF74C; -extern u16 D_801EF74E; -extern u16 D_801EF750; -extern s16 D_801EFCC0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EFCC0 = 0; - D_801EF6CC = 0; - D_801EF74C = D_80126B5E; - D_801EF74E = D_80126B62; - D_801EF750 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018DE14[]; - extern s16 D_801EF744; - extern s16 D_801EF73C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018DE14[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018DE14[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EF744; - s16 *p78C = &D_801EF73C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EFCC0 = 1; - D_801EF6CC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EF6EC; - extern SV4_8017B368 D_801EF6F4; - extern s16 D_801EF744; - extern s16 D_801EF73C; - extern u16 D_8018DE14; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EF6EC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EF6F4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018DE14)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018DE14)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EF744) = loc0; - (*(SV4_8017B368 *)&D_801EF73C) = loc1; - D_801EFCC0 = 1; - D_801EF6CC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018DE14[]; - extern s16 D_801EF744; - extern s16 D_801EF746; - extern s16 D_801EF748; - extern s16 D_801EF73C; - extern s16 D_801EF73E; - extern s16 D_801EF740; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018DE14[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018DE14[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EF744; - s16 *p78C = &D_801EF73C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EF746; - v798 = D_801EF748; - v78C = *p78C; - v78E = D_801EF73E; - v790 = D_801EF740; - __asm__ __volatile__(""); - D_801EFCC0 = 1; - D_801EF6CC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EF6CC; -extern s16 D_801EF744; -extern s16 D_801EF746; -extern s16 D_801EF748; -extern s16 D_801EF73C; -extern s16 D_801EF73E; -extern s16 D_801EF740; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EF6CC = 0; - D_801EF744 = (s16) D_80114F30; - D_801EF746 = (s16) D_80114F34; - D_801EF748 = (s16) D_80114F38; - D_801EF73C = (s16) D_80114F24; - D_801EF73E = (s16) D_80114F28; - D_801EF740 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EF75C; -extern s16 D_801EF75E; -extern s16 D_801EF760; -extern s16 D_801EF764; -extern s16 D_801EF766; -extern s16 D_801EF768; - -void func_8017B824(void) { - D_801EF75C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EF75E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EF760 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EF764 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EF766 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EF768 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EF75C; -extern s16 D_801EF75E; -extern s16 D_801EF760; -extern s16 D_801EF764; -extern s16 D_801EF766; -extern s16 D_801EF768; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EF75C; - D_80114F34 = D_801EF75E; - D_80114F38 = D_801EF760; - D_80114F24 = D_801EF764; - D_80114F28 = D_801EF766; - D_80114F2C = D_801EF768; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EF744), src[8..15] -> (*(S8_8017B8E8 *)&D_801EF73C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EF744) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EF73C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EF74C; -extern u16 D_801EF74E; -extern u16 D_801EF750; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EF6CC; -extern short D_801EF754; -extern short D_801EF756; -extern short D_801EF758; -extern s16 D_801EF744; -extern s16 D_801EF746; -extern s16 D_801EF748; -extern s16 D_801EF73C; -extern s16 D_801EF73E; -extern s16 D_801EF740; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EF74C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EF74E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EF750); - (*(s16 *)&D_801EF754) = buf[0]; - (*(s16 *)&D_801EF756) = buf[1]; - (*(s16 *)&D_801EF758) = buf[2]; - D_801EF744 = D_80114F30 + buf[0]; - D_801EF6CC = 0; - D_801EF746 = D_80114F34 + buf[1]; - D_801EF748 = D_80114F38 + buf[2]; - D_801EF73C = D_80114F24 + buf[0]; - D_801EF73E = D_80114F28 + buf[1]; - D_801EF740 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EF6EC; -extern SV4 D_801EF6F4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EF6F4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EF6EC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EF6F4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EF6F4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EF6EC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EF6F4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EF714[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EF714; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EF6CC; -extern s16 D_801EFCC0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EF6CC = D_801EF6CC + 1; - if (D_801EF6CC >= 0x1F) { - D_801EFCC0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EF6CC; -extern s16 D_801EFCC0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EF6CC = D_801EF6CC + 1; - if (0x18 < D_801EF6CC) { - func_8012A4BC(); - D_801EFCC0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EF6CC; -extern void (*D_801EF710)(void); -extern short D_801EF754; -extern short D_801EF756; -extern short D_801EF758; -extern s16 D_801EFCC0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EF6CC = D_801EF6CC + 1; - if (D_801EF6CC >= 0x19) { - if (D_801EF710 != 0) { - (*D_801EF710)(); - } else { - D_80114F30 = D_80114F30 + D_801EF754; - D_80114F34 = D_80114F34 + D_801EF756; - D_80114F38 = D_80114F38 + D_801EF758; - D_80114F24 = D_80114F24 + D_801EF754; - D_80114F28 = D_80114F28 + D_801EF756; - D_80114F2C = D_80114F2C + D_801EF758; - func_8012A4BC(); - } - D_801EFCC0 = 0; - } -} - - - -extern void (*D_8018DEB4[])(void); - -void func_8017BE60(void *a0) { - D_8018DEB4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_8018DED8[])(void); - -void func_8017BEBC(void *a0) { - D_8018DED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_8018DEE0[])(void); - -void func_8017C150(void *a0) { - D_8018DEE0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018DECC; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018DECC, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017C3C4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017C750); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017C9C8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CB10); - - -extern void (*D_8018DFF8[])(void); - -void func_8017CC90(void *a0) { - D_8018DFF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CCCC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CD18); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CE0C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CE8C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017CFAC); - -extern void func_8012C218(void *a0); - void func_8017D038(void) { - ((void (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D058); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D0AC); - - -extern void (*D_8018E050[])(void); - -void func_8017D0E8(void *a0) { - D_8018E050[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D124); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D1D0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D3BC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D408); - - -extern void (*D_8018E064[])(void); - -void func_8017D714(void *a0) { - D_8018E064[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D750); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D790); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D800); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D88C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D960); - - -extern void (*D_8018E078[])(void); - -void func_8017D9B4(void *a0) { - D_8018E078[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017D9F0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DAA4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DC70); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DD3C); - - -extern void (*D_8018E08C[])(void); - -void func_8017DE98(void *a0) { - D_8018E08C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DED4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017DF34); - - -extern void (*D_8018E10C[])(void); - -void func_8017EE14(void *a0) { - D_8018E10C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017EE50); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EE94(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018E114[])(void); - -void func_8017EEB8(void *a0) { - D_8018E114[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017EEF4); - - -extern void (*D_8018E11C[])(void); - -void func_8017EF38(void *a0) { - D_8018E11C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017EF74); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EFB4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017F030(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018E128[])(void); - -void func_8017F050(void *a0) { - D_8018E128[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F08C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F0CC); - -extern void func_800D1EBC(void); - void func_8017F140(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018E134[])(void); - -void func_8017F160(void *a0) { - D_8018E134[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017F19C(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017F1B8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017F234(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F254); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F27C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F2A4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F2CC); - - -extern void (*D_8018E1B4[])(void); - -void func_8017F2F4(void *a0) { - D_8018E1B4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F330); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F3B0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F474); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F4AC); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018E17C; - -void func_8017F59C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018E17C, 0x1000000); -} - - - -extern void (*D_8018E1C4[])(void); - -void func_8017F5C4(void *a0) { - D_8018E1C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F600); - -void func_8017F63C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F644); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F66C); - - -extern void (*D_8018E1CC[])(void); - -void func_8017F72C(void *a0) { - D_8018E1CC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F768); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017F92C); - -s32 func_8017FAF8(void) { - return 0x18; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FB00); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FB60); - -void func_8017FC84(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_8018E214; - void func_8017FC8C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - func_80178CBC((int)arg0, (int)&D_8018E214); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FCB8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FCFC); - - -extern void (*D_8018E310[])(void); - -void func_8017FE3C(void *a0) { - D_8018E310[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FE78); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8017FF48); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", listCdBuffer); - -extern s32 func_801805D4(void); - void func_80180064(void) { - func_801805D4(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180084); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180270); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180304); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180398); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180410); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801804A8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180530); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180554); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180590); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801805D4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180610); - - -extern void (*D_8018E368[])(void); - -void func_8018068C(void *a0) { - D_8018E368[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801806C8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801807DC); - -extern s32 func_8018096C(void); - void func_8018094C(void) { - func_8018096C(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018096C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801809A8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180A10); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180AB8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180B00); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180C44); - -extern void func_8012B260(u8 *a0); -extern void func_80180CCC(void *a0); -extern void func_8012B178(s32 a0, s32 a1); - -void func_80180C90(s32 arg0) { - s32 var_v0; - - var_v0 = arg0; - ((void (*)(s32 *))func_8012B260)((s32 *)var_v0); - ((s32 (*)(s32))func_80180CCC)(var_v0); - func_8012B178(var_v0, 0x20000); -} - - -void func_80180CCC(void *a0) { - *(s32 *)((s32)a0 + 0x18) = 0; - *(s32 *)((s32)a0 + 0x14) = 0; - *(s32 *)((s32)a0 + 0x10) = 0; - *(s32 *)((s32)a0 + 0x4c) = 0; - *(s32 *)((s32)a0 + 0x44) = 0; - *(s32 *)((s32)a0 + 0x48) = 0x1000; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180CEC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180D8C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180EB0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180EF4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80180F8C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018104C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181090); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801810D4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181118); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801811D0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181250); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181294); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181594); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181604); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018183C); - -extern void (*D_8018E52C[])(void); - -void func_80181974(void *a0) { - D_8018E52C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801819B0); - -void func_80181A54(void) { -} - - -extern void (*D_8018E534[])(void); - -void func_80181A5C(void *a0) { - D_8018E534[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181A98); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181B0C); - -extern void func_8012C098(void); - void func_80181B48(s32 arg0) { - s32 v0; - if (*(s16 *)(arg0 + 0xfc) != *(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36)) { - ((void (*)(void))func_8012C098)(); - } - } - - - -extern void (*D_8018E54C[])(void); - -void func_80181B80(void *a0) { - D_8018E54C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181BBC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181C58); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181CF0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181D80); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181E5C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80181E98); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018209C); - - -extern void (*D_8018E5C4[])(void); - -void func_801822A0(void *a0) { - D_8018E5C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801822DC); - -void func_80182354(void) { -} - - -extern void (*D_8018E5DC[])(void); - -void func_8018235C(void *a0) { - D_8018E5DC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_8018E5CC; - -void func_80182398(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8018E5CC | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_80182414(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E5FC[])(); - -void func_8018241C(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E5FC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182468); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182558); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801825F4); - -void func_80182670(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E60C[])(); - -void func_80182678(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E60C[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801826C4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182744); - -extern s32 func_8018287C(void); - void func_801827A4(void) { - func_8018287C(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801827C4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182844); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018287C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182938); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801829F4); - - -extern void (*D_8018E780[])(void); - -void func_80182A54(void *a0) { - D_8018E780[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182A90); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182B44); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182EB0); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018E90C[])(); - -void func_80182F58(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018E90C[*(u16 *)(param_1 + 2)](); - } -} - - -extern s32 func_8012AD50(void *a0); - void func_80182FA4(s32 *param) { - *(u16 *)((char *)param + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80182FD0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183168); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801831FC); - - -extern void (*D_8018E914[])(void); - -void func_801832F4(void *a0) { - D_8018E914[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183330); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018337C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801833FC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018347C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801835F4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183628); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018365C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183690); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801836A8); - - -extern void (*D_8018EE88[])(void); - -void func_801836F0(void *a0) { - D_8018EE88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018372C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183790); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183800); - - -extern void (*D_8018EEE0[])(void); - -void func_80183904(void *a0) { - D_8018EEE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183940); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183984); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801839A8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183A3C); - -extern void func_80029124(s32 arg0, s32 arg1); - extern void func_801472F0(void *a0); - void func_80183AD0(void) { - func_80029124(0x96, 1); - ((void (*)(s32))func_801472F0)(0x430); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183AFC); - -extern s32 func_8001AAA0(s32 arg); - s32 func_80183B10(void) { - return func_8001AAA0(0x2C) != 0; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183B30); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183B9C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183C30); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183C6C); - -extern s32 func_8012BEE8(s32); - extern void func_8018372C(s32); - void func_80183D30(s32 arg0) { - if (func_8012BEE8(arg0)) { - func_8018372C(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183D68); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183DFC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183E70); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80183FA8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184084); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801840F8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018413C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018416C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184208); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801842E0); - - -extern void (*D_801CC350[])(void); - -void func_80184438(void *a0) { - D_801CC350[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184474); - -void func_80184510(void) { -} - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184518); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018457C); - -void func_8018461C(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - *(s32 *)((s32)a0 + 0x1c) = 0x10; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184630); - - -extern void (*D_801CC3AC[])(void); - -void func_8018467C(void *a0) { - D_801CC3AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801846B8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184754); - - -extern void (*D_801CC3CC[])(void); - -void func_80184878(void *a0) { - D_801CC3CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801848B4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018495C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184B18); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184BA4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184C28); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184C58); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184D28); - -extern s32 func_8012BEE8(s32 arg); - void func_80184D9C(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((u8 *)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184DD0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184E38); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80184F4C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018501C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185064); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018518C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185244); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801852D4); - -extern void func_80185B5C(void); - void func_80185300(void) { - func_80185B5C(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185320); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185338); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185364); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801853DC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185494); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185574); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801855CC); - - -void func_80185670(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185680); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185768); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801857C4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018583C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018590C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801859C4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185AF0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185B5C); - - -extern s32 rand(void); - void func_80185C68(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185CA4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185D10); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185EE4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80185F88); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80186100(void) { - func_8002D4C8(0x6AA, 0); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186124); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186168); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018626C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801862B8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801863B8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186500); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186530); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801866C8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186770); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186B08); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186B34); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186B7C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186BC4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186BF0); - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern char D_801D61B0; - -void func_80186C38(int param_1, int param_2) { - ((int (*)(int, int *, int *, int))func_8012D5E4)(param_1, &D_801D61B0, &D_801D61B0 + 8, param_2); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186C64); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80186FA8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187044); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187178); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187298); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801874E8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801876AC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187710); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187794); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801877C0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187814); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187840); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187868); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801878A8); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187940); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801879A4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187A24); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187A68); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187AB0); - - -extern void (*D_801E1D78[])(void); - -void func_80187C28(void *a0) { - D_801E1D78[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E1D8C[])(void); - -void func_80187C64(void *a0) { - D_801E1D8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801E1D64; -extern s32 D_801E1D70; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_80187CA0(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801E1D64); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801E1D70, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801E1D80; - -void func_80187D80(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801E1D80); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801E2034; - -void func_80187E9C(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801E2034); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - -extern void func_8012C098(void); - void func_80187EF8(void) { - func_8012C098(); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187F18); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80187F84); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018800C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188050); - - -void func_801880F4(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188104); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801E9CCC; - -void func_801881B0(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801E9CCC)) { - func_8012A828(arg0, &D_801E9CCC); - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801881F8); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801EA154; - -void func_80188240(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801EA154); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_80188330 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_80188330(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801EA0AC; - -s32 func_80188280(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_80188330(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801EA0AC); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801E9E6C; - -void func_80188330(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801E9E6C); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_8018838C(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801883A0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801883FC); - - -extern void (*D_801E2150[])(void); - -void func_80188480(void *a0) { - D_801E2150[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E2198[])(void); - -void func_801884BC(void *a0) { - D_801E2198[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern void func_80143994(s32 a0, s32 a1); -extern int D_801E2158; - -void func_801884F8(int param_1) -{ - int iVar1; - - iVar1 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = iVar1; - if (iVar1 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - *(short *)(param_1 + 2) = 1; - func_8001CA88(*(int *)(param_1 + 0x20), &D_801E2158); - func_80143994(param_1, 0x1000); - } -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018855C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801885B4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188620); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018875C); - -extern s32 func_8012BEE8(s32 arg); - extern void func_801883A0(s32 *a0); - void func_801887C8(s32 *a0) { - if (func_8012BEE8((s32)a0)) { - func_801883A0(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188800); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188864); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801888BC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188974); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801889E4); - - -extern void (*D_801EAE7C[])(void); - -void func_80188B74(void *a0) { - D_801EAE7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188BB0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188C84); - -void func_80188CAC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188CB4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188E00); - -extern void func_8012C218(void *a0); - s32 func_80188F20(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188F4C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188F5C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188F6C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80188FAC(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80188FE0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189004); - - -extern void (*D_801EAEA4[])(void); - -void func_80189068(void *a0) { - D_801EAEA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801890A4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018912C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801891EC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018925C); - - -extern s32 D_801EFBC0; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80189354(s32 a0, s32 a1) { - D_801EFBC0 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189384); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801895C8); - - -extern void (*D_801EB5C0[])(void); - -void func_80189868(void *a0) { - D_801EB5C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_801898A4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189908); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189A68); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189C4C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189D08); - - -extern void (*D_801ECD34[])(void); - -void func_80189DB4(void *a0) { - D_801ECD34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189DF0); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_80189EEC); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018A17C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018A310); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018A368); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018A3E4); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_801734BC", func_8018A428); - diff --git a/src/ov_SC02_017/ov_SC02_017_jr_80178D40.c b/src/ov_SC02_017/ov_SC02_017_jr_80178D40.c new file mode 100644 index 000000000..77e8dc055 --- /dev/null +++ b/src/ov_SC02_017/ov_SC02_017_jr_80178D40.c @@ -0,0 +1,5627 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018D6BC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EEA38; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018D6B0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018D6F4[]; +extern unsigned short D_8018D6FC[]; +extern unsigned short D_8018D704[]; +extern unsigned char D_801EEA40[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EEA38; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018D70C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EEB74; +extern M2C_UNK D_801EEB78; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EEB00; +extern void (*D_8018D73C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EEB7C[]; +extern u8 D_801EEB84[]; +extern u8 D_801EEB34[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018D744[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018D760[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018D768[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018D7D0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018D774; +extern u8 D_8018D780; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018D804[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018D80C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018D860[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018D894[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018D884[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018D8B0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018D928[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018D930[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018D938[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018D940[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018D948[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018D950[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018D95C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018D968[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018D974[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018D984[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018D994[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018D99C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018D9A4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018D9AC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018D9B4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018D9BC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018D9C4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018D9CC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018D9D4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018D9DC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018D9E4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018D9EC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018D9F4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018D9FC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018DA04[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018DA0C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018DA14[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018DA1C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018DA24[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018DA2C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018DA34[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018DA3C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018DA44[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018DA88[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018DA4C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018DAB8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018DAF4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018DB4C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018DB5C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018DB64[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018DCCC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018DCD8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801EE104; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EFCC0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EF2B8; +extern short D_801EFD34; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EFD34) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EFD34)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EF2B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EFD34) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EFC90 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EFC90 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EFD34) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EFD34) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EF714[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EF2BC; + extern s32 D_801EF6D0; + extern s16 D_801EF6D4; + extern s16 D_801EF6D8; + extern s16 D_801EF6DC; + extern s16 D_801EF6E0; + extern s32 D_801EF6E8; + extern s32 D_801EF6EC; + extern s32 D_801EF6FC; + extern s16 D_801EF700; + extern s16 D_801EF704; + extern s32 D_801EF708; + extern s32 D_801EF710; + extern s32 D_801EF714[10]; + extern s32 D_801EFBD8; + extern s16 D_801EFC90; + extern s32 D_801EFCBC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EFC90; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EF6D0); + D_801EF6D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EF6DC, D_801EF6E0 ? 0x48 : 0x40); + (*(s16*)&D_801EFD34) = 2; + break; + case 0: + func_80179B28(D_801EF6D0); + D_801EF6D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EF6D4, D_801EF6D8 ? 0x48 : 0x40); + (*(s16*)&D_801EFD34) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EFBD8 != 0) { + func_80179B28(D_801EF6D0); + D_801EF6D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EF6D4, D_801EF6D8 ? 0x48 : 0x40); + (*(s16*)&D_801EFD34) = 1; + } else { + (*(s16*)&D_801EFD34) = 3; + } + break; + case 0x32: + func_80179B28(D_801EF6D0); + D_801EF6D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EF6D4, + D_801EF6D8 ? 0x48 : 0x40); + (*(s16*)&D_801EFD34) = 1; + break; + case 2: + func_80179B28(D_801EF6D0); + if (D_801EF6E8 != 0) { + D_801EF2B8 = D_801EF6E8; + D_801EF6E8 = 0; + (*(s16*)&D_801EFD34) = 3; + return; + } + (*(s16*)&D_801EFD34) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EFD34) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EFD34) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EFD34) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EFD34) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EFD34) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x1B: + D_801EF708 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EFD34) = 4; + D_801EF2BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EFD34) = 5; + D_801EF6FC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EF6FC = (s32)func_8017A3B0; + (*(s16*)&D_801EFD34) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x24: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EFD34) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EFD34) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EFD34) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EFD34) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EFD34) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EFD34) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EFD34) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EFD34) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EFD34) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EF6EC); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EF6EC); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EF6EC); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EF6EC); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x4E: + D_801EF710 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x2B: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EFD34) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EFCBC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x34: + (*(s16*)&D_801EFD34) = 3; + D_801EF2B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EF6E8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EFD34) = 3; + D_801EF2B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EFD34) = 3; + D_801EF2B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EF2B8 = *(s32 *)(D_801EF2B8 + 4); + return; + case 0x37: + (*(s16*)&D_801EFD34) = 3; + D_801EF6D4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EF6D8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EFD34) = 3; + D_801EF6DC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EF6E0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EFD34) = 3; + D_801EF6D4 = w1; + D_801EF6D8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EFD34) = 3; + D_801EF6DC = w2; + D_801EF6E0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x43: + D_801EF6FC = (s32)func_8017A3D8; + D_801EF704 = 0; + (*(s16*)&D_801EFD34) = 5; + D_801EF700 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EFD34) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EFD34) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EF714; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EFD34) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EF714; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EFD34) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EF714[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EFD34) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EF714; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EFD34) = 3; + break; + default: + break; + } +Lend: + D_801EF2B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EF6E4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EF6E4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EF6E4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EF6E4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EF70C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EF70C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EF6C8; + +s32 func_8017A3B0(void) { + switch (D_801EF6C8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EF744; + extern s16 D_801EF746; + extern s16 D_801EF748; + extern s16 D_801EF73C; + extern s16 D_801EF73E; + extern s16 D_801EF740; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EF744, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EF746, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EF748, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EF73C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EF73E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EF740, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EF6CC; +extern u16 D_801EF74C; +extern u16 D_801EF74E; +extern u16 D_801EF750; +extern s16 D_801EFCC0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EFCC0 = 0; + D_801EF6CC = 0; + D_801EF74C = D_80126B5E; + D_801EF74E = D_80126B62; + D_801EF750 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018DE14[]; + extern s16 D_801EF744; + extern s16 D_801EF73C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018DE14[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018DE14[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EF744; + s16 *p78C = &D_801EF73C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EFCC0 = 1; + D_801EF6CC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EF6EC; + extern SV4_8017B368 D_801EF6F4; + extern s16 D_801EF744; + extern s16 D_801EF73C; + extern u16 D_8018DE14; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EF6EC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EF6F4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018DE14)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018DE14)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EF744) = loc0; + (*(SV4_8017B368 *)&D_801EF73C) = loc1; + D_801EFCC0 = 1; + D_801EF6CC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018DE14[]; + extern s16 D_801EF744; + extern s16 D_801EF746; + extern s16 D_801EF748; + extern s16 D_801EF73C; + extern s16 D_801EF73E; + extern s16 D_801EF740; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018DE14[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018DE14[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EF744; + s16 *p78C = &D_801EF73C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EF746; + v798 = D_801EF748; + v78C = *p78C; + v78E = D_801EF73E; + v790 = D_801EF740; + __asm__ __volatile__(""); + D_801EFCC0 = 1; + D_801EF6CC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EF6CC; +extern s16 D_801EF744; +extern s16 D_801EF746; +extern s16 D_801EF748; +extern s16 D_801EF73C; +extern s16 D_801EF73E; +extern s16 D_801EF740; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EF6CC = 0; + D_801EF744 = (s16) D_80114F30; + D_801EF746 = (s16) D_80114F34; + D_801EF748 = (s16) D_80114F38; + D_801EF73C = (s16) D_80114F24; + D_801EF73E = (s16) D_80114F28; + D_801EF740 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EF75C; +extern s16 D_801EF75E; +extern s16 D_801EF760; +extern s16 D_801EF764; +extern s16 D_801EF766; +extern s16 D_801EF768; + +void func_8017B824(void) { + D_801EF75C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EF75E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EF760 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EF764 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EF766 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EF768 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EF75C; +extern s16 D_801EF75E; +extern s16 D_801EF760; +extern s16 D_801EF764; +extern s16 D_801EF766; +extern s16 D_801EF768; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EF75C; + D_80114F34 = D_801EF75E; + D_80114F38 = D_801EF760; + D_80114F24 = D_801EF764; + D_80114F28 = D_801EF766; + D_80114F2C = D_801EF768; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EF744), src[8..15] -> (*(S8_8017B8E8 *)&D_801EF73C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EF744) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EF73C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EF74C; +extern u16 D_801EF74E; +extern u16 D_801EF750; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EF6CC; +extern short D_801EF754; +extern short D_801EF756; +extern short D_801EF758; +extern s16 D_801EF744; +extern s16 D_801EF746; +extern s16 D_801EF748; +extern s16 D_801EF73C; +extern s16 D_801EF73E; +extern s16 D_801EF740; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EF74C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EF74E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EF750); + (*(s16 *)&D_801EF754) = buf[0]; + (*(s16 *)&D_801EF756) = buf[1]; + (*(s16 *)&D_801EF758) = buf[2]; + D_801EF744 = D_80114F30 + buf[0]; + D_801EF6CC = 0; + D_801EF746 = D_80114F34 + buf[1]; + D_801EF748 = D_80114F38 + buf[2]; + D_801EF73C = D_80114F24 + buf[0]; + D_801EF73E = D_80114F28 + buf[1]; + D_801EF740 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EF6EC; +extern SV4 D_801EF6F4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EF6F4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EF6EC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EF6F4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EF6F4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EF6EC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EF6F4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EF714[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EF714; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EF6CC; +extern s16 D_801EFCC0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EF6CC = D_801EF6CC + 1; + if (D_801EF6CC >= 0x1F) { + D_801EFCC0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EF6CC; +extern s16 D_801EFCC0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EF6CC = D_801EF6CC + 1; + if (0x18 < D_801EF6CC) { + func_8012A4BC(); + D_801EFCC0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EF6CC; +extern void (*D_801EF710)(void); +extern short D_801EF754; +extern short D_801EF756; +extern short D_801EF758; +extern s16 D_801EFCC0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EF6CC = D_801EF6CC + 1; + if (D_801EF6CC >= 0x19) { + if (D_801EF710 != 0) { + (*D_801EF710)(); + } else { + D_80114F30 = D_80114F30 + D_801EF754; + D_80114F34 = D_80114F34 + D_801EF756; + D_80114F38 = D_80114F38 + D_801EF758; + D_80114F24 = D_80114F24 + D_801EF754; + D_80114F28 = D_80114F28 + D_801EF756; + D_80114F2C = D_80114F2C + D_801EF758; + func_8012A4BC(); + } + D_801EFCC0 = 0; + } +} + + + +extern void (*D_8018DEB4[])(void); + +void func_8017BE60(void *a0) { + D_8018DEB4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_8018DED8[])(void); + +void func_8017BEBC(void *a0) { + D_8018DED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_8018DEE0[])(void); + +void func_8017C150(void *a0) { + D_8018DEE0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018DECC; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018DECC, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017C3C4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017C750); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017C9C8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CB10); + + +extern void (*D_8018DFF8[])(void); + +void func_8017CC90(void *a0) { + D_8018DFF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CCCC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CD18); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CE0C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CE8C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017CFAC); + +extern void func_8012C218(void *a0); + void func_8017D038(void) { + ((void (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D058); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D0AC); + + +extern void (*D_8018E050[])(void); + +void func_8017D0E8(void *a0) { + D_8018E050[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D124); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D1D0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D3BC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D408); + + +extern void (*D_8018E064[])(void); + +void func_8017D714(void *a0) { + D_8018E064[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D750); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D790); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D800); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D88C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D960); + + +extern void (*D_8018E078[])(void); + +void func_8017D9B4(void *a0) { + D_8018E078[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017D9F0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DAA4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DC70); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DD3C); + + +extern void (*D_8018E08C[])(void); + +void func_8017DE98(void *a0) { + D_8018E08C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DED4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017DF34); + + +extern void (*D_8018E10C[])(void); + +void func_8017EE14(void *a0) { + D_8018E10C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017EE50); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EE94(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018E114[])(void); + +void func_8017EEB8(void *a0) { + D_8018E114[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017EEF4); + + +extern void (*D_8018E11C[])(void); + +void func_8017EF38(void *a0) { + D_8018E11C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017EF74); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EFB4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017F030(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018E128[])(void); + +void func_8017F050(void *a0) { + D_8018E128[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F08C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F0CC); + +extern void func_800D1EBC(void); + void func_8017F140(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018E134[])(void); + +void func_8017F160(void *a0) { + D_8018E134[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017F19C(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017F1B8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017F234(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F254); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F27C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F2A4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F2CC); + + +extern void (*D_8018E1B4[])(void); + +void func_8017F2F4(void *a0) { + D_8018E1B4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F330); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F3B0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F474); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F4AC); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E17C; + +void func_8017F59C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018E17C, 0x1000000); +} + + + +extern void (*D_8018E1C4[])(void); + +void func_8017F5C4(void *a0) { + D_8018E1C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F600); + +void func_8017F63C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F644); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F66C); + + +extern void (*D_8018E1CC[])(void); + +void func_8017F72C(void *a0) { + D_8018E1CC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F768); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017F92C); + +s32 func_8017FAF8(void) { + return 0x18; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FB00); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FB60); + +void func_8017FC84(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_8018E214; + void func_8017FC8C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 3; + func_80178CBC((int)arg0, (int)&D_8018E214); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FCB8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FCFC); + + +extern void (*D_8018E310[])(void); + +void func_8017FE3C(void *a0) { + D_8018E310[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FE78); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8017FF48); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", listCdBuffer); + +extern s32 func_801805D4(void); + void func_80180064(void) { + func_801805D4(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180084); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180270); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180304); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180398); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180410); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801804A8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180530); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180554); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180590); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801805D4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180610); + + +extern void (*D_8018E368[])(void); + +void func_8018068C(void *a0) { + D_8018E368[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801806C8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801807DC); + +extern s32 func_8018096C(void); + void func_8018094C(void) { + func_8018096C(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018096C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801809A8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180A10); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180AB8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180B00); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180C44); + +extern void func_8012B260(u8 *a0); +extern void func_80180CCC(void *a0); +extern void func_8012B178(s32 a0, s32 a1); + +void func_80180C90(s32 arg0) { + s32 var_v0; + + var_v0 = arg0; + ((void (*)(s32 *))func_8012B260)((s32 *)var_v0); + ((s32 (*)(s32))func_80180CCC)(var_v0); + func_8012B178(var_v0, 0x20000); +} + + +void func_80180CCC(void *a0) { + *(s32 *)((s32)a0 + 0x18) = 0; + *(s32 *)((s32)a0 + 0x14) = 0; + *(s32 *)((s32)a0 + 0x10) = 0; + *(s32 *)((s32)a0 + 0x4c) = 0; + *(s32 *)((s32)a0 + 0x44) = 0; + *(s32 *)((s32)a0 + 0x48) = 0x1000; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180CEC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180D8C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180EB0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180EF4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80180F8C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018104C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181090); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801810D4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181118); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801811D0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181250); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181294); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181594); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181604); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018183C); + +extern void (*D_8018E52C[])(void); + +void func_80181974(void *a0) { + D_8018E52C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801819B0); + +void func_80181A54(void) { +} + + +extern void (*D_8018E534[])(void); + +void func_80181A5C(void *a0) { + D_8018E534[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181A98); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181B0C); + +extern void func_8012C098(void); + void func_80181B48(s32 arg0) { + s32 v0; + if (*(s16 *)(arg0 + 0xfc) != *(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36)) { + ((void (*)(void))func_8012C098)(); + } + } + + + +extern void (*D_8018E54C[])(void); + +void func_80181B80(void *a0) { + D_8018E54C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181BBC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181C58); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181CF0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181D80); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181E5C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80181E98); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018209C); + + +extern void (*D_8018E5C4[])(void); + +void func_801822A0(void *a0) { + D_8018E5C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801822DC); + +void func_80182354(void) { +} + + +extern void (*D_8018E5DC[])(void); + +void func_8018235C(void *a0) { + D_8018E5DC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_8018E5CC; + +void func_80182398(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8018E5CC | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_80182414(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E5FC[])(); + +void func_8018241C(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E5FC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182468); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182558); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801825F4); + +void func_80182670(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E60C[])(); + +void func_80182678(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E60C[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801826C4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182744); + +extern s32 func_8018287C(void); + void func_801827A4(void) { + func_8018287C(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801827C4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182844); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018287C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182938); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801829F4); + + +extern void (*D_8018E780[])(void); + +void func_80182A54(void *a0) { + D_8018E780[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182A90); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182B44); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182EB0); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018E90C[])(); + +void func_80182F58(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018E90C[*(u16 *)(param_1 + 2)](); + } +} + + +extern s32 func_8012AD50(void *a0); + void func_80182FA4(s32 *param) { + *(u16 *)((char *)param + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80182FD0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183168); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801831FC); + + +extern void (*D_8018E914[])(void); + +void func_801832F4(void *a0) { + D_8018E914[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183330); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018337C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801833FC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018347C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801835F4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183628); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018365C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183690); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801836A8); + + +extern void (*D_8018EE88[])(void); + +void func_801836F0(void *a0) { + D_8018EE88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018372C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183790); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183800); + + +extern void (*D_8018EEE0[])(void); + +void func_80183904(void *a0) { + D_8018EEE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183940); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183984); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801839A8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183A3C); + +extern void func_80029124(s32 arg0, s32 arg1); + extern void func_801472F0(void *a0); + void func_80183AD0(void) { + func_80029124(0x96, 1); + ((void (*)(s32))func_801472F0)(0x430); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183AFC); + +extern s32 func_8001AAA0(s32 arg); + s32 func_80183B10(void) { + return func_8001AAA0(0x2C) != 0; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183B30); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183B9C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183C30); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183C6C); + +extern s32 func_8012BEE8(s32); + extern void func_8018372C(s32); + void func_80183D30(s32 arg0) { + if (func_8012BEE8(arg0)) { + func_8018372C(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183D68); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183DFC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183E70); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80183FA8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184084); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801840F8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018413C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018416C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184208); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801842E0); + + +extern void (*D_801CC350[])(void); + +void func_80184438(void *a0) { + D_801CC350[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184474); + +void func_80184510(void) { +} + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184518); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018457C); + +void func_8018461C(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + *(s32 *)((s32)a0 + 0x1c) = 0x10; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184630); + + +extern void (*D_801CC3AC[])(void); + +void func_8018467C(void *a0) { + D_801CC3AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801846B8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184754); + + +extern void (*D_801CC3CC[])(void); + +void func_80184878(void *a0) { + D_801CC3CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801848B4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018495C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184B18); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184BA4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184C28); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184C58); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184D28); + +extern s32 func_8012BEE8(s32 arg); + void func_80184D9C(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((u8 *)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184DD0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184E38); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80184F4C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018501C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185064); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018518C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185244); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801852D4); + +extern void func_80185B5C(void); + void func_80185300(void) { + func_80185B5C(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185320); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185338); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185364); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801853DC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185494); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185574); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801855CC); + + +void func_80185670(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185680); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185768); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801857C4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018583C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018590C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801859C4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185AF0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185B5C); + + +extern s32 rand(void); + void func_80185C68(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185CA4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185D10); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185EE4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80185F88); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80186100(void) { + func_8002D4C8(0x6AA, 0); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186124); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186168); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018626C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801862B8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801863B8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186500); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186530); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801866C8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186770); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186B08); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186B34); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186B7C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186BC4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186BF0); + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern char D_801D61B0; + +void func_80186C38(int param_1, int param_2) { + ((int (*)(int, int *, int *, int))func_8012D5E4)(param_1, &D_801D61B0, &D_801D61B0 + 8, param_2); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186C64); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80186FA8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187044); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187178); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187298); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801874E8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801876AC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187710); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187794); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801877C0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187814); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187840); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187868); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801878A8); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187940); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801879A4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187A24); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187A68); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187AB0); + + +extern void (*D_801E1D78[])(void); + +void func_80187C28(void *a0) { + D_801E1D78[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E1D8C[])(void); + +void func_80187C64(void *a0) { + D_801E1D8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801E1D64; +extern s32 D_801E1D70; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_80187CA0(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801E1D64); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801E1D70, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801E1D80; + +void func_80187D80(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801E1D80); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801E2034; + +void func_80187E9C(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801E2034); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + +extern void func_8012C098(void); + void func_80187EF8(void) { + func_8012C098(); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187F18); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80187F84); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018800C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188050); + + +void func_801880F4(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188104); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801E9CCC; + +void func_801881B0(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801E9CCC)) { + func_8012A828(arg0, &D_801E9CCC); + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801881F8); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801EA154; + +void func_80188240(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801EA154); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_80188330 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_80188330(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801EA0AC; + +s32 func_80188280(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_80188330(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801EA0AC); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801E9E6C; + +void func_80188330(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801E9E6C); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_8018838C(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801883A0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801883FC); + + +extern void (*D_801E2150[])(void); + +void func_80188480(void *a0) { + D_801E2150[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E2198[])(void); + +void func_801884BC(void *a0) { + D_801E2198[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern void func_80143994(s32 a0, s32 a1); +extern int D_801E2158; + +void func_801884F8(int param_1) +{ + int iVar1; + + iVar1 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = iVar1; + if (iVar1 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + *(short *)(param_1 + 2) = 1; + func_8001CA88(*(int *)(param_1 + 0x20), &D_801E2158); + func_80143994(param_1, 0x1000); + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018855C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801885B4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188620); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018875C); + +extern s32 func_8012BEE8(s32 arg); + extern void func_801883A0(s32 *a0); + void func_801887C8(s32 *a0) { + if (func_8012BEE8((s32)a0)) { + func_801883A0(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188800); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188864); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801888BC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188974); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801889E4); + + +extern void (*D_801EAE7C[])(void); + +void func_80188B74(void *a0) { + D_801EAE7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188BB0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188C84); + +void func_80188CAC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188CB4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188E00); + +extern void func_8012C218(void *a0); + s32 func_80188F20(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188F4C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188F5C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188F6C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80188FAC(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80188FE0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189004); + + +extern void (*D_801EAEA4[])(void); + +void func_80189068(void *a0) { + D_801EAEA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801890A4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018912C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801891EC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018925C); + + +extern s32 D_801EFBC0; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80189354(s32 a0, s32 a1) { + D_801EFBC0 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189384); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801895C8); + + +extern void (*D_801EB5C0[])(void); + +void func_80189868(void *a0) { + D_801EB5C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_801898A4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189908); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189A68); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189C4C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189D08); + + +extern void (*D_801ECD34[])(void); + +void func_80189DB4(void *a0) { + D_801ECD34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189DF0); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_80189EEC); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018A17C); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018A310); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018A368); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018A3E4); + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_80178D40", func_8018A428); + + diff --git a/src/ov_SC02_021/ov_SC02_021_jr_801734BC.c b/src/ov_SC02_021/ov_SC02_021_jr_801734BC.c index be4ccd901..20741fd83 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_801734BC.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_801734BC.c @@ -3104,1014 +3104,3 @@ void func_80178D18(void) { D_8019389C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80192C54; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80192C54 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80192C54; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80192C54 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80192C7C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80192C7C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80192C38; - -s32 func_8017A3B0(void) { - switch (D_80192C38) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80192C74; -extern short D_80192C70; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80192C74) { - case 0: - func_800D0CA0(1); - D_80192C74 = D_80192C74 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80192C70; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80192C74 = D_80192C74 + 1; - if (D_80192C74 < 0x1E) { - return 0; - } - D_80192C74 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80192CB4; - extern s16 D_80192CB6; - extern s16 D_80192CB8; - extern s16 D_80192CAC; - extern s16 D_80192CAE; - extern s16 D_80192CB0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80192CB4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80192CB6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80192CB8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80192CAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80192CAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80192CB0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80192C3C; -extern u16 D_80192CBC; -extern u16 D_80192CBE; -extern u16 D_80192CC0; -extern s16 D_80193828; - -void func_8017B1D8(void) { - func_8012A418(); - D_80193828 = 0; - D_80192C3C = 0; - D_80192CBC = D_80126B5E; - D_80192CBE = D_80126B62; - D_80192CC0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183408[]; - extern s16 D_80192CB4; - extern s16 D_80192CAC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183408[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183408[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80192CB4; - s16 *p78C = &D_80192CAC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80193828 = 1; - D_80192C3C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80192C5C; - extern SV4_8017B368 D_80192C64; - extern s16 D_80192CB4; - extern s16 D_80192CAC; - extern u16 D_80183408; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80192C5C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80192C64; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183408)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183408)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80192CB4) = loc0; - (*(SV4_8017B368 *)&D_80192CAC) = loc1; - D_80193828 = 1; - D_80192C3C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183408[]; - extern s16 D_80192CB4; - extern s16 D_80192CB6; - extern s16 D_80192CB8; - extern s16 D_80192CAC; - extern s16 D_80192CAE; - extern s16 D_80192CB0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183408[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183408[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80192CB4; - s16 *p78C = &D_80192CAC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80192CB6; - v798 = D_80192CB8; - v78C = *p78C; - v78E = D_80192CAE; - v790 = D_80192CB0; - __asm__ __volatile__(""); - D_80193828 = 1; - D_80192C3C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80192C3C; -extern s16 D_80192CB4; -extern s16 D_80192CB6; -extern s16 D_80192CB8; -extern s16 D_80192CAC; -extern s16 D_80192CAE; -extern s16 D_80192CB0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80192C3C = 0; - D_80192CB4 = (s16) D_80114F30; - D_80192CB6 = (s16) D_80114F34; - D_80192CB8 = (s16) D_80114F38; - D_80192CAC = (s16) D_80114F24; - D_80192CAE = (s16) D_80114F28; - D_80192CB0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80192CCC; -extern s16 D_80192CCE; -extern s16 D_80192CD0; -extern s16 D_80192CD4; -extern s16 D_80192CD6; -extern s16 D_80192CD8; - -void func_8017B824(void) { - D_80192CCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80192CCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80192CD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80192CD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80192CD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80192CD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80192CCC; -extern s16 D_80192CCE; -extern s16 D_80192CD0; -extern s16 D_80192CD4; -extern s16 D_80192CD6; -extern s16 D_80192CD8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80192CCC; - D_80114F34 = D_80192CCE; - D_80114F38 = D_80192CD0; - D_80114F24 = D_80192CD4; - D_80114F28 = D_80192CD6; - D_80114F2C = D_80192CD8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80192CB4), src[8..15] -> (*(S8_8017B8E8 *)&D_80192CAC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80192CB4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80192CAC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80192CBC; -extern u16 D_80192CBE; -extern u16 D_80192CC0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80192C3C; -extern short D_80192CC4; -extern short D_80192CC6; -extern short D_80192CC8; -extern s16 D_80192CB4; -extern s16 D_80192CB6; -extern s16 D_80192CB8; -extern s16 D_80192CAC; -extern s16 D_80192CAE; -extern s16 D_80192CB0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80192CBC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80192CBE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80192CC0); - (*(s16 *)&D_80192CC4) = buf[0]; - (*(s16 *)&D_80192CC6) = buf[1]; - (*(s16 *)&D_80192CC8) = buf[2]; - D_80192CB4 = D_80114F30 + buf[0]; - D_80192C3C = 0; - D_80192CB6 = D_80114F34 + buf[1]; - D_80192CB8 = D_80114F38 + buf[2]; - D_80192CAC = D_80114F24 + buf[0]; - D_80192CAE = D_80114F28 + buf[1]; - D_80192CB0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80192C5C; -extern SV4 D_80192C64; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80192C64) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80192C5C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80192C64 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80192C64)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80192C5C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80192C64) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80192C84[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80192C84; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80192C3C; -extern s16 D_80193828; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80192C3C = D_80192C3C + 1; - if (D_80192C3C >= 0x1F) { - D_80193828 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80192C3C; -extern s16 D_80193828; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80192C3C = D_80192C3C + 1; - if (0x18 < D_80192C3C) { - func_8012A4BC(); - D_80193828 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80192C3C; -extern void (*D_80192C80)(void); -extern short D_80192CC4; -extern short D_80192CC6; -extern short D_80192CC8; -extern s16 D_80193828; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80192C3C = D_80192C3C + 1; - if (D_80192C3C >= 0x19) { - if (D_80192C80 != 0) { - (*D_80192C80)(); - } else { - D_80114F30 = D_80114F30 + D_80192CC4; - D_80114F34 = D_80114F34 + D_80192CC6; - D_80114F38 = D_80114F38 + D_80192CC8; - D_80114F24 = D_80114F24 + D_80192CC4; - D_80114F28 = D_80114F28 + D_80192CC6; - D_80114F2C = D_80114F2C + D_80192CC8; - func_8012A4BC(); - } - D_80193828 = 0; - } -} - - - -extern void (*D_801834A8[])(void); - -void func_8017BE60(void *a0) { - D_801834A8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_801834CC[])(void); - -void func_8017BEBC(void *a0) { - D_801834CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_801834D4[])(void); - -void func_8017C150(void *a0) { - D_801834D4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_801834C0; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_801834C0, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017C294); - - -extern void (*D_8018352C[])(void); - -void func_8017D174(void *a0) { - D_8018352C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D1B0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D1F4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80183534[])(void); - -void func_8017D218(void *a0) { - D_80183534[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D294); - -extern s32 func_800D1EBC(void); - void func_8017D328(void) { - func_800D1EBC(); - } - - - -extern void (*D_80183540[])(void); - -void func_8017D348(void *a0) { - D_80183540[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D384); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D418); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D440); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D468); - - -extern void (*D_8018356C[])(void); - -void func_8017D500(void *a0) { - D_8018356C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D53C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D5C8); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D7A4); - - -extern void (*D_80183594[])(void); - -void func_8017D7E0(void *a0) { - D_80183594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D81C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017D980); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017DC10); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E410); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E4DC); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E608); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E734); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E824); - - -extern void (*D_8018359C[])(void); - -void func_8017E8CC(void *a0) { - D_8018359C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E908); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017E940); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EA5C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EB00); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017ECFC); - - -extern void (*D_8018389C[])(void); - -void func_8017EDE8(void *a0) { - D_8018389C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80183884; - void func_8017EE24(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - func_80178CBC((int)arg0, (int)&D_80183884); - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EE50); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EE68); - -extern void func_80029514(s32 arg); - void func_8017EED8(void) { - func_80029514(0xFA); - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EEF8); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EF3C); - -extern void func_800D0F4C(s32 arg); - void func_8017EF90(void) { - func_800D0F4C(0x57); - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017EFB0); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F014); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F064); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F0C4); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F1B4); - -s32 func_8017F220(void) { - return 0x19; - } - - - -extern void (*D_8018393C[])(void); - -void func_8017F228(void *a0) { - D_8018393C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F264); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F2FC); - - -extern void (*D_80183944[])(void); - -void func_8017F40C(void *a0) { - D_80183944[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017F448(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F468); - - -extern void (*D_80183950[])(void); - -void func_8017F590(void *a0) { - D_80183950[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F5CC(void *a0) { - *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; - *(int *)((char *)a0 + 0x14) = 0x20000; - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F5E4); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F6A8); - - -extern void (*D_80183970[])(void); - -void func_8017F8C8(void *a0) { - D_80183970[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F904); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_801734BC", func_8017F9C8); - diff --git a/src/ov_SC02_021/ov_SC02_021_jr_80178D40.c b/src/ov_SC02_021/ov_SC02_021_jr_80178D40.c new file mode 100644 index 000000000..b2b6bdd2e --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_80178D40.c @@ -0,0 +1,4481 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182CB0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80191FA8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182CA4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182CE8[]; +extern unsigned short D_80182CF0[]; +extern unsigned short D_80182CF8[]; +extern unsigned char D_80191FB0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80191FA8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182D00[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801920E4; +extern M2C_UNK D_801920E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80192070; +extern void (*D_80182D30[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801920EC[]; +extern u8 D_801920F4[]; +extern u8 D_801920A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182D38[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182D54[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182D5C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182DC4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182D68; +extern u8 D_80182D74; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182DF8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182E00[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182E54[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182E88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182E78[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182EA4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182F1C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182F24[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182F2C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182F34[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182F3C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182F44[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182F50[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182F5C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182F68[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182F78[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182F88[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182F90[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182F98[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182FA0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182FA8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182FB0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182FB8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182FC0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182FC8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182FD0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182FD8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182FE0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182FE8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182FF0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182FF8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183000[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183008[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183010[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183018[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183020[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183028[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183030[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183038[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018307C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183040; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801830AC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801830E8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183140[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183150[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183158[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801832C0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801832CC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80191680; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80193828; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80192828; +extern short D_8019389C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019389C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019389C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80192828 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019389C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801937F8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801937F8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019389C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019389C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80192C84[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019282C; + extern s32 D_80192C40; + extern s16 D_80192C44; + extern s16 D_80192C48; + extern s16 D_80192C4C; + extern s16 D_80192C50; + extern s32 D_80192C58; + extern s32 D_80192C5C; + extern s32 D_80192C6C; + extern s16 D_80192C70; + extern s16 D_80192C74; + extern s32 D_80192C78; + extern s32 D_80192C80; + extern s32 D_80192C84[10]; + extern s32 D_80193740; + extern s16 D_801937F8; + extern s32 D_80193824; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801937F8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80192C40); + D_80192C40 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80192C4C, D_80192C50 ? 0x48 : 0x40); + (*(s16*)&D_8019389C) = 2; + break; + case 0: + func_80179B28(D_80192C40); + D_80192C40 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80192C44, D_80192C48 ? 0x48 : 0x40); + (*(s16*)&D_8019389C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80193740 != 0) { + func_80179B28(D_80192C40); + D_80192C40 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80192C44, D_80192C48 ? 0x48 : 0x40); + (*(s16*)&D_8019389C) = 1; + } else { + (*(s16*)&D_8019389C) = 3; + } + break; + case 0x32: + func_80179B28(D_80192C40); + D_80192C40 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80192C44, + D_80192C48 ? 0x48 : 0x40); + (*(s16*)&D_8019389C) = 1; + break; + case 2: + func_80179B28(D_80192C40); + if (D_80192C58 != 0) { + D_80192828 = D_80192C58; + D_80192C58 = 0; + (*(s16*)&D_8019389C) = 3; + return; + } + (*(s16*)&D_8019389C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019389C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019389C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019389C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019389C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019389C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019389C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019389C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019389C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019389C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019389C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019389C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x1B: + D_80192C78 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019389C) = 4; + D_8019282C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019389C) = 5; + D_80192C6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80192C6C = (s32)func_8017A3B0; + (*(s16*)&D_8019389C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x24: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019389C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019389C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019389C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019389C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019389C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019389C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019389C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019389C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019389C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80192C5C); + (*(s16*)&D_8019389C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80192C5C); + (*(s16*)&D_8019389C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80192C5C); + (*(s16*)&D_8019389C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80192C5C); + (*(s16*)&D_8019389C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + break; + case 0x4E: + D_80192C80 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019389C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80193824 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019389C) = 3; + break; + case 0x34: + (*(s16*)&D_8019389C) = 3; + D_80192828 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80192C58 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019389C) = 3; + D_80192828 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019389C) = 3; + D_80192828 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80192828 = *(s32 *)(D_80192828 + 4); + return; + case 0x37: + (*(s16*)&D_8019389C) = 3; + D_80192C44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80192C48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019389C) = 3; + D_80192C4C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80192C50 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019389C) = 3; + D_80192C44 = w1; + D_80192C48 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019389C) = 3; + D_80192C4C = w2; + D_80192C50 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + case 0x43: + D_80192C6C = (s32)func_8017A3D8; + D_80192C74 = 0; + (*(s16*)&D_8019389C) = 5; + D_80192C70 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019389C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019389C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019389C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80192C84; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019389C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80192C84; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019389C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80192C84[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019389C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80192C84; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019389C) = 3; + break; + default: + break; + } +Lend: + D_80192828 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80192C54; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80192C54 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80192C54; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80192C54 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80192C7C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80192C7C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80192C38; + +s32 func_8017A3B0(void) { + switch (D_80192C38) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80192C74; +extern short D_80192C70; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80192C74) { + case 0: + func_800D0CA0(1); + D_80192C74 = D_80192C74 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80192C70; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80192C74 = D_80192C74 + 1; + if (D_80192C74 < 0x1E) { + return 0; + } + D_80192C74 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80192CB4; + extern s16 D_80192CB6; + extern s16 D_80192CB8; + extern s16 D_80192CAC; + extern s16 D_80192CAE; + extern s16 D_80192CB0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80192CB4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80192CB6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80192CB8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80192CAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80192CAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80192CB0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80192C3C; +extern u16 D_80192CBC; +extern u16 D_80192CBE; +extern u16 D_80192CC0; +extern s16 D_80193828; + +void func_8017B1D8(void) { + func_8012A418(); + D_80193828 = 0; + D_80192C3C = 0; + D_80192CBC = D_80126B5E; + D_80192CBE = D_80126B62; + D_80192CC0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183408[]; + extern s16 D_80192CB4; + extern s16 D_80192CAC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183408[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183408[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80192CB4; + s16 *p78C = &D_80192CAC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80193828 = 1; + D_80192C3C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80192C5C; + extern SV4_8017B368 D_80192C64; + extern s16 D_80192CB4; + extern s16 D_80192CAC; + extern u16 D_80183408; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80192C5C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80192C64; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183408)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183408)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80192CB4) = loc0; + (*(SV4_8017B368 *)&D_80192CAC) = loc1; + D_80193828 = 1; + D_80192C3C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183408[]; + extern s16 D_80192CB4; + extern s16 D_80192CB6; + extern s16 D_80192CB8; + extern s16 D_80192CAC; + extern s16 D_80192CAE; + extern s16 D_80192CB0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183408[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183408[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80192CB4; + s16 *p78C = &D_80192CAC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80192CB6; + v798 = D_80192CB8; + v78C = *p78C; + v78E = D_80192CAE; + v790 = D_80192CB0; + __asm__ __volatile__(""); + D_80193828 = 1; + D_80192C3C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80192C3C; +extern s16 D_80192CB4; +extern s16 D_80192CB6; +extern s16 D_80192CB8; +extern s16 D_80192CAC; +extern s16 D_80192CAE; +extern s16 D_80192CB0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80192C3C = 0; + D_80192CB4 = (s16) D_80114F30; + D_80192CB6 = (s16) D_80114F34; + D_80192CB8 = (s16) D_80114F38; + D_80192CAC = (s16) D_80114F24; + D_80192CAE = (s16) D_80114F28; + D_80192CB0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80192CCC; +extern s16 D_80192CCE; +extern s16 D_80192CD0; +extern s16 D_80192CD4; +extern s16 D_80192CD6; +extern s16 D_80192CD8; + +void func_8017B824(void) { + D_80192CCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80192CCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80192CD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80192CD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80192CD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80192CD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80192CCC; +extern s16 D_80192CCE; +extern s16 D_80192CD0; +extern s16 D_80192CD4; +extern s16 D_80192CD6; +extern s16 D_80192CD8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80192CCC; + D_80114F34 = D_80192CCE; + D_80114F38 = D_80192CD0; + D_80114F24 = D_80192CD4; + D_80114F28 = D_80192CD6; + D_80114F2C = D_80192CD8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80192CB4), src[8..15] -> (*(S8_8017B8E8 *)&D_80192CAC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80192CB4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80192CAC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80192CBC; +extern u16 D_80192CBE; +extern u16 D_80192CC0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80192C3C; +extern short D_80192CC4; +extern short D_80192CC6; +extern short D_80192CC8; +extern s16 D_80192CB4; +extern s16 D_80192CB6; +extern s16 D_80192CB8; +extern s16 D_80192CAC; +extern s16 D_80192CAE; +extern s16 D_80192CB0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80192CBC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80192CBE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80192CC0); + (*(s16 *)&D_80192CC4) = buf[0]; + (*(s16 *)&D_80192CC6) = buf[1]; + (*(s16 *)&D_80192CC8) = buf[2]; + D_80192CB4 = D_80114F30 + buf[0]; + D_80192C3C = 0; + D_80192CB6 = D_80114F34 + buf[1]; + D_80192CB8 = D_80114F38 + buf[2]; + D_80192CAC = D_80114F24 + buf[0]; + D_80192CAE = D_80114F28 + buf[1]; + D_80192CB0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80192C5C; +extern SV4 D_80192C64; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80192C64) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80192C5C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80192C64 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80192C64)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80192C5C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80192C64) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80192C84[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80192C84; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80192C3C; +extern s16 D_80193828; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80192C3C = D_80192C3C + 1; + if (D_80192C3C >= 0x1F) { + D_80193828 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80192C3C; +extern s16 D_80193828; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80192C3C = D_80192C3C + 1; + if (0x18 < D_80192C3C) { + func_8012A4BC(); + D_80193828 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80192C3C; +extern void (*D_80192C80)(void); +extern short D_80192CC4; +extern short D_80192CC6; +extern short D_80192CC8; +extern s16 D_80193828; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80192C3C = D_80192C3C + 1; + if (D_80192C3C >= 0x19) { + if (D_80192C80 != 0) { + (*D_80192C80)(); + } else { + D_80114F30 = D_80114F30 + D_80192CC4; + D_80114F34 = D_80114F34 + D_80192CC6; + D_80114F38 = D_80114F38 + D_80192CC8; + D_80114F24 = D_80114F24 + D_80192CC4; + D_80114F28 = D_80114F28 + D_80192CC6; + D_80114F2C = D_80114F2C + D_80192CC8; + func_8012A4BC(); + } + D_80193828 = 0; + } +} + + + +extern void (*D_801834A8[])(void); + +void func_8017BE60(void *a0) { + D_801834A8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_801834CC[])(void); + +void func_8017BEBC(void *a0) { + D_801834CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_801834D4[])(void); + +void func_8017C150(void *a0) { + D_801834D4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_801834C0; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_801834C0, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017C294); + + +extern void (*D_8018352C[])(void); + +void func_8017D174(void *a0) { + D_8018352C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D1B0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D1F4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80183534[])(void); + +void func_8017D218(void *a0) { + D_80183534[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D294); + +extern s32 func_800D1EBC(void); + void func_8017D328(void) { + func_800D1EBC(); + } + + + +extern void (*D_80183540[])(void); + +void func_8017D348(void *a0) { + D_80183540[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D384); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D418); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D440); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D468); + + +extern void (*D_8018356C[])(void); + +void func_8017D500(void *a0) { + D_8018356C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D53C); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D5C8); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D7A4); + + +extern void (*D_80183594[])(void); + +void func_8017D7E0(void *a0) { + D_80183594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D81C); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017D980); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017DC10); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E410); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E4DC); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E608); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E734); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E824); + + +extern void (*D_8018359C[])(void); + +void func_8017E8CC(void *a0) { + D_8018359C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E908); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017E940); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EA5C); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EB00); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017ECFC); + + +extern void (*D_8018389C[])(void); + +void func_8017EDE8(void *a0) { + D_8018389C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80183884; + void func_8017EE24(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + func_80178CBC((int)arg0, (int)&D_80183884); + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EE50); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EE68); + +extern void func_80029514(s32 arg); + void func_8017EED8(void) { + func_80029514(0xFA); + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EEF8); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EF3C); + +extern void func_800D0F4C(s32 arg); + void func_8017EF90(void) { + func_800D0F4C(0x57); + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017EFB0); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F014); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F064); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F0C4); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F1B4); + +s32 func_8017F220(void) { + return 0x19; + } + + + +extern void (*D_8018393C[])(void); + +void func_8017F228(void *a0) { + D_8018393C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F264); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F2FC); + + +extern void (*D_80183944[])(void); + +void func_8017F40C(void *a0) { + D_80183944[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017F448(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F468); + + +extern void (*D_80183950[])(void); + +void func_8017F590(void *a0) { + D_80183950[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F5CC(void *a0) { + *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; + *(int *)((char *)a0 + 0x14) = 0x20000; + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F5E4); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F6A8); + + +extern void (*D_80183970[])(void); + +void func_8017F8C8(void *a0) { + D_80183970[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F904); + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_80178D40", func_8017F9C8); + + diff --git a/src/ov_SC02_026/ov_SC02_026_jr_801734BC.c b/src/ov_SC02_026/ov_SC02_026_jr_801734BC.c index aab39d192..ffaf18819 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_801734BC.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_801734BC.c @@ -3104,1372 +3104,3 @@ void func_80178D18(void) { D_801D02BC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D0094; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D0094 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D0094; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D0094 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D00BC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D00BC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D0078; - -s32 func_8017A3B0(void) { - switch (D_801D0078) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D00B4; -extern short D_801D00B0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D00B4) { - case 0: - func_800D0CA0(1); - D_801D00B4 = D_801D00B4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D00B0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D00B4 = D_801D00B4 + 1; - if (D_801D00B4 < 0x1E) { - return 0; - } - D_801D00B4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D00F4; - extern s16 D_801D00F6; - extern s16 D_801D00F8; - extern s16 D_801D00EC; - extern s16 D_801D00EE; - extern s16 D_801D00F0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D00F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D00F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D00F8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D00EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D00EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D00F0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D007C; -extern u16 D_801D00FC; -extern u16 D_801D00FE; -extern u16 D_801D0100; -extern s16 D_801D0248; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D0248 = 0; - D_801D007C = 0; - D_801D00FC = D_80126B5E; - D_801D00FE = D_80126B62; - D_801D0100 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189A5C[]; - extern s16 D_801D00F4; - extern s16 D_801D00EC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189A5C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189A5C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D00F4; - s16 *p78C = &D_801D00EC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D0248 = 1; - D_801D007C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D009C; - extern SV4_8017B368 D_801D00A4; - extern s16 D_801D00F4; - extern s16 D_801D00EC; - extern u16 D_80189A5C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D009C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D00A4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80189A5C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80189A5C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D00F4) = loc0; - (*(SV4_8017B368 *)&D_801D00EC) = loc1; - D_801D0248 = 1; - D_801D007C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189A5C[]; - extern s16 D_801D00F4; - extern s16 D_801D00F6; - extern s16 D_801D00F8; - extern s16 D_801D00EC; - extern s16 D_801D00EE; - extern s16 D_801D00F0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189A5C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189A5C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D00F4; - s16 *p78C = &D_801D00EC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D00F6; - v798 = D_801D00F8; - v78C = *p78C; - v78E = D_801D00EE; - v790 = D_801D00F0; - __asm__ __volatile__(""); - D_801D0248 = 1; - D_801D007C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D007C; -extern s16 D_801D00F4; -extern s16 D_801D00F6; -extern s16 D_801D00F8; -extern s16 D_801D00EC; -extern s16 D_801D00EE; -extern s16 D_801D00F0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D007C = 0; - D_801D00F4 = (s16) D_80114F30; - D_801D00F6 = (s16) D_80114F34; - D_801D00F8 = (s16) D_80114F38; - D_801D00EC = (s16) D_80114F24; - D_801D00EE = (s16) D_80114F28; - D_801D00F0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D010C; -extern s16 D_801D010E; -extern s16 D_801D0110; -extern s16 D_801D0114; -extern s16 D_801D0116; -extern s16 D_801D0118; - -void func_8017B824(void) { - D_801D010C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D010E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D0110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D0114 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D0116 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D0118 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D010C; -extern s16 D_801D010E; -extern s16 D_801D0110; -extern s16 D_801D0114; -extern s16 D_801D0116; -extern s16 D_801D0118; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D010C; - D_80114F34 = D_801D010E; - D_80114F38 = D_801D0110; - D_80114F24 = D_801D0114; - D_80114F28 = D_801D0116; - D_80114F2C = D_801D0118; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D00F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801D00EC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D00F4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D00EC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D00FC; -extern u16 D_801D00FE; -extern u16 D_801D0100; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D007C; -extern short D_801D0104; -extern short D_801D0106; -extern short D_801D0108; -extern s16 D_801D00F4; -extern s16 D_801D00F6; -extern s16 D_801D00F8; -extern s16 D_801D00EC; -extern s16 D_801D00EE; -extern s16 D_801D00F0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D00FC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D00FE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D0100); - (*(s16 *)&D_801D0104) = buf[0]; - (*(s16 *)&D_801D0106) = buf[1]; - (*(s16 *)&D_801D0108) = buf[2]; - D_801D00F4 = D_80114F30 + buf[0]; - D_801D007C = 0; - D_801D00F6 = D_80114F34 + buf[1]; - D_801D00F8 = D_80114F38 + buf[2]; - D_801D00EC = D_80114F24 + buf[0]; - D_801D00EE = D_80114F28 + buf[1]; - D_801D00F0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D009C; -extern SV4 D_801D00A4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D00A4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D009C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D00A4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D00A4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D009C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D00A4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D00C4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D00C4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D007C; -extern s16 D_801D0248; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D007C = D_801D007C + 1; - if (D_801D007C >= 0x1F) { - D_801D0248 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D007C; -extern s16 D_801D0248; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D007C = D_801D007C + 1; - if (0x18 < D_801D007C) { - func_8012A4BC(); - D_801D0248 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D007C; -extern void (*D_801D00C0)(void); -extern short D_801D0104; -extern short D_801D0106; -extern short D_801D0108; -extern s16 D_801D0248; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D007C = D_801D007C + 1; - if (D_801D007C >= 0x19) { - if (D_801D00C0 != 0) { - (*D_801D00C0)(); - } else { - D_80114F30 = D_80114F30 + D_801D0104; - D_80114F34 = D_80114F34 + D_801D0106; - D_80114F38 = D_80114F38 + D_801D0108; - D_80114F24 = D_80114F24 + D_801D0104; - D_80114F28 = D_80114F28 + D_801D0106; - D_80114F2C = D_80114F2C + D_801D0108; - func_8012A4BC(); - } - D_801D0248 = 0; - } -} - - - -extern void (*D_80189AFC[])(void); - -void func_8017BE60(void *a0) { - D_80189AFC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017BF88); - - -extern void (*D_80189B14[])(void); - -void func_8017C0E4(void *a0) { - D_80189B14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017C180); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D060); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D0A0); - - -extern void (*D_80189BBC[])(void); - -void func_8017D0E0(void *a0) { - D_80189BBC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D11C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D160); - - -extern void (*D_80189BC4[])(void); - -void func_8017D184(void *a0) { - D_80189BC4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D1C0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D200(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D27C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80189BD0[])(void); - -void func_8017D29C(void *a0) { - D_80189BD0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D2D8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D34C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D374); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D39C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D434); - - -extern void (*D_80189BE4[])(void); - -void func_8017D4CC(void *a0) { - D_80189BE4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D508); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D6D0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D780); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D918); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D948); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017D9D8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DA5C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DAB8); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801A42AC[]; - -extern s32 func_8017DD84(s32 a0); - -void func_8017DC3C(int param_1) -{ - D_801A42AC[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8017DD84)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DC8C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DD0C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DD84); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017DDC4); - - -extern void (*D_801A4308[])(void); - -void func_8017DFE0(void *a0) { - D_801A4308[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017E01C(void) { -} - -void func_8017E024(void) { -} - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E02C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E130); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E1FC); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801A9B40; - void func_8017E304(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - func_8012A828((int)arg0, (int)&D_801A9B40); - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E330); - -void func_8017E3A0(void *a0) { - *(short *)((char *)a0 + 0x2) = 4; - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E3AC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E590); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E654); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E72C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E8D4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E980); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017E9E8); - -void func_8017EA78(void *a0) { - *(s16 *)((char *)a0 + 0x5C) = 0; - *(s16 *)((char *)a0 + 0x98) = 0; - *(s32 *)((char *)a0 + 0x1C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EA88); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EBB8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EC18); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EC78); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017ED0C); - - -extern void (*D_801A5124[])(void); - -void func_8017ED80(void *a0) { - D_801A5124[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EDBC); - - -extern void func_8012C218(void *a0); - void func_8017EE74(s32 arg0) { - s32 v0; - if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36) != *(s16 *)(arg0 + 0xfc)) { - ((void (*)(void))func_8012C218)(); - } - } - - - -extern void (*D_801A5440[])(void); - -void func_8017EEB0(void *a0) { - D_801A5440[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EEEC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017EF64); - - -extern s32 D_801A5170; - void func_8017F080(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - *(s32 *)((s32)a0 + 0xcc) = &D_801A5170; - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F098); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F12C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F17C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F390); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F400); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F440); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F47C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F538); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F5DC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F6B0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F76C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017F9D4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017FAC0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017FD58); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8017FEE0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018038C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180520); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801808D0); - -extern void (*D_801AA28C[])(void); - -void func_801809BC(void *a0) { - D_801AA28C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_801AA340[])(void); - -void func_801809F8(void *a0) { - D_801AA340[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180A34(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180A4C); - -void func_80180AF0(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180B0C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180B90); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180BCC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180BFC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180C80); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180D44); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180E24); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180E94); - -void func_80180F70(void) { -} - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80180F78); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181030); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801810F4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181148); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801811C4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801812A8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181374); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018144C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801814D8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181644); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181688); - - -extern s32 func_8012B030(u8 *a0); - void func_80181A20(s32 arg0) { - *(s32 *)(arg0 + 0x1c) = 1; - *(s16 *)(arg0 + 0x2) = 0x4; - ((s32 (*)(void *))func_8012B030)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181A4C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181AC4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181B18); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181CC8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181D94); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80181FF8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018200C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018226C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182318); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801823E8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182550); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801825A4); - - -extern void (*D_801AC300[])(void); - -void func_801827A8(void *a0) { - D_801AC300[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801827E4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801828C8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018291C); - -extern void func_801292C8(u8 *a0); - s32 func_80182A28(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182A5C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182A9C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182AF4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182B90); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182CE4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182DBC); - - -extern void (*D_801AC394[])(void); - -void func_80182E1C(void *a0) { - D_801AC394[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182E58); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182E80); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80182F00); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80183084); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801832A8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018365C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018389C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80183B04); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80183CAC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80183EF8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184044); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801840FC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184250); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801842FC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801843AC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184494); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801845B0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184690); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184768); - -extern s32 func_80153BD8(s32); - extern s32 func_80153BF0(s32 a0); - void func_801847D0(u8 * arg0) { - *(s16 *)(arg0 + 0xfe) = 0; - if (func_80153BD8((s32)arg0)) { - ((void (*)(void *))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018480C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801848B0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184970); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801849A4); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80184A00(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184A38); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184A94); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184B6C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184C00); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184CCC); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184DA4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184E40); - -void func_80184E98(void) { -} - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184EA0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184F40); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80184F94); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185028); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80185070(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185098); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801850E4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801851D0); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185254); - -extern void func_8012CBCC(s32 a0); - void func_80185360(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((u8 *)a0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185398); - - -extern void (*D_801CCCB0[])(void); - -void func_80185404(void *a0) { - D_801CCCB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185440); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185634); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_801856E4); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185794); - -void func_80185844(void) { -} - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018584C); - - -extern void (*D_801CCFF8[])(void); - -void func_801858F0(void *a0) { - D_801CCFF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_8018592C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185A00); - -void func_80185A28(void) { -} - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185A30); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185B7C); - -extern void func_8012C218(void *a0); - void func_80185C9C(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 0x2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185CC8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185CD8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185CE8); - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80185D28(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185D5C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185D80); - - -extern void (*D_801CD020[])(void); - -void func_80185DE4(void *a0) { - D_801CD020[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185E20); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185EA8); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185F68); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_801734BC", func_80185FD8); - diff --git a/src/ov_SC02_026/ov_SC02_026_jr_80178D40.c b/src/ov_SC02_026/ov_SC02_026_jr_80178D40.c new file mode 100644 index 000000000..11f66d36a --- /dev/null +++ b/src/ov_SC02_026/ov_SC02_026_jr_80178D40.c @@ -0,0 +1,4839 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80189304[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CF3E8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801892F8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018933C[]; +extern unsigned short D_80189344[]; +extern unsigned short D_8018934C[]; +extern unsigned char D_801CF3F0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CF3E8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189354[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF524; +extern M2C_UNK D_801CF528; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF4B0; +extern void (*D_80189384[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CF52C[]; +extern u8 D_801CF534[]; +extern u8 D_801CF4E4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018938C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801893A8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801893B0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189418[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801893BC; +extern u8 D_801893C8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018944C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189454[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801894A8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801894DC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801894CC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801894F8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80189570[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189578[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80189580[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189588[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189590[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189598[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801895A4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801895B0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801895BC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801895CC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801895DC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801895E4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801895EC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801895F4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801895FC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189604[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018960C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189614[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018961C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189624[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018962C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189634[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018963C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189644[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018964C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189654[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018965C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189664[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018966C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189674[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018967C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189684[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018968C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801896D0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189694; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189700[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018973C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189794[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801897A4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801897AC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80189914[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189920[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CEAB4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D0248; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CFC68; +extern short D_801D02BC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D02BC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D02BC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CFC68 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D02BC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D0218 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D0218 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D02BC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D02BC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D00C4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CFC6C; + extern s32 D_801D0080; + extern s16 D_801D0084; + extern s16 D_801D0088; + extern s16 D_801D008C; + extern s16 D_801D0090; + extern s32 D_801D0098; + extern s32 D_801D009C; + extern s32 D_801D00AC; + extern s16 D_801D00B0; + extern s16 D_801D00B4; + extern s32 D_801D00B8; + extern s32 D_801D00C0; + extern s32 D_801D00C4[10]; + extern s32 D_801D0160; + extern s16 D_801D0218; + extern s32 D_801D0244; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D0218; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D0080); + D_801D0080 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D008C, D_801D0090 ? 0x48 : 0x40); + (*(s16*)&D_801D02BC) = 2; + break; + case 0: + func_80179B28(D_801D0080); + D_801D0080 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D0084, D_801D0088 ? 0x48 : 0x40); + (*(s16*)&D_801D02BC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D0160 != 0) { + func_80179B28(D_801D0080); + D_801D0080 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D0084, D_801D0088 ? 0x48 : 0x40); + (*(s16*)&D_801D02BC) = 1; + } else { + (*(s16*)&D_801D02BC) = 3; + } + break; + case 0x32: + func_80179B28(D_801D0080); + D_801D0080 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D0084, + D_801D0088 ? 0x48 : 0x40); + (*(s16*)&D_801D02BC) = 1; + break; + case 2: + func_80179B28(D_801D0080); + if (D_801D0098 != 0) { + D_801CFC68 = D_801D0098; + D_801D0098 = 0; + (*(s16*)&D_801D02BC) = 3; + return; + } + (*(s16*)&D_801D02BC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D02BC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D02BC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D02BC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D02BC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D02BC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x1B: + D_801D00B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D02BC) = 4; + D_801CFC6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D02BC) = 5; + D_801D00AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D00AC = (s32)func_8017A3B0; + (*(s16*)&D_801D02BC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x24: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D02BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D02BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D02BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D02BC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D02BC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D02BC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D02BC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D02BC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D02BC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D009C); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D009C); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D009C); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D009C); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x4E: + D_801D00C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x2B: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D02BC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D0244 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x34: + (*(s16*)&D_801D02BC) = 3; + D_801CFC68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D0098 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D02BC) = 3; + D_801CFC68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D02BC) = 3; + D_801CFC68 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CFC68 = *(s32 *)(D_801CFC68 + 4); + return; + case 0x37: + (*(s16*)&D_801D02BC) = 3; + D_801D0084 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0088 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D02BC) = 3; + D_801D008C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0090 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D02BC) = 3; + D_801D0084 = w1; + D_801D0088 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D02BC) = 3; + D_801D008C = w2; + D_801D0090 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x43: + D_801D00AC = (s32)func_8017A3D8; + D_801D00B4 = 0; + (*(s16*)&D_801D02BC) = 5; + D_801D00B0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D02BC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D02BC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D00C4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D02BC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D00C4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D02BC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D00C4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D02BC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D00C4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D02BC) = 3; + break; + default: + break; + } +Lend: + D_801CFC68 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D0094; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D0094 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D0094; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D0094 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D00BC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D00BC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D0078; + +s32 func_8017A3B0(void) { + switch (D_801D0078) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D00B4; +extern short D_801D00B0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D00B4) { + case 0: + func_800D0CA0(1); + D_801D00B4 = D_801D00B4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D00B0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D00B4 = D_801D00B4 + 1; + if (D_801D00B4 < 0x1E) { + return 0; + } + D_801D00B4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D00F4; + extern s16 D_801D00F6; + extern s16 D_801D00F8; + extern s16 D_801D00EC; + extern s16 D_801D00EE; + extern s16 D_801D00F0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D00F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D00F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D00F8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D00EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D00EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D00F0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D007C; +extern u16 D_801D00FC; +extern u16 D_801D00FE; +extern u16 D_801D0100; +extern s16 D_801D0248; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D0248 = 0; + D_801D007C = 0; + D_801D00FC = D_80126B5E; + D_801D00FE = D_80126B62; + D_801D0100 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189A5C[]; + extern s16 D_801D00F4; + extern s16 D_801D00EC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189A5C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189A5C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D00F4; + s16 *p78C = &D_801D00EC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D0248 = 1; + D_801D007C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D009C; + extern SV4_8017B368 D_801D00A4; + extern s16 D_801D00F4; + extern s16 D_801D00EC; + extern u16 D_80189A5C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D009C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D00A4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80189A5C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80189A5C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D00F4) = loc0; + (*(SV4_8017B368 *)&D_801D00EC) = loc1; + D_801D0248 = 1; + D_801D007C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189A5C[]; + extern s16 D_801D00F4; + extern s16 D_801D00F6; + extern s16 D_801D00F8; + extern s16 D_801D00EC; + extern s16 D_801D00EE; + extern s16 D_801D00F0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189A5C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189A5C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D00F4; + s16 *p78C = &D_801D00EC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D00F6; + v798 = D_801D00F8; + v78C = *p78C; + v78E = D_801D00EE; + v790 = D_801D00F0; + __asm__ __volatile__(""); + D_801D0248 = 1; + D_801D007C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D007C; +extern s16 D_801D00F4; +extern s16 D_801D00F6; +extern s16 D_801D00F8; +extern s16 D_801D00EC; +extern s16 D_801D00EE; +extern s16 D_801D00F0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D007C = 0; + D_801D00F4 = (s16) D_80114F30; + D_801D00F6 = (s16) D_80114F34; + D_801D00F8 = (s16) D_80114F38; + D_801D00EC = (s16) D_80114F24; + D_801D00EE = (s16) D_80114F28; + D_801D00F0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D010C; +extern s16 D_801D010E; +extern s16 D_801D0110; +extern s16 D_801D0114; +extern s16 D_801D0116; +extern s16 D_801D0118; + +void func_8017B824(void) { + D_801D010C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D010E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D0110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D0114 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D0116 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D0118 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D010C; +extern s16 D_801D010E; +extern s16 D_801D0110; +extern s16 D_801D0114; +extern s16 D_801D0116; +extern s16 D_801D0118; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D010C; + D_80114F34 = D_801D010E; + D_80114F38 = D_801D0110; + D_80114F24 = D_801D0114; + D_80114F28 = D_801D0116; + D_80114F2C = D_801D0118; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D00F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801D00EC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D00F4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D00EC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D00FC; +extern u16 D_801D00FE; +extern u16 D_801D0100; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D007C; +extern short D_801D0104; +extern short D_801D0106; +extern short D_801D0108; +extern s16 D_801D00F4; +extern s16 D_801D00F6; +extern s16 D_801D00F8; +extern s16 D_801D00EC; +extern s16 D_801D00EE; +extern s16 D_801D00F0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D00FC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D00FE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D0100); + (*(s16 *)&D_801D0104) = buf[0]; + (*(s16 *)&D_801D0106) = buf[1]; + (*(s16 *)&D_801D0108) = buf[2]; + D_801D00F4 = D_80114F30 + buf[0]; + D_801D007C = 0; + D_801D00F6 = D_80114F34 + buf[1]; + D_801D00F8 = D_80114F38 + buf[2]; + D_801D00EC = D_80114F24 + buf[0]; + D_801D00EE = D_80114F28 + buf[1]; + D_801D00F0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D009C; +extern SV4 D_801D00A4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D00A4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D009C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D00A4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D00A4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D009C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D00A4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D00C4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D00C4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D007C; +extern s16 D_801D0248; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D007C = D_801D007C + 1; + if (D_801D007C >= 0x1F) { + D_801D0248 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D007C; +extern s16 D_801D0248; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D007C = D_801D007C + 1; + if (0x18 < D_801D007C) { + func_8012A4BC(); + D_801D0248 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D007C; +extern void (*D_801D00C0)(void); +extern short D_801D0104; +extern short D_801D0106; +extern short D_801D0108; +extern s16 D_801D0248; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D007C = D_801D007C + 1; + if (D_801D007C >= 0x19) { + if (D_801D00C0 != 0) { + (*D_801D00C0)(); + } else { + D_80114F30 = D_80114F30 + D_801D0104; + D_80114F34 = D_80114F34 + D_801D0106; + D_80114F38 = D_80114F38 + D_801D0108; + D_80114F24 = D_80114F24 + D_801D0104; + D_80114F28 = D_80114F28 + D_801D0106; + D_80114F2C = D_80114F2C + D_801D0108; + func_8012A4BC(); + } + D_801D0248 = 0; + } +} + + + +extern void (*D_80189AFC[])(void); + +void func_8017BE60(void *a0) { + D_80189AFC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017BF88); + + +extern void (*D_80189B14[])(void); + +void func_8017C0E4(void *a0) { + D_80189B14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017C180); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D060); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D0A0); + + +extern void (*D_80189BBC[])(void); + +void func_8017D0E0(void *a0) { + D_80189BBC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D11C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D160); + + +extern void (*D_80189BC4[])(void); + +void func_8017D184(void *a0) { + D_80189BC4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D1C0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D200(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D27C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80189BD0[])(void); + +void func_8017D29C(void *a0) { + D_80189BD0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D2D8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D34C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D374); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D39C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D434); + + +extern void (*D_80189BE4[])(void); + +void func_8017D4CC(void *a0) { + D_80189BE4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D508); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D6D0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D780); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D918); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D948); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017D9D8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DA5C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DAB8); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801A42AC[]; + +extern s32 func_8017DD84(s32 a0); + +void func_8017DC3C(int param_1) +{ + D_801A42AC[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8017DD84)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DC8C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DD0C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DD84); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017DDC4); + + +extern void (*D_801A4308[])(void); + +void func_8017DFE0(void *a0) { + D_801A4308[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017E01C(void) { +} + +void func_8017E024(void) { +} + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E02C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E130); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E1FC); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801A9B40; + void func_8017E304(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + func_8012A828((int)arg0, (int)&D_801A9B40); + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E330); + +void func_8017E3A0(void *a0) { + *(short *)((char *)a0 + 0x2) = 4; + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E3AC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E590); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E654); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E72C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E8D4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E980); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017E9E8); + +void func_8017EA78(void *a0) { + *(s16 *)((char *)a0 + 0x5C) = 0; + *(s16 *)((char *)a0 + 0x98) = 0; + *(s32 *)((char *)a0 + 0x1C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EA88); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EBB8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EC18); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EC78); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017ED0C); + + +extern void (*D_801A5124[])(void); + +void func_8017ED80(void *a0) { + D_801A5124[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EDBC); + + +extern void func_8012C218(void *a0); + void func_8017EE74(s32 arg0) { + s32 v0; + if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36) != *(s16 *)(arg0 + 0xfc)) { + ((void (*)(void))func_8012C218)(); + } + } + + + +extern void (*D_801A5440[])(void); + +void func_8017EEB0(void *a0) { + D_801A5440[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EEEC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017EF64); + + +extern s32 D_801A5170; + void func_8017F080(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + *(s32 *)((s32)a0 + 0xcc) = &D_801A5170; + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F098); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F12C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F17C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F390); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F400); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F440); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F47C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F538); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F5DC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F6B0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F76C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017F9D4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017FAC0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017FD58); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8017FEE0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018038C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180520); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801808D0); + +extern void (*D_801AA28C[])(void); + +void func_801809BC(void *a0) { + D_801AA28C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_801AA340[])(void); + +void func_801809F8(void *a0) { + D_801AA340[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180A34(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180A4C); + +void func_80180AF0(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180B0C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180B90); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180BCC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180BFC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180C80); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180D44); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180E24); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180E94); + +void func_80180F70(void) { +} + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80180F78); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181030); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801810F4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181148); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801811C4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801812A8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181374); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018144C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801814D8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181644); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181688); + + +extern s32 func_8012B030(u8 *a0); + void func_80181A20(s32 arg0) { + *(s32 *)(arg0 + 0x1c) = 1; + *(s16 *)(arg0 + 0x2) = 0x4; + ((s32 (*)(void *))func_8012B030)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181A4C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181AC4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181B18); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181CC8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181D94); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80181FF8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018200C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018226C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182318); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801823E8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182550); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801825A4); + + +extern void (*D_801AC300[])(void); + +void func_801827A8(void *a0) { + D_801AC300[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801827E4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801828C8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018291C); + +extern void func_801292C8(u8 *a0); + s32 func_80182A28(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182A5C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182A9C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182AF4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182B90); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182CE4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182DBC); + + +extern void (*D_801AC394[])(void); + +void func_80182E1C(void *a0) { + D_801AC394[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182E58); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182E80); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80182F00); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80183084); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801832A8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018365C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018389C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80183B04); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80183CAC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80183EF8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184044); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801840FC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184250); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801842FC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801843AC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184494); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801845B0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184690); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184768); + +extern s32 func_80153BD8(s32); + extern s32 func_80153BF0(s32 a0); + void func_801847D0(u8 * arg0) { + *(s16 *)(arg0 + 0xfe) = 0; + if (func_80153BD8((s32)arg0)) { + ((void (*)(void *))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018480C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801848B0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184970); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801849A4); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80184A00(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184A38); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184A94); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184B6C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184C00); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184CCC); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184DA4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184E40); + +void func_80184E98(void) { +} + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184EA0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184F40); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80184F94); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185028); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80185070(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185098); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801850E4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801851D0); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185254); + +extern void func_8012CBCC(s32 a0); + void func_80185360(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((u8 *)a0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185398); + + +extern void (*D_801CCCB0[])(void); + +void func_80185404(void *a0) { + D_801CCCB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185440); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185634); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_801856E4); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185794); + +void func_80185844(void) { +} + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018584C); + + +extern void (*D_801CCFF8[])(void); + +void func_801858F0(void *a0) { + D_801CCFF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_8018592C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185A00); + +void func_80185A28(void) { +} + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185A30); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185B7C); + +extern void func_8012C218(void *a0); + void func_80185C9C(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 0x2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185CC8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185CD8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185CE8); + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80185D28(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185D5C); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185D80); + + +extern void (*D_801CD020[])(void); + +void func_80185DE4(void *a0) { + D_801CD020[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185E20); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185EA8); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185F68); + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_80178D40", func_80185FD8); + + diff --git a/src/ov_SC02_027/ov_SC02_027_jr_801734BC.c b/src/ov_SC02_027/ov_SC02_027_jr_801734BC.c index 86537ddd3..f8e39e1e4 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_801734BC.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_801734BC.c @@ -3104,1757 +3104,3 @@ void func_80178D18(void) { D_801DAA3C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D9E04; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D9E04 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D9E04; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D9E04 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D9E2C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D9E2C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D9DE8; - -s32 func_8017A3B0(void) { - switch (D_801D9DE8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D9E24; -extern short D_801D9E20; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D9E24) { - case 0: - func_800D0CA0(1); - D_801D9E24 = D_801D9E24 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D9E20; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D9E24 = D_801D9E24 + 1; - if (D_801D9E24 < 0x1E) { - return 0; - } - D_801D9E24 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D9E64; - extern s16 D_801D9E66; - extern s16 D_801D9E68; - extern s16 D_801D9E5C; - extern s16 D_801D9E5E; - extern s16 D_801D9E60; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D9E64, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D9E66, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D9E68, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D9E5C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D9E5E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D9E60, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D9DEC; -extern u16 D_801D9E6C; -extern u16 D_801D9E6E; -extern u16 D_801D9E70; -extern s16 D_801DA9C8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801DA9C8 = 0; - D_801D9DEC = 0; - D_801D9E6C = D_80126B5E; - D_801D9E6E = D_80126B62; - D_801D9E70 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EB80[]; - extern s16 D_801D9E64; - extern s16 D_801D9E5C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EB80[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EB80[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D9E64; - s16 *p78C = &D_801D9E5C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801DA9C8 = 1; - D_801D9DEC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D9E0C; - extern SV4_8017B368 D_801D9E14; - extern s16 D_801D9E64; - extern s16 D_801D9E5C; - extern u16 D_8018EB80; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D9E0C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D9E14; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EB80)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EB80)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D9E64) = loc0; - (*(SV4_8017B368 *)&D_801D9E5C) = loc1; - D_801DA9C8 = 1; - D_801D9DEC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EB80[]; - extern s16 D_801D9E64; - extern s16 D_801D9E66; - extern s16 D_801D9E68; - extern s16 D_801D9E5C; - extern s16 D_801D9E5E; - extern s16 D_801D9E60; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EB80[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EB80[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D9E64; - s16 *p78C = &D_801D9E5C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D9E66; - v798 = D_801D9E68; - v78C = *p78C; - v78E = D_801D9E5E; - v790 = D_801D9E60; - __asm__ __volatile__(""); - D_801DA9C8 = 1; - D_801D9DEC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D9DEC; -extern s16 D_801D9E64; -extern s16 D_801D9E66; -extern s16 D_801D9E68; -extern s16 D_801D9E5C; -extern s16 D_801D9E5E; -extern s16 D_801D9E60; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D9DEC = 0; - D_801D9E64 = (s16) D_80114F30; - D_801D9E66 = (s16) D_80114F34; - D_801D9E68 = (s16) D_80114F38; - D_801D9E5C = (s16) D_80114F24; - D_801D9E5E = (s16) D_80114F28; - D_801D9E60 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D9E7C; -extern s16 D_801D9E7E; -extern s16 D_801D9E80; -extern s16 D_801D9E84; -extern s16 D_801D9E86; -extern s16 D_801D9E88; - -void func_8017B824(void) { - D_801D9E7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D9E7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D9E80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D9E84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D9E86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D9E88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D9E7C; -extern s16 D_801D9E7E; -extern s16 D_801D9E80; -extern s16 D_801D9E84; -extern s16 D_801D9E86; -extern s16 D_801D9E88; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D9E7C; - D_80114F34 = D_801D9E7E; - D_80114F38 = D_801D9E80; - D_80114F24 = D_801D9E84; - D_80114F28 = D_801D9E86; - D_80114F2C = D_801D9E88; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D9E64), src[8..15] -> (*(S8_8017B8E8 *)&D_801D9E5C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D9E64) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D9E5C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D9E6C; -extern u16 D_801D9E6E; -extern u16 D_801D9E70; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D9DEC; -extern short D_801D9E74; -extern short D_801D9E76; -extern short D_801D9E78; -extern s16 D_801D9E64; -extern s16 D_801D9E66; -extern s16 D_801D9E68; -extern s16 D_801D9E5C; -extern s16 D_801D9E5E; -extern s16 D_801D9E60; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D9E6C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D9E6E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D9E70); - (*(s16 *)&D_801D9E74) = buf[0]; - (*(s16 *)&D_801D9E76) = buf[1]; - (*(s16 *)&D_801D9E78) = buf[2]; - D_801D9E64 = D_80114F30 + buf[0]; - D_801D9DEC = 0; - D_801D9E66 = D_80114F34 + buf[1]; - D_801D9E68 = D_80114F38 + buf[2]; - D_801D9E5C = D_80114F24 + buf[0]; - D_801D9E5E = D_80114F28 + buf[1]; - D_801D9E60 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D9E0C; -extern SV4 D_801D9E14; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D9E14) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D9E0C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D9E14 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D9E14)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D9E0C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D9E14) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D9E34[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D9E34; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D9DEC; -extern s16 D_801DA9C8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D9DEC = D_801D9DEC + 1; - if (D_801D9DEC >= 0x1F) { - D_801DA9C8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D9DEC; -extern s16 D_801DA9C8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D9DEC = D_801D9DEC + 1; - if (0x18 < D_801D9DEC) { - func_8012A4BC(); - D_801DA9C8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D9DEC; -extern void (*D_801D9E30)(void); -extern short D_801D9E74; -extern short D_801D9E76; -extern short D_801D9E78; -extern s16 D_801DA9C8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D9DEC = D_801D9DEC + 1; - if (D_801D9DEC >= 0x19) { - if (D_801D9E30 != 0) { - (*D_801D9E30)(); - } else { - D_80114F30 = D_80114F30 + D_801D9E74; - D_80114F34 = D_80114F34 + D_801D9E76; - D_80114F38 = D_80114F38 + D_801D9E78; - D_80114F24 = D_80114F24 + D_801D9E74; - D_80114F28 = D_80114F28 + D_801D9E76; - D_80114F2C = D_80114F2C + D_801D9E78; - func_8012A4BC(); - } - D_801DA9C8 = 0; - } -} - - - -extern void (*D_8018EC20[])(void); - -void func_8017BE60(void *a0) { - D_8018EC20[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017C738); - - -extern void (*D_8018ED3C[])(void); - -void func_8017C8B8(void *a0) { - D_8018ED3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CBD4); - -extern void func_8012C218(void *a0); - void func_8017CC60(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CCD4); - - -extern void (*D_8018ED94[])(void); - -void func_8017CD10(void *a0) { - D_8018ED94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D030); - - -extern void (*D_8018EDA8[])(void); - -void func_8017D33C(void *a0) { - D_8018EDA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D588); - - -extern void (*D_8018EDBC[])(void); - -void func_8017D5DC(void *a0) { - D_8018EDBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E7F8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E884); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E8C4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E904); - - -extern void (*D_8018F044[])(void); - -void func_8017E950(void *a0) { - D_8018F044[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017E98C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E9D0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018F04C[])(void); - -void func_8017E9F4(void *a0) { - D_8018F04C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EA30); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EA70); - -extern void func_800D1EBC(void); - void func_8017EAFC(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018F058[])(void); - -void func_8017EB1C(void *a0) { - D_8018F058[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EB58); - - -extern void (*D_8018F064[])(void); - -void func_8017EBF0(void *a0) { - D_8018F064[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EC2C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EC6C); - - -extern void (*D_8018F070[])(void); - -void func_8017ED04(void *a0) { - D_8018F070[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017ED40); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EDD8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EE00); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F084; - -void func_8017EE28(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F084, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EE50); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EEE8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017EF80); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F01C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F0B4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F14C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F1E4); - - -extern void (*D_8018F08C[])(void); - -void func_8017F27C(void *a0) { - D_8018F08C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F2B8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F3E8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F498); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F624); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F6D4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F780); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F858); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017F918); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FAB0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FAE0); - -extern s32 resLoad_lastId; -extern void func_8002D4C8(s32 arg0, s32 arg1); - -void func_8017FB08(void) { - func_8002D4C8(0x13C, 0); - resLoad_lastId = 0x39; -} - - -extern s32 func_8017FCAC(void); - void func_8017FB38(void) { - func_8017FCAC(); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FB58); - -extern s32 D_801DA128; - extern s32 D_801DA120; - extern s32 D_801DA124; - void func_8017FC88(void) { - D_801DA128 = 0; - D_801DA120 = 1; - D_801DA124 = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FCAC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FED4); - - -extern void (*D_8018F1F8[])(void); - -void func_8017FF34(void *a0) { - D_8018F1F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FF70); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8017FFB4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", listCdBuffer); - - -extern void (*D_8018F200[])(void); - -void func_8018001C(void *a0) { - D_8018F200[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_801806FC(void * arg0); - void func_80180058(s32 arg0) { - s32 temp_s0 = arg0; - ((void (*)(void))func_801806FC)(); - *(s16 *)(temp_s0 + 0x2) = 0x1; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180088); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180538); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801805EC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801806FC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180770); - - -extern void (*D_8018F24C[])(void); - -void func_801808CC(void *a0) { - D_8018F24C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180908); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801809A8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180A54); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80180B3C); - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_80181328(u8 *a0); -extern void (*D_8018F2E8[])(int); - -void func_80180FE0(int param_1) -{ - ((void (*)(void))func_80181328)(); - D_8018F2E8[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018102C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801810A0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181200); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801812CC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181328); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018152C); - - -extern void (*D_8018F450[])(void); - -void func_801815AC(void *a0) { - D_8018F450[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801815E8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181740); - - -extern void (*D_8018F470[])(void); - -void func_80181858(void *a0) { - D_8018F470[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181894); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181A54); - - -extern void (*D_8018F49C[])(void); - -void func_80181AE4(void *a0) { - D_8018F49C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181B20); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181D14); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181E50); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181EDC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80181F38); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801AB590[]; - -extern s32 func_80182204(s32 a0); - -void func_801820BC(int param_1) -{ - D_801AB590[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80182204)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018210C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018218C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182204); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182244); - -extern void (*D_801AB5EC[])(void); - -void func_80182460(void *a0) { - D_801AB5EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018249C(void) { -} - -void func_801824A4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801824AC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801825B0(void *arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x20; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801825D8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182610); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182674); - - -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_801826FC(s32 *a0) { - a0[7] = 0x10; - func_8012AD44(a0, 1); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182724); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182758); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801827C8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182828); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182868); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182A44); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182AA4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182AFC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182C78); - - -extern void (*D_801AB708[])(void); - -void func_80182D10(void *a0) { - D_801AB708[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182D4C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182E4C); - -extern s32 func_8012BEE8(s32 arg); - extern void func_801825D8(s32 arg); - void func_80182F3C(s32 arg0) { - if (func_8012BEE8(arg0)) { - func_801825D8(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182F74); - -void func_80182FC0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80182FC8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018309C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801830EC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018315C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801831F4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801832B0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801832D8(s32 a0) { - *(s16 *)(a0 + 0xFC) = 0; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801832FC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183344); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018339C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183418); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801834E8); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183658(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x10; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); - } - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183680(s32 a0) { - *(s32 *)(a0 + 0x14) = 0x80000; - *(s32 *)(a0 + 0x1C) = 0x50; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801836B0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018371C); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801838E8(s32 *a0) { - *(s32 *)((char *)a0 + 0x14) = 0xFFF80000; - *(s32 *)((char *)a0 + 0x1C) = 0x50; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); - } - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183918(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183938); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801839C8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183A40); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183A88); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183ADC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183BC4); - -void func_80183C7C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183C84); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183CF4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183D5C); - -void func_80183DCC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80183DD4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018406C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801841F4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801846A0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184834); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184BE4); - - -extern void (*D_801AD7AC[])(void); - -void func_80184CD0(void *a0) { - D_801AD7AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801AD860[])(void); - -void func_80184D0C(void *a0) { - D_801AD860[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184D48(void *a0) { - *(s8 *)((s32)a0 + 0xC1) = 0; - *(s16 *)((s32)a0 + 0x5E) = 0; - *(s16 *)((s32)a0 + 0x5C) &= 0xC800; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184D60); - -void func_80184E04(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184E20); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184EA4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184EE0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184F10); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80184F94); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185058); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185138); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801851A8); - -void func_80185284(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018528C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185344); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185408); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018545C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801854D8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801855BC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185688); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185760); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018582C); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801B42B8; - void func_80185934(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - func_8012A828((int)arg0, (int)&D_801B42B8); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185960); - -void func_801859D0(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 4; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801859DC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185BC0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185C84); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185D5C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185F04); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80185FB0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186018); - -void func_801860A8(void *a0) { - *(short *)((char *)a0 + 0x5c) = 0; - *(short *)((char *)a0 + 0x98) = 0; - *(int *)((char *)a0 + 0x1c) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801860B8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801861E8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186248); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801862A8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018633C); - - -extern void (*D_801AF89C[])(void); - -void func_801863B0(void *a0) { - D_801AF89C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801863EC); - -extern void func_8012C218(void *a0); - void func_801864A4(s32 arg0) { - s32 v0; - if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36) != *(s16 *)(arg0 + 0xfc)) { - ((void (*)(void))func_8012C218)(); - } - } - - -extern void (*D_801AFBB8[])(void); - -void func_801864E0(void *a0) { - D_801AFBB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018651C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186594); - - -extern s32 D_801AF8E8; - void func_801866B0(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - *(s32 *)((s32)a0 + 0xcc) = &D_801AF8E8; - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801866C8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018675C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801867AC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801869C0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186A30); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186A70); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186AAC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186B68); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186C0C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186CE0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80186D9C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187004); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801870F0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187288); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187400); - - -extern void (*D_801B45BC[])(void); - -void func_801877E4(void *a0) { - D_801B45BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187820); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018791C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187970); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187AF4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80187D18); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801880CC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018830C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188574); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018871C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188968); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188AB4); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188B6C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188CC0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188D6C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188E1C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80188F04); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189020); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189100); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801891D8); - - -extern s32 func_80153BD8(s32); - extern s32 func_80153BF0(s32 a0); - void func_80189240(u8 * arg0) { - *(s16 *)(arg0 + 0xfe) = 0; - if (func_80153BD8((s32)arg0)) { - ((void (*)(void *))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018927C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189320); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801893E0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189414); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80189470(s32 param_1) { - if (((int (*)(void))func_80153BD8)() != 0) { - ((void (*)(s32))func_80153BF0)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801894A8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189504); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801895DC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189670); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018973C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189814); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801898B0); - -void func_80189908(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189910); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_801899B0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189A04); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189A98); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80189AE0(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189B08); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189B54); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189C40); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189CC4); - -extern void func_8012CBCC(s32 a0); - void func_80189DD0(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((s32)a0 + 0x2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189E08); - - -extern void (*D_801D2B0C[])(void); - -void func_80189E74(void *a0) { - D_801D2B0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189EB0); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189F28); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_80189FD8); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A090); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A150); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A21C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A41C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A4A4); - - -extern void (*D_801D6A1C[])(void); - -void func_8018A528(void *a0) { - D_801D6A1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A564); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A758); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A808); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A8B8); - -void func_8018A968(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018A970); - - -extern void (*D_801D6D64[])(void); - -void func_8018AA14(void *a0) { - D_801D6D64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AA50); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AB24); - -void func_8018AB4C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AB54); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018ACA0); - - -extern void func_8012C218(void *a0); - s32 func_8018ADC0(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018ADEC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018ADFC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AE0C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018AE4C(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AE80); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AEA4); - - -extern void (*D_801D6D8C[])(void); - -void func_8018AF08(void *a0) { - D_801D6D8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AF44); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018AFCC); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018B08C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_801734BC", func_8018B0FC); - diff --git a/src/ov_SC02_027/ov_SC02_027_jr_80178D40.c b/src/ov_SC02_027/ov_SC02_027_jr_80178D40.c new file mode 100644 index 000000000..f776c7449 --- /dev/null +++ b/src/ov_SC02_027/ov_SC02_027_jr_80178D40.c @@ -0,0 +1,5224 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018E428[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D9158; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018E41C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018E460[]; +extern unsigned short D_8018E468[]; +extern unsigned short D_8018E470[]; +extern unsigned char D_801D9160[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D9158; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018E478[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D9294; +extern M2C_UNK D_801D9298; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D9220; +extern void (*D_8018E4A8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D929C[]; +extern u8 D_801D92A4[]; +extern u8 D_801D9254[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018E4B0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018E4CC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018E4D4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E53C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E4E0; +extern u8 D_8018E4EC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018E570[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018E578[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018E5CC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018E600[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018E5F0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018E61C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E694[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E69C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E6A4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E6AC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E6B4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E6BC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E6C8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E6D4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E6E0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E6F0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E700[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E708[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E710[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E718[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E720[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E728[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E730[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E738[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E740[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E748[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E750[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E758[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E760[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E768[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E770[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E778[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E780[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E788[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E790[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E798[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E7A0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E7A8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E7B0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E7F4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E7B8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E824[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E860[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E8B8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E8C8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E8D0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018EA38[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018EA44[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D8820; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801DA9C8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D99D8; +extern short D_801DAA3C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801DAA3C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801DAA3C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D99D8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801DAA3C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801DA998 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801DA998 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801DAA3C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801DAA3C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D9E34[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D99DC; + extern s32 D_801D9DF0; + extern s16 D_801D9DF4; + extern s16 D_801D9DF8; + extern s16 D_801D9DFC; + extern s16 D_801D9E00; + extern s32 D_801D9E08; + extern s32 D_801D9E0C; + extern s32 D_801D9E1C; + extern s16 D_801D9E20; + extern s16 D_801D9E24; + extern s32 D_801D9E28; + extern s32 D_801D9E30; + extern s32 D_801D9E34[10]; + extern s32 D_801DA8E0; + extern s16 D_801DA998; + extern s32 D_801DA9C4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801DA998; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D9DF0); + D_801D9DF0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D9DFC, D_801D9E00 ? 0x48 : 0x40); + (*(s16*)&D_801DAA3C) = 2; + break; + case 0: + func_80179B28(D_801D9DF0); + D_801D9DF0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D9DF4, D_801D9DF8 ? 0x48 : 0x40); + (*(s16*)&D_801DAA3C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801DA8E0 != 0) { + func_80179B28(D_801D9DF0); + D_801D9DF0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D9DF4, D_801D9DF8 ? 0x48 : 0x40); + (*(s16*)&D_801DAA3C) = 1; + } else { + (*(s16*)&D_801DAA3C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D9DF0); + D_801D9DF0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D9DF4, + D_801D9DF8 ? 0x48 : 0x40); + (*(s16*)&D_801DAA3C) = 1; + break; + case 2: + func_80179B28(D_801D9DF0); + if (D_801D9E08 != 0) { + D_801D99D8 = D_801D9E08; + D_801D9E08 = 0; + (*(s16*)&D_801DAA3C) = 3; + return; + } + (*(s16*)&D_801DAA3C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801DAA3C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801DAA3C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801DAA3C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x1B: + D_801D9E28 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801DAA3C) = 4; + D_801D99DC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801DAA3C) = 5; + D_801D9E1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D9E1C = (s32)func_8017A3B0; + (*(s16*)&D_801DAA3C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x24: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801DAA3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801DAA3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801DAA3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801DAA3C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801DAA3C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801DAA3C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801DAA3C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D9E0C); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D9E0C); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D9E0C); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D9E0C); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x4E: + D_801D9E30 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x2B: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801DAA3C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801DA9C4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x34: + (*(s16*)&D_801DAA3C) = 3; + D_801D99D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D9E08 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801DAA3C) = 3; + D_801D99D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801DAA3C) = 3; + D_801D99D8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D99D8 = *(s32 *)(D_801D99D8 + 4); + return; + case 0x37: + (*(s16*)&D_801DAA3C) = 3; + D_801D9DF4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D9DF8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801DAA3C) = 3; + D_801D9DFC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D9E00 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801DAA3C) = 3; + D_801D9DF4 = w1; + D_801D9DF8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801DAA3C) = 3; + D_801D9DFC = w2; + D_801D9E00 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x43: + D_801D9E1C = (s32)func_8017A3D8; + D_801D9E24 = 0; + (*(s16*)&D_801DAA3C) = 5; + D_801D9E20 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801DAA3C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801DAA3C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D9E34; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801DAA3C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D9E34; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801DAA3C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D9E34[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801DAA3C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D9E34; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801DAA3C) = 3; + break; + default: + break; + } +Lend: + D_801D99D8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D9E04; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D9E04 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D9E04; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D9E04 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D9E2C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D9E2C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D9DE8; + +s32 func_8017A3B0(void) { + switch (D_801D9DE8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D9E24; +extern short D_801D9E20; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D9E24) { + case 0: + func_800D0CA0(1); + D_801D9E24 = D_801D9E24 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D9E20; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D9E24 = D_801D9E24 + 1; + if (D_801D9E24 < 0x1E) { + return 0; + } + D_801D9E24 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D9E64; + extern s16 D_801D9E66; + extern s16 D_801D9E68; + extern s16 D_801D9E5C; + extern s16 D_801D9E5E; + extern s16 D_801D9E60; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D9E64, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D9E66, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D9E68, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D9E5C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D9E5E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D9E60, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D9DEC; +extern u16 D_801D9E6C; +extern u16 D_801D9E6E; +extern u16 D_801D9E70; +extern s16 D_801DA9C8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801DA9C8 = 0; + D_801D9DEC = 0; + D_801D9E6C = D_80126B5E; + D_801D9E6E = D_80126B62; + D_801D9E70 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EB80[]; + extern s16 D_801D9E64; + extern s16 D_801D9E5C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EB80[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EB80[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D9E64; + s16 *p78C = &D_801D9E5C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801DA9C8 = 1; + D_801D9DEC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D9E0C; + extern SV4_8017B368 D_801D9E14; + extern s16 D_801D9E64; + extern s16 D_801D9E5C; + extern u16 D_8018EB80; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D9E0C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D9E14; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EB80)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EB80)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D9E64) = loc0; + (*(SV4_8017B368 *)&D_801D9E5C) = loc1; + D_801DA9C8 = 1; + D_801D9DEC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EB80[]; + extern s16 D_801D9E64; + extern s16 D_801D9E66; + extern s16 D_801D9E68; + extern s16 D_801D9E5C; + extern s16 D_801D9E5E; + extern s16 D_801D9E60; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EB80[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EB80[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D9E64; + s16 *p78C = &D_801D9E5C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D9E66; + v798 = D_801D9E68; + v78C = *p78C; + v78E = D_801D9E5E; + v790 = D_801D9E60; + __asm__ __volatile__(""); + D_801DA9C8 = 1; + D_801D9DEC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D9DEC; +extern s16 D_801D9E64; +extern s16 D_801D9E66; +extern s16 D_801D9E68; +extern s16 D_801D9E5C; +extern s16 D_801D9E5E; +extern s16 D_801D9E60; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D9DEC = 0; + D_801D9E64 = (s16) D_80114F30; + D_801D9E66 = (s16) D_80114F34; + D_801D9E68 = (s16) D_80114F38; + D_801D9E5C = (s16) D_80114F24; + D_801D9E5E = (s16) D_80114F28; + D_801D9E60 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D9E7C; +extern s16 D_801D9E7E; +extern s16 D_801D9E80; +extern s16 D_801D9E84; +extern s16 D_801D9E86; +extern s16 D_801D9E88; + +void func_8017B824(void) { + D_801D9E7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D9E7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D9E80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D9E84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D9E86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D9E88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D9E7C; +extern s16 D_801D9E7E; +extern s16 D_801D9E80; +extern s16 D_801D9E84; +extern s16 D_801D9E86; +extern s16 D_801D9E88; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D9E7C; + D_80114F34 = D_801D9E7E; + D_80114F38 = D_801D9E80; + D_80114F24 = D_801D9E84; + D_80114F28 = D_801D9E86; + D_80114F2C = D_801D9E88; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D9E64), src[8..15] -> (*(S8_8017B8E8 *)&D_801D9E5C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D9E64) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D9E5C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D9E6C; +extern u16 D_801D9E6E; +extern u16 D_801D9E70; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D9DEC; +extern short D_801D9E74; +extern short D_801D9E76; +extern short D_801D9E78; +extern s16 D_801D9E64; +extern s16 D_801D9E66; +extern s16 D_801D9E68; +extern s16 D_801D9E5C; +extern s16 D_801D9E5E; +extern s16 D_801D9E60; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D9E6C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D9E6E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D9E70); + (*(s16 *)&D_801D9E74) = buf[0]; + (*(s16 *)&D_801D9E76) = buf[1]; + (*(s16 *)&D_801D9E78) = buf[2]; + D_801D9E64 = D_80114F30 + buf[0]; + D_801D9DEC = 0; + D_801D9E66 = D_80114F34 + buf[1]; + D_801D9E68 = D_80114F38 + buf[2]; + D_801D9E5C = D_80114F24 + buf[0]; + D_801D9E5E = D_80114F28 + buf[1]; + D_801D9E60 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D9E0C; +extern SV4 D_801D9E14; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D9E14) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D9E0C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D9E14 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D9E14)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D9E0C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D9E14) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D9E34[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D9E34; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D9DEC; +extern s16 D_801DA9C8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D9DEC = D_801D9DEC + 1; + if (D_801D9DEC >= 0x1F) { + D_801DA9C8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D9DEC; +extern s16 D_801DA9C8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D9DEC = D_801D9DEC + 1; + if (0x18 < D_801D9DEC) { + func_8012A4BC(); + D_801DA9C8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D9DEC; +extern void (*D_801D9E30)(void); +extern short D_801D9E74; +extern short D_801D9E76; +extern short D_801D9E78; +extern s16 D_801DA9C8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D9DEC = D_801D9DEC + 1; + if (D_801D9DEC >= 0x19) { + if (D_801D9E30 != 0) { + (*D_801D9E30)(); + } else { + D_80114F30 = D_80114F30 + D_801D9E74; + D_80114F34 = D_80114F34 + D_801D9E76; + D_80114F38 = D_80114F38 + D_801D9E78; + D_80114F24 = D_80114F24 + D_801D9E74; + D_80114F28 = D_80114F28 + D_801D9E76; + D_80114F2C = D_80114F2C + D_801D9E78; + func_8012A4BC(); + } + D_801DA9C8 = 0; + } +} + + + +extern void (*D_8018EC20[])(void); + +void func_8017BE60(void *a0) { + D_8018EC20[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017C738); + + +extern void (*D_8018ED3C[])(void); + +void func_8017C8B8(void *a0) { + D_8018ED3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CBD4); + +extern void func_8012C218(void *a0); + void func_8017CC60(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CCD4); + + +extern void (*D_8018ED94[])(void); + +void func_8017CD10(void *a0) { + D_8018ED94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D030); + + +extern void (*D_8018EDA8[])(void); + +void func_8017D33C(void *a0) { + D_8018EDA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D588); + + +extern void (*D_8018EDBC[])(void); + +void func_8017D5DC(void *a0) { + D_8018EDBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E7F8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E884); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E8C4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E904); + + +extern void (*D_8018F044[])(void); + +void func_8017E950(void *a0) { + D_8018F044[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017E98C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E9D0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018F04C[])(void); + +void func_8017E9F4(void *a0) { + D_8018F04C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EA30); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EA70); + +extern void func_800D1EBC(void); + void func_8017EAFC(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018F058[])(void); + +void func_8017EB1C(void *a0) { + D_8018F058[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EB58); + + +extern void (*D_8018F064[])(void); + +void func_8017EBF0(void *a0) { + D_8018F064[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EC2C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EC6C); + + +extern void (*D_8018F070[])(void); + +void func_8017ED04(void *a0) { + D_8018F070[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017ED40); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EDD8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EE00); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F084; + +void func_8017EE28(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F084, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EE50); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EEE8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017EF80); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F01C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F0B4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F14C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F1E4); + + +extern void (*D_8018F08C[])(void); + +void func_8017F27C(void *a0) { + D_8018F08C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F2B8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F3E8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F498); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F624); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F6D4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F780); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F858); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017F918); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FAB0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FAE0); + +extern s32 resLoad_lastId; +extern void func_8002D4C8(s32 arg0, s32 arg1); + +void func_8017FB08(void) { + func_8002D4C8(0x13C, 0); + resLoad_lastId = 0x39; +} + + +extern s32 func_8017FCAC(void); + void func_8017FB38(void) { + func_8017FCAC(); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FB58); + +extern s32 D_801DA128; + extern s32 D_801DA120; + extern s32 D_801DA124; + void func_8017FC88(void) { + D_801DA128 = 0; + D_801DA120 = 1; + D_801DA124 = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FCAC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FED4); + + +extern void (*D_8018F1F8[])(void); + +void func_8017FF34(void *a0) { + D_8018F1F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FF70); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8017FFB4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", listCdBuffer); + + +extern void (*D_8018F200[])(void); + +void func_8018001C(void *a0) { + D_8018F200[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_801806FC(void * arg0); + void func_80180058(s32 arg0) { + s32 temp_s0 = arg0; + ((void (*)(void))func_801806FC)(); + *(s16 *)(temp_s0 + 0x2) = 0x1; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180088); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180538); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801805EC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801806FC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180770); + + +extern void (*D_8018F24C[])(void); + +void func_801808CC(void *a0) { + D_8018F24C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180908); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801809A8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180A54); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80180B3C); + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_80181328(u8 *a0); +extern void (*D_8018F2E8[])(int); + +void func_80180FE0(int param_1) +{ + ((void (*)(void))func_80181328)(); + D_8018F2E8[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018102C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801810A0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181200); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801812CC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181328); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018152C); + + +extern void (*D_8018F450[])(void); + +void func_801815AC(void *a0) { + D_8018F450[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801815E8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181740); + + +extern void (*D_8018F470[])(void); + +void func_80181858(void *a0) { + D_8018F470[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181894); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181A54); + + +extern void (*D_8018F49C[])(void); + +void func_80181AE4(void *a0) { + D_8018F49C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181B20); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181D14); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181E50); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181EDC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80181F38); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801AB590[]; + +extern s32 func_80182204(s32 a0); + +void func_801820BC(int param_1) +{ + D_801AB590[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80182204)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018210C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018218C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182204); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182244); + +extern void (*D_801AB5EC[])(void); + +void func_80182460(void *a0) { + D_801AB5EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018249C(void) { +} + +void func_801824A4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801824AC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801825B0(void *arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x20; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801825D8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182610); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182674); + + +extern void func_8012AD44(s32 *a0, s16 a1); + +void func_801826FC(s32 *a0) { + a0[7] = 0x10; + func_8012AD44(a0, 1); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182724); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182758); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801827C8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182828); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182868); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182A44); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182AA4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182AFC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182C78); + + +extern void (*D_801AB708[])(void); + +void func_80182D10(void *a0) { + D_801AB708[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182D4C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182E4C); + +extern s32 func_8012BEE8(s32 arg); + extern void func_801825D8(s32 arg); + void func_80182F3C(s32 arg0) { + if (func_8012BEE8(arg0)) { + func_801825D8(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182F74); + +void func_80182FC0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80182FC8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018309C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801830EC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018315C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801831F4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801832B0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801832D8(s32 a0) { + *(s16 *)(a0 + 0xFC) = 0; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801832FC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183344); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018339C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183418); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801834E8); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183658(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x10; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); + } + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183680(s32 a0) { + *(s32 *)(a0 + 0x14) = 0x80000; + *(s32 *)(a0 + 0x1C) = 0x50; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801836B0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018371C); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801838E8(s32 *a0) { + *(s32 *)((char *)a0 + 0x14) = 0xFFF80000; + *(s32 *)((char *)a0 + 0x1C) = 0x50; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); + } + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183918(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183938); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801839C8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183A40); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183A88); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183ADC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183BC4); + +void func_80183C7C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183C84); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183CF4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183D5C); + +void func_80183DCC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80183DD4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018406C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801841F4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801846A0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184834); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184BE4); + + +extern void (*D_801AD7AC[])(void); + +void func_80184CD0(void *a0) { + D_801AD7AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801AD860[])(void); + +void func_80184D0C(void *a0) { + D_801AD860[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184D48(void *a0) { + *(s8 *)((s32)a0 + 0xC1) = 0; + *(s16 *)((s32)a0 + 0x5E) = 0; + *(s16 *)((s32)a0 + 0x5C) &= 0xC800; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184D60); + +void func_80184E04(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184E20); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184EA4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184EE0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184F10); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80184F94); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185058); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185138); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801851A8); + +void func_80185284(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018528C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185344); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185408); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018545C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801854D8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801855BC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185688); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185760); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018582C); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801B42B8; + void func_80185934(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + func_8012A828((int)arg0, (int)&D_801B42B8); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185960); + +void func_801859D0(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 4; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801859DC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185BC0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185C84); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185D5C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185F04); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80185FB0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186018); + +void func_801860A8(void *a0) { + *(short *)((char *)a0 + 0x5c) = 0; + *(short *)((char *)a0 + 0x98) = 0; + *(int *)((char *)a0 + 0x1c) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801860B8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801861E8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186248); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801862A8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018633C); + + +extern void (*D_801AF89C[])(void); + +void func_801863B0(void *a0) { + D_801AF89C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801863EC); + +extern void func_8012C218(void *a0); + void func_801864A4(s32 arg0) { + s32 v0; + if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36) != *(s16 *)(arg0 + 0xfc)) { + ((void (*)(void))func_8012C218)(); + } + } + + +extern void (*D_801AFBB8[])(void); + +void func_801864E0(void *a0) { + D_801AFBB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018651C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186594); + + +extern s32 D_801AF8E8; + void func_801866B0(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + *(s32 *)((s32)a0 + 0xcc) = &D_801AF8E8; + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801866C8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018675C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801867AC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801869C0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186A30); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186A70); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186AAC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186B68); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186C0C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186CE0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80186D9C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187004); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801870F0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187288); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187400); + + +extern void (*D_801B45BC[])(void); + +void func_801877E4(void *a0) { + D_801B45BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187820); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018791C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187970); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187AF4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80187D18); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801880CC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018830C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188574); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018871C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188968); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188AB4); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188B6C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188CC0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188D6C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188E1C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80188F04); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189020); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189100); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801891D8); + + +extern s32 func_80153BD8(s32); + extern s32 func_80153BF0(s32 a0); + void func_80189240(u8 * arg0) { + *(s16 *)(arg0 + 0xfe) = 0; + if (func_80153BD8((s32)arg0)) { + ((void (*)(void *))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018927C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189320); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801893E0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189414); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80189470(s32 param_1) { + if (((int (*)(void))func_80153BD8)() != 0) { + ((void (*)(s32))func_80153BF0)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801894A8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189504); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801895DC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189670); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018973C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189814); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801898B0); + +void func_80189908(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189910); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_801899B0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189A04); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189A98); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80189AE0(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189B08); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189B54); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189C40); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189CC4); + +extern void func_8012CBCC(s32 a0); + void func_80189DD0(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((s32)a0 + 0x2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189E08); + + +extern void (*D_801D2B0C[])(void); + +void func_80189E74(void *a0) { + D_801D2B0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189EB0); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189F28); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_80189FD8); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A090); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A150); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A21C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A41C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A4A4); + + +extern void (*D_801D6A1C[])(void); + +void func_8018A528(void *a0) { + D_801D6A1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A564); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A758); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A808); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A8B8); + +void func_8018A968(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018A970); + + +extern void (*D_801D6D64[])(void); + +void func_8018AA14(void *a0) { + D_801D6D64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AA50); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AB24); + +void func_8018AB4C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AB54); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018ACA0); + + +extern void func_8012C218(void *a0); + s32 func_8018ADC0(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018ADEC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018ADFC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AE0C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018AE4C(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AE80); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AEA4); + + +extern void (*D_801D6D8C[])(void); + +void func_8018AF08(void *a0) { + D_801D6D8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AF44); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018AFCC); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018B08C); + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_80178D40", func_8018B0FC); + + diff --git a/src/ov_SC02_028/ov_SC02_028_jr_801734BC.c b/src/ov_SC02_028/ov_SC02_028_jr_801734BC.c index 79d861ce8..d85bee69f 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_801734BC.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_801734BC.c @@ -3104,1782 +3104,3 @@ void func_80178D18(void) { D_801D363C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D2DA4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D2DA4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D2DA4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D2DA4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D2DCC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D2DCC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D2D88; - -s32 func_8017A3B0(void) { - switch (D_801D2D88) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D2DC4; -extern short D_801D2DC0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D2DC4) { - case 0: - func_800D0CA0(1); - D_801D2DC4 = D_801D2DC4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D2DC0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D2DC4 = D_801D2DC4 + 1; - if (D_801D2DC4 < 0x1E) { - return 0; - } - D_801D2DC4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D2E04; - extern s16 D_801D2E06; - extern s16 D_801D2E08; - extern s16 D_801D2DFC; - extern s16 D_801D2DFE; - extern s16 D_801D2E00; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D2E04, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D2E06, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D2E08, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D2DFC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D2DFE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D2E00, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D2D8C; -extern u16 D_801D2E0C; -extern u16 D_801D2E0E; -extern u16 D_801D2E10; -extern s16 D_801D35C8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D35C8 = 0; - D_801D2D8C = 0; - D_801D2E0C = D_80126B5E; - D_801D2E0E = D_80126B62; - D_801D2E10 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018ED84[]; - extern s16 D_801D2E04; - extern s16 D_801D2DFC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018ED84[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018ED84[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D2E04; - s16 *p78C = &D_801D2DFC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D35C8 = 1; - D_801D2D8C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D2DAC; - extern SV4_8017B368 D_801D2DB4; - extern s16 D_801D2E04; - extern s16 D_801D2DFC; - extern u16 D_8018ED84; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D2DAC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D2DB4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018ED84)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018ED84)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D2E04) = loc0; - (*(SV4_8017B368 *)&D_801D2DFC) = loc1; - D_801D35C8 = 1; - D_801D2D8C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018ED84[]; - extern s16 D_801D2E04; - extern s16 D_801D2E06; - extern s16 D_801D2E08; - extern s16 D_801D2DFC; - extern s16 D_801D2DFE; - extern s16 D_801D2E00; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018ED84[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018ED84[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D2E04; - s16 *p78C = &D_801D2DFC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D2E06; - v798 = D_801D2E08; - v78C = *p78C; - v78E = D_801D2DFE; - v790 = D_801D2E00; - __asm__ __volatile__(""); - D_801D35C8 = 1; - D_801D2D8C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D2D8C; -extern s16 D_801D2E04; -extern s16 D_801D2E06; -extern s16 D_801D2E08; -extern s16 D_801D2DFC; -extern s16 D_801D2DFE; -extern s16 D_801D2E00; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D2D8C = 0; - D_801D2E04 = (s16) D_80114F30; - D_801D2E06 = (s16) D_80114F34; - D_801D2E08 = (s16) D_80114F38; - D_801D2DFC = (s16) D_80114F24; - D_801D2DFE = (s16) D_80114F28; - D_801D2E00 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D2E1C; -extern s16 D_801D2E1E; -extern s16 D_801D2E20; -extern s16 D_801D2E24; -extern s16 D_801D2E26; -extern s16 D_801D2E28; - -void func_8017B824(void) { - D_801D2E1C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D2E1E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D2E20 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D2E24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D2E26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D2E28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D2E1C; -extern s16 D_801D2E1E; -extern s16 D_801D2E20; -extern s16 D_801D2E24; -extern s16 D_801D2E26; -extern s16 D_801D2E28; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D2E1C; - D_80114F34 = D_801D2E1E; - D_80114F38 = D_801D2E20; - D_80114F24 = D_801D2E24; - D_80114F28 = D_801D2E26; - D_80114F2C = D_801D2E28; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D2E04), src[8..15] -> (*(S8_8017B8E8 *)&D_801D2DFC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D2E04) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D2DFC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D2E0C; -extern u16 D_801D2E0E; -extern u16 D_801D2E10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D2D8C; -extern short D_801D2E14; -extern short D_801D2E16; -extern short D_801D2E18; -extern s16 D_801D2E04; -extern s16 D_801D2E06; -extern s16 D_801D2E08; -extern s16 D_801D2DFC; -extern s16 D_801D2DFE; -extern s16 D_801D2E00; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D2E0C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D2E0E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D2E10); - (*(s16 *)&D_801D2E14) = buf[0]; - (*(s16 *)&D_801D2E16) = buf[1]; - (*(s16 *)&D_801D2E18) = buf[2]; - D_801D2E04 = D_80114F30 + buf[0]; - D_801D2D8C = 0; - D_801D2E06 = D_80114F34 + buf[1]; - D_801D2E08 = D_80114F38 + buf[2]; - D_801D2DFC = D_80114F24 + buf[0]; - D_801D2DFE = D_80114F28 + buf[1]; - D_801D2E00 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D2DAC; -extern SV4 D_801D2DB4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D2DB4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D2DAC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D2DB4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D2DB4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D2DAC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D2DB4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D2DD4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D2DD4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D2D8C; -extern s16 D_801D35C8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D2D8C = D_801D2D8C + 1; - if (D_801D2D8C >= 0x1F) { - D_801D35C8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D2D8C; -extern s16 D_801D35C8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D2D8C = D_801D2D8C + 1; - if (0x18 < D_801D2D8C) { - func_8012A4BC(); - D_801D35C8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D2D8C; -extern void (*D_801D2DD0)(void); -extern short D_801D2E14; -extern short D_801D2E16; -extern short D_801D2E18; -extern s16 D_801D35C8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D2D8C = D_801D2D8C + 1; - if (D_801D2D8C >= 0x19) { - if (D_801D2DD0 != 0) { - (*D_801D2DD0)(); - } else { - D_80114F30 = D_80114F30 + D_801D2E14; - D_80114F34 = D_80114F34 + D_801D2E16; - D_80114F38 = D_80114F38 + D_801D2E18; - D_80114F24 = D_80114F24 + D_801D2E14; - D_80114F28 = D_80114F28 + D_801D2E16; - D_80114F2C = D_80114F2C + D_801D2E18; - func_8012A4BC(); - } - D_801D35C8 = 0; - } -} - - - -extern void (*D_8018EE24[])(void); - -void func_8017BE60(void *a0) { - D_8018EE24[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017C738); - - -extern void (*D_8018EF40[])(void); - -void func_8017C8B8(void *a0) { - D_8018EF40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CBD4); - -extern void func_8012C218(void *a0); - void func_8017CC60(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CCD4); - - -extern void (*D_8018EF98[])(void); - -void func_8017CD10(void *a0) { - D_8018EF98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D030); - - -extern void (*D_8018EFAC[])(void); - -void func_8017D33C(void *a0) { - D_8018EFAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D588); - - -extern void (*D_8018EFC0[])(void); - -void func_8017D5DC(void *a0) { - D_8018EFC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E7C4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E810); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E850); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E89C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E8DC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E91C); - - -extern void (*D_8018F1A4[])(void); - -void func_8017E968(void *a0) { - D_8018F1A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017E9A4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E9E8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018F1AC[])(void); - -void func_8017EA0C(void *a0) { - D_8018F1AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EA48); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EA88); - -extern void func_800D1EBC(void); - void func_8017EB14(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018F1B8[])(void); - -void func_8017EB34(void *a0) { - D_8018F1B8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EB70(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - - -extern void (*D_8018F1C4[])(void); - -void func_8017EBEC(void *a0) { - D_8018F1C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EC28); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EC68); - - -extern void (*D_8018F1D0[])(void); - -void func_8017ED00(void *a0) { - D_8018F1D0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017ED3C); - -s32 func_8017ED78(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017ED80); - -extern void func_800D1EBC(void); - void func_8017EDE8(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018F1E0[])(void); - -void func_8017EE08(void *a0) { - D_8018F1E0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EE44); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F1EC; - -void func_8017EEDC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F1EC, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F1F0; - -void func_8017EF04(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F1F0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EF2C); - - -extern void (*D_8018F204[])(void); - -void func_8017EF54(void *a0) { - D_8018F204[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EF90); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017EFD8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F02C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F054); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F0F0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F188); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F220); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F2B4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F34C); - - -extern void (*D_8018F20C[])(void); - -void func_8017F3E4(void *a0) { - D_8018F20C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F420); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F558); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F608); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F794); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F844); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F8F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017F9AC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017FB44); - -extern s32 resLoad_lastId; - s32 func_8017FB74(void) { - return (u32)(resLoad_lastId ^ 0x39) != 0; - } - - - -extern s32 resLoad_lastId; -extern void func_8002D4C8(s32 arg0, s32 arg1); - -void func_8017FB8C(void) { - func_8002D4C8(0x13C, 0); - resLoad_lastId = 0x39; -} - - -extern void func_8017FD30(void); - void func_8017FBBC(void) { - func_8017FD30(); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017FBDC); - -extern s32 D_801D30C8; - extern s32 D_801D30C0; - extern s32 D_801D30C4; - void func_8017FD0C(void) { - D_801D30C8 = 0; - D_801D30C0 = 1; - D_801D30C4 = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017FD30); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017FF68); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8017FFC8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180040); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801A4C2C[]; - -extern s32 func_8018030C(s32 a0); - -void func_801801C4(int param_1) -{ - D_801A4C2C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8018030C)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180214); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180294); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018030C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018034C); - - -extern void (*D_801A4C88[])(void); - -void func_80180568(void *a0) { - D_801A4C88[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801805A4(void) { -} - -void func_801805AC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801805B4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801806E0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180718); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018077C); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80180804(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x10; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018082C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180860); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801808D0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180930); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180970); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180B4C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180BAC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180C04); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180D80); - - -extern void (*D_801A4DA4[])(void); - -void func_80180E18(void *a0) { - D_801A4DA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180E54); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80180F54); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181044); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018107C); - -void func_801810C8(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801810D0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801811A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801811F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181264); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801812FC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801813B8); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801813E0(s32 *a0) { - *(s16 *)((char *)a0 + 0xFC) = 0; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181404); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018144C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801814A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181520); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801815F0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181760(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x10; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); - } - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181788(s32 *a0) { - *(s32 *)((char *)a0 + 0x14) = 0x80000; - *(s32 *)((char *)a0 + 0x1C) = 0x50; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 2); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801817B8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181824); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801819F0(void *a0) { - *(s32 *)((s32)a0 + 0x14) = 0xFFF80000; - *(s32 *)((s32)a0 + 0x1C) = 0x50; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); - } - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181A20(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181A40); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181AD0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181B48); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181B90); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181BE4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181CCC); - -void func_80181D84(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181D8C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181DFC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181E64); - -void func_80181ED4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80181EDC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182060); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182194); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182230); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018226C(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0x20; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x4); - } - - -extern void func_80178B18(s32 a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern M2C_UNK D_801A4E88; - -void func_80182294(void *arg0) { - func_80178B18((s32)arg0, (s32)&D_801A4E88); - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); -} - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801822D0(void *arg0) { - ((void (*)(void *, int))func_8012AD44)(arg0, 0x6); - } - - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801A4ED4[]; - -extern s32 func_80182438(s32 a0); - -void func_801822F0(int param_1) -{ - D_801A4ED4[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80182438)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182340); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801823F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182438); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018248C); - - -extern void (*D_801A4F00[])(void); - -void func_801825EC(void *a0) { - D_801A4F00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182628); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182688); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182794); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801828A0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801828E0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018292C); - -void func_801829B4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801829BC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182C14); - - -extern void (*D_801A4FA4[])(void); - -void func_80182C68(void *a0) { - D_801A4FA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182CA4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182D90); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182E50); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182EA0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182F88); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80182FD4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801833F0); - -void func_80183910(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183918); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018393C); - -extern s16 D_801D328C; - extern s16 D_801D328E; - extern s16 D_801D3290; - extern s16 D_801D3292; - void func_801839DC(s32 arg0, s32 arg1, s32 arg2) { - D_801D328C = *(u16 *)((s32)arg0 + 0x0); - D_801D328E = *(u16 *)((s32)arg0 + 0x2); - D_801D3290 = arg1; - D_801D3292 = arg2; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183A0C); - -extern s16 D_801D3292; - void func_80183A84(s32 arg0) { - *(s16 *)((s32)&D_801D3292 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183AA0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183AF8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183BCC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183C08); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183C54); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183D30); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80183FF4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184018); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184040); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801840C8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184134); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801841A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018421C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184268); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184384); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801843C0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801844D4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801847B8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184A50); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80184BD8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185084); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185218); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801855C8); - - -extern void (*D_801A764C[])(void); - -void func_801856B4(void *a0) { - D_801A764C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A7700[])(void); - -void func_801856F0(void *a0) { - D_801A7700[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018572C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185744); - -void func_801857E8(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185804); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185888); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801858C4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801858F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185978); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185A3C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185B1C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185B8C); - -void func_80185C68(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185C70); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185D28); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185DEC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185E40); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185EBC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80185FA0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018606C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186144); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186210); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801AE158; - void func_80186318(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - func_8012A828((int)arg0, (int)&D_801AE158); - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186344); - -void func_801863B4(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 4; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801863C0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801865A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186668); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186740); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801868E8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186994); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801869FC); - -void func_80186A8C(void *a0) { - *(s16 *)((char *)a0 + 0x5c) = 0; - *(s16 *)((char *)a0 + 0x98) = 0; - *(s32 *)((char *)a0 + 0x1c) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186A9C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186BCC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186C2C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186C8C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186D20); - -extern void (*D_801A973C[])(void); - -void func_80186D94(void *a0) { - D_801A973C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186DD0); - -extern void func_8012C218(void *a0); - void func_80186E88(s32 arg0) { - s32 *p = *(s32 **)((s32)arg0 + 0x64); - if (*(s16 *)((s32)p + 0x36) != *(s16 *)((s32)arg0 + 0xfc)) { - ((void (*)(void))func_8012C218)(); - } - } - - - -extern void (*D_801A9A58[])(void); - -void func_80186EC4(void *a0) { - D_801A9A58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186F00); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80186F78); - -extern s32 D_801A9788; - void func_80187094(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - *(s32 *)((s32)a0 + 0xcc) = &D_801A9788; - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801870AC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187140); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187190); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801873A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187414); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187454); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187490); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018754C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801875F0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801876C4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187780); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801879E8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187AD4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187C6C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80187DE4); - - -extern void (*D_801AE45C[])(void); - -void func_801881C8(void *a0) { - D_801AE45C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188204); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188300); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188354); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801884D8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801886FC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188AB0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188CF0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80188F58); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189100); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018934C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189498); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189550); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801896A4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189750); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189800); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_801898E8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189A04); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189AE4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189BBC); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80189C24(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189C60); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189D04); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189DC4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189DF8); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80189E54(s32 param_1) { - if (func_80153BD8(param_1)) { - ((void (*)(s32))func_80153BF0)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189E8C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189EE8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_80189FC0); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A054); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A120); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A1F8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A294); - -void func_8018A2EC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A2F4); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A394); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A3E8); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A47C); - - -extern s32 func_8012BEE8(s32 a0); - -void func_8018A4C4(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A4EC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A538); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A624); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A6A8); - -extern void func_8012CBCC(s32 a0); - void func_8018A7B4(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A7EC); - - -extern void (*D_801CC9AC[])(void); - -void func_8018A858(void *a0) { - D_801CC9AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A894); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A90C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018A9BC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AA74); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AB34); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AC00); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AE00); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AE88); - - -extern void (*D_801D03D8[])(void); - -void func_8018AF0C(void *a0) { - D_801D03D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018AF48); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018B13C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018B1EC); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018B29C); - -void func_8018B34C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_801734BC", func_8018B354); - diff --git a/src/ov_SC02_028/ov_SC02_028_jr_80178D40.c b/src/ov_SC02_028/ov_SC02_028_jr_80178D40.c new file mode 100644 index 000000000..14ee6ae4b --- /dev/null +++ b/src/ov_SC02_028/ov_SC02_028_jr_80178D40.c @@ -0,0 +1,5249 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018E62C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D20F8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018E620[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018E664[]; +extern unsigned short D_8018E66C[]; +extern unsigned short D_8018E674[]; +extern unsigned char D_801D2100[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D20F8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018E67C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D2234; +extern M2C_UNK D_801D2238; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D21C0; +extern void (*D_8018E6AC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D223C[]; +extern u8 D_801D2244[]; +extern u8 D_801D21F4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018E6B4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018E6D0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018E6D8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E740[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E6E4; +extern u8 D_8018E6F0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018E774[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018E77C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018E7D0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018E804[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018E7F4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018E820; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E898[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E8A0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E8A8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E8B0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E8B8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E8C0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E8CC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E8D8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E8E4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E8F4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E904[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E90C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E914[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E91C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E924[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E92C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E934[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E93C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E944[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E94C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E954[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E95C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E964[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E96C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E974[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E97C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E984[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E98C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E994[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E99C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E9A4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E9AC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E9B4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E9F8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E9BC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018EA28[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018EA64[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018EABC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018EACC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018EAD4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018EC3C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018EC48[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D17A4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D35C8; +extern int func_80178970(void); +extern void func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D2978; +extern short D_801D363C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D363C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D363C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D2978 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D363C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D3598 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D3598 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D363C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D363C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D2DD4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D297C; + extern s32 D_801D2D90; + extern s16 D_801D2D94; + extern s16 D_801D2D98; + extern s16 D_801D2D9C; + extern s16 D_801D2DA0; + extern s32 D_801D2DA8; + extern s32 D_801D2DAC; + extern s32 D_801D2DBC; + extern s16 D_801D2DC0; + extern s16 D_801D2DC4; + extern s32 D_801D2DC8; + extern s32 D_801D2DD0; + extern s32 D_801D2DD4[10]; + extern s32 D_801D34E0; + extern s16 D_801D3598; + extern s32 D_801D35C4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D3598; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D2D90); + D_801D2D90 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D2D9C, D_801D2DA0 ? 0x48 : 0x40); + (*(s16*)&D_801D363C) = 2; + break; + case 0: + func_80179B28(D_801D2D90); + D_801D2D90 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D2D94, D_801D2D98 ? 0x48 : 0x40); + (*(s16*)&D_801D363C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D34E0 != 0) { + func_80179B28(D_801D2D90); + D_801D2D90 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D2D94, D_801D2D98 ? 0x48 : 0x40); + (*(s16*)&D_801D363C) = 1; + } else { + (*(s16*)&D_801D363C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D2D90); + D_801D2D90 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D2D94, + D_801D2D98 ? 0x48 : 0x40); + (*(s16*)&D_801D363C) = 1; + break; + case 2: + func_80179B28(D_801D2D90); + if (D_801D2DA8 != 0) { + D_801D2978 = D_801D2DA8; + D_801D2DA8 = 0; + (*(s16*)&D_801D363C) = 3; + return; + } + (*(s16*)&D_801D363C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D363C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D363C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D363C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D363C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D363C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D363C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D363C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D363C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D363C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D363C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D363C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x1B: + D_801D2DC8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D363C) = 4; + D_801D297C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D363C) = 5; + D_801D2DBC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D2DBC = (s32)func_8017A3B0; + (*(s16*)&D_801D363C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x24: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D363C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D363C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D363C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D363C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D363C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D363C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D363C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D363C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D363C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D2DAC); + (*(s16*)&D_801D363C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D2DAC); + (*(s16*)&D_801D363C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D2DAC); + (*(s16*)&D_801D363C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D2DAC); + (*(s16*)&D_801D363C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + break; + case 0x4E: + D_801D2DD0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x2B: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D363C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D35C4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D363C) = 3; + break; + case 0x34: + (*(s16*)&D_801D363C) = 3; + D_801D2978 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D2DA8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D363C) = 3; + D_801D2978 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D363C) = 3; + D_801D2978 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D2978 = *(s32 *)(D_801D2978 + 4); + return; + case 0x37: + (*(s16*)&D_801D363C) = 3; + D_801D2D94 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D2D98 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D363C) = 3; + D_801D2D9C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D2DA0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D363C) = 3; + D_801D2D94 = w1; + D_801D2D98 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D363C) = 3; + D_801D2D9C = w2; + D_801D2DA0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + case 0x43: + D_801D2DBC = (s32)func_8017A3D8; + D_801D2DC4 = 0; + (*(s16*)&D_801D363C) = 5; + D_801D2DC0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D363C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D363C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D363C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D2DD4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D363C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D2DD4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D363C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D2DD4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D363C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D2DD4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D363C) = 3; + break; + default: + break; + } +Lend: + D_801D2978 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D2DA4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D2DA4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D2DA4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D2DA4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D2DCC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D2DCC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D2D88; + +s32 func_8017A3B0(void) { + switch (D_801D2D88) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D2DC4; +extern short D_801D2DC0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D2DC4) { + case 0: + func_800D0CA0(1); + D_801D2DC4 = D_801D2DC4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D2DC0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D2DC4 = D_801D2DC4 + 1; + if (D_801D2DC4 < 0x1E) { + return 0; + } + D_801D2DC4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D2E04; + extern s16 D_801D2E06; + extern s16 D_801D2E08; + extern s16 D_801D2DFC; + extern s16 D_801D2DFE; + extern s16 D_801D2E00; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D2E04, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D2E06, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D2E08, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D2DFC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D2DFE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D2E00, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D2D8C; +extern u16 D_801D2E0C; +extern u16 D_801D2E0E; +extern u16 D_801D2E10; +extern s16 D_801D35C8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D35C8 = 0; + D_801D2D8C = 0; + D_801D2E0C = D_80126B5E; + D_801D2E0E = D_80126B62; + D_801D2E10 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018ED84[]; + extern s16 D_801D2E04; + extern s16 D_801D2DFC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018ED84[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018ED84[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D2E04; + s16 *p78C = &D_801D2DFC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D35C8 = 1; + D_801D2D8C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D2DAC; + extern SV4_8017B368 D_801D2DB4; + extern s16 D_801D2E04; + extern s16 D_801D2DFC; + extern u16 D_8018ED84; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D2DAC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D2DB4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018ED84)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018ED84)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D2E04) = loc0; + (*(SV4_8017B368 *)&D_801D2DFC) = loc1; + D_801D35C8 = 1; + D_801D2D8C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018ED84[]; + extern s16 D_801D2E04; + extern s16 D_801D2E06; + extern s16 D_801D2E08; + extern s16 D_801D2DFC; + extern s16 D_801D2DFE; + extern s16 D_801D2E00; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018ED84[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018ED84[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D2E04; + s16 *p78C = &D_801D2DFC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D2E06; + v798 = D_801D2E08; + v78C = *p78C; + v78E = D_801D2DFE; + v790 = D_801D2E00; + __asm__ __volatile__(""); + D_801D35C8 = 1; + D_801D2D8C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D2D8C; +extern s16 D_801D2E04; +extern s16 D_801D2E06; +extern s16 D_801D2E08; +extern s16 D_801D2DFC; +extern s16 D_801D2DFE; +extern s16 D_801D2E00; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D2D8C = 0; + D_801D2E04 = (s16) D_80114F30; + D_801D2E06 = (s16) D_80114F34; + D_801D2E08 = (s16) D_80114F38; + D_801D2DFC = (s16) D_80114F24; + D_801D2DFE = (s16) D_80114F28; + D_801D2E00 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D2E1C; +extern s16 D_801D2E1E; +extern s16 D_801D2E20; +extern s16 D_801D2E24; +extern s16 D_801D2E26; +extern s16 D_801D2E28; + +void func_8017B824(void) { + D_801D2E1C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D2E1E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D2E20 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D2E24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D2E26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D2E28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D2E1C; +extern s16 D_801D2E1E; +extern s16 D_801D2E20; +extern s16 D_801D2E24; +extern s16 D_801D2E26; +extern s16 D_801D2E28; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D2E1C; + D_80114F34 = D_801D2E1E; + D_80114F38 = D_801D2E20; + D_80114F24 = D_801D2E24; + D_80114F28 = D_801D2E26; + D_80114F2C = D_801D2E28; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D2E04), src[8..15] -> (*(S8_8017B8E8 *)&D_801D2DFC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D2E04) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D2DFC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D2E0C; +extern u16 D_801D2E0E; +extern u16 D_801D2E10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D2D8C; +extern short D_801D2E14; +extern short D_801D2E16; +extern short D_801D2E18; +extern s16 D_801D2E04; +extern s16 D_801D2E06; +extern s16 D_801D2E08; +extern s16 D_801D2DFC; +extern s16 D_801D2DFE; +extern s16 D_801D2E00; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D2E0C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D2E0E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D2E10); + (*(s16 *)&D_801D2E14) = buf[0]; + (*(s16 *)&D_801D2E16) = buf[1]; + (*(s16 *)&D_801D2E18) = buf[2]; + D_801D2E04 = D_80114F30 + buf[0]; + D_801D2D8C = 0; + D_801D2E06 = D_80114F34 + buf[1]; + D_801D2E08 = D_80114F38 + buf[2]; + D_801D2DFC = D_80114F24 + buf[0]; + D_801D2DFE = D_80114F28 + buf[1]; + D_801D2E00 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D2DAC; +extern SV4 D_801D2DB4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D2DB4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D2DAC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D2DB4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D2DB4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D2DAC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D2DB4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D2DD4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D2DD4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D2D8C; +extern s16 D_801D35C8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D2D8C = D_801D2D8C + 1; + if (D_801D2D8C >= 0x1F) { + D_801D35C8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D2D8C; +extern s16 D_801D35C8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D2D8C = D_801D2D8C + 1; + if (0x18 < D_801D2D8C) { + func_8012A4BC(); + D_801D35C8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D2D8C; +extern void (*D_801D2DD0)(void); +extern short D_801D2E14; +extern short D_801D2E16; +extern short D_801D2E18; +extern s16 D_801D35C8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D2D8C = D_801D2D8C + 1; + if (D_801D2D8C >= 0x19) { + if (D_801D2DD0 != 0) { + (*D_801D2DD0)(); + } else { + D_80114F30 = D_80114F30 + D_801D2E14; + D_80114F34 = D_80114F34 + D_801D2E16; + D_80114F38 = D_80114F38 + D_801D2E18; + D_80114F24 = D_80114F24 + D_801D2E14; + D_80114F28 = D_80114F28 + D_801D2E16; + D_80114F2C = D_80114F2C + D_801D2E18; + func_8012A4BC(); + } + D_801D35C8 = 0; + } +} + + + +extern void (*D_8018EE24[])(void); + +void func_8017BE60(void *a0) { + D_8018EE24[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017C738); + + +extern void (*D_8018EF40[])(void); + +void func_8017C8B8(void *a0) { + D_8018EF40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CBD4); + +extern void func_8012C218(void *a0); + void func_8017CC60(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CCD4); + + +extern void (*D_8018EF98[])(void); + +void func_8017CD10(void *a0) { + D_8018EF98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D030); + + +extern void (*D_8018EFAC[])(void); + +void func_8017D33C(void *a0) { + D_8018EFAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D588); + + +extern void (*D_8018EFC0[])(void); + +void func_8017D5DC(void *a0) { + D_8018EFC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E7C4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E810); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E850); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E89C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E8DC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E91C); + + +extern void (*D_8018F1A4[])(void); + +void func_8017E968(void *a0) { + D_8018F1A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017E9A4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E9E8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018F1AC[])(void); + +void func_8017EA0C(void *a0) { + D_8018F1AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EA48); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EA88); + +extern void func_800D1EBC(void); + void func_8017EB14(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018F1B8[])(void); + +void func_8017EB34(void *a0) { + D_8018F1B8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EB70(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + + +extern void (*D_8018F1C4[])(void); + +void func_8017EBEC(void *a0) { + D_8018F1C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EC28); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EC68); + + +extern void (*D_8018F1D0[])(void); + +void func_8017ED00(void *a0) { + D_8018F1D0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017ED3C); + +s32 func_8017ED78(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017ED80); + +extern void func_800D1EBC(void); + void func_8017EDE8(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018F1E0[])(void); + +void func_8017EE08(void *a0) { + D_8018F1E0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EE44); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F1EC; + +void func_8017EEDC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F1EC, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F1F0; + +void func_8017EF04(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F1F0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EF2C); + + +extern void (*D_8018F204[])(void); + +void func_8017EF54(void *a0) { + D_8018F204[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EF90); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017EFD8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F02C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F054); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F0F0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F188); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F220); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F2B4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F34C); + + +extern void (*D_8018F20C[])(void); + +void func_8017F3E4(void *a0) { + D_8018F20C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F420); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F558); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F608); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F794); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F844); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F8F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017F9AC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017FB44); + +extern s32 resLoad_lastId; + s32 func_8017FB74(void) { + return (u32)(resLoad_lastId ^ 0x39) != 0; + } + + + +extern s32 resLoad_lastId; +extern void func_8002D4C8(s32 arg0, s32 arg1); + +void func_8017FB8C(void) { + func_8002D4C8(0x13C, 0); + resLoad_lastId = 0x39; +} + + +extern void func_8017FD30(void); + void func_8017FBBC(void) { + func_8017FD30(); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017FBDC); + +extern s32 D_801D30C8; + extern s32 D_801D30C0; + extern s32 D_801D30C4; + void func_8017FD0C(void) { + D_801D30C8 = 0; + D_801D30C0 = 1; + D_801D30C4 = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017FD30); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017FF68); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8017FFC8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180040); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801A4C2C[]; + +extern s32 func_8018030C(s32 a0); + +void func_801801C4(int param_1) +{ + D_801A4C2C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8018030C)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180214); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180294); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018030C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018034C); + + +extern void (*D_801A4C88[])(void); + +void func_80180568(void *a0) { + D_801A4C88[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801805A4(void) { +} + +void func_801805AC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801805B4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801806E0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180718); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018077C); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180804(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x10; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018082C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180860); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801808D0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180930); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180970); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180B4C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180BAC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180C04); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180D80); + + +extern void (*D_801A4DA4[])(void); + +void func_80180E18(void *a0) { + D_801A4DA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180E54); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80180F54); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181044); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018107C); + +void func_801810C8(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801810D0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801811A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801811F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181264); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801812FC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801813B8); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801813E0(s32 *a0) { + *(s16 *)((char *)a0 + 0xFC) = 0; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181404); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018144C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801814A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181520); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801815F0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181760(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x10; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x1); + } + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181788(s32 *a0) { + *(s32 *)((char *)a0 + 0x14) = 0x80000; + *(s32 *)((char *)a0 + 0x1C) = 0x50; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 2); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801817B8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181824); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801819F0(void *a0) { + *(s32 *)((s32)a0 + 0x14) = 0xFFF80000; + *(s32 *)((s32)a0 + 0x1C) = 0x50; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); + } + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181A20(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181A40); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181AD0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181B48); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181B90); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181BE4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181CCC); + +void func_80181D84(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181D8C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181DFC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181E64); + +void func_80181ED4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80181EDC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182060); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182194); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182230); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018226C(void *a0) { + *(s32 *)((char *)a0 + 0x1c) = 0x20; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x4); + } + + +extern void func_80178B18(s32 a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern M2C_UNK D_801A4E88; + +void func_80182294(void *arg0) { + func_80178B18((s32)arg0, (s32)&D_801A4E88); + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x5); +} + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801822D0(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x6); + } + + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801A4ED4[]; + +extern s32 func_80182438(s32 a0); + +void func_801822F0(int param_1) +{ + D_801A4ED4[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80182438)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182340); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801823F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182438); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018248C); + + +extern void (*D_801A4F00[])(void); + +void func_801825EC(void *a0) { + D_801A4F00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182628); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182688); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182794); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801828A0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801828E0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018292C); + +void func_801829B4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801829BC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182C14); + + +extern void (*D_801A4FA4[])(void); + +void func_80182C68(void *a0) { + D_801A4FA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182CA4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182D90); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182E50); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182EA0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182F88); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80182FD4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801833F0); + +void func_80183910(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183918); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018393C); + +extern s16 D_801D328C; + extern s16 D_801D328E; + extern s16 D_801D3290; + extern s16 D_801D3292; + void func_801839DC(s32 arg0, s32 arg1, s32 arg2) { + D_801D328C = *(u16 *)((s32)arg0 + 0x0); + D_801D328E = *(u16 *)((s32)arg0 + 0x2); + D_801D3290 = arg1; + D_801D3292 = arg2; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183A0C); + +extern s16 D_801D3292; + void func_80183A84(s32 arg0) { + *(s16 *)((s32)&D_801D3292 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183AA0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183AF8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183BCC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183C08); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183C54); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183D30); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80183FF4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184018); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184040); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801840C8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184134); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801841A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018421C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184268); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184384); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801843C0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801844D4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801847B8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184A50); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80184BD8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185084); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185218); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801855C8); + + +extern void (*D_801A764C[])(void); + +void func_801856B4(void *a0) { + D_801A764C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A7700[])(void); + +void func_801856F0(void *a0) { + D_801A7700[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018572C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185744); + +void func_801857E8(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185804); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185888); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801858C4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801858F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185978); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185A3C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185B1C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185B8C); + +void func_80185C68(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185C70); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185D28); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185DEC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185E40); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185EBC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80185FA0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018606C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186144); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186210); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801AE158; + void func_80186318(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + func_8012A828((int)arg0, (int)&D_801AE158); + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186344); + +void func_801863B4(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 4; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801863C0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801865A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186668); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186740); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801868E8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186994); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801869FC); + +void func_80186A8C(void *a0) { + *(s16 *)((char *)a0 + 0x5c) = 0; + *(s16 *)((char *)a0 + 0x98) = 0; + *(s32 *)((char *)a0 + 0x1c) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186A9C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186BCC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186C2C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186C8C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186D20); + +extern void (*D_801A973C[])(void); + +void func_80186D94(void *a0) { + D_801A973C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186DD0); + +extern void func_8012C218(void *a0); + void func_80186E88(s32 arg0) { + s32 *p = *(s32 **)((s32)arg0 + 0x64); + if (*(s16 *)((s32)p + 0x36) != *(s16 *)((s32)arg0 + 0xfc)) { + ((void (*)(void))func_8012C218)(); + } + } + + + +extern void (*D_801A9A58[])(void); + +void func_80186EC4(void *a0) { + D_801A9A58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186F00); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80186F78); + +extern s32 D_801A9788; + void func_80187094(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + *(s32 *)((s32)a0 + 0xcc) = &D_801A9788; + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801870AC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187140); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187190); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801873A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187414); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187454); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187490); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018754C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801875F0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801876C4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187780); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801879E8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187AD4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187C6C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80187DE4); + + +extern void (*D_801AE45C[])(void); + +void func_801881C8(void *a0) { + D_801AE45C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188204); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188300); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188354); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801884D8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801886FC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188AB0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188CF0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80188F58); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189100); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018934C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189498); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189550); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801896A4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189750); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189800); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_801898E8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189A04); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189AE4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189BBC); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80189C24(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189C60); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189D04); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189DC4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189DF8); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80189E54(s32 param_1) { + if (func_80153BD8(param_1)) { + ((void (*)(s32))func_80153BF0)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189E8C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189EE8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_80189FC0); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A054); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A120); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A1F8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A294); + +void func_8018A2EC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A2F4); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A394); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A3E8); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A47C); + + +extern s32 func_8012BEE8(s32 a0); + +void func_8018A4C4(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A4EC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A538); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A624); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A6A8); + +extern void func_8012CBCC(s32 a0); + void func_8018A7B4(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A7EC); + + +extern void (*D_801CC9AC[])(void); + +void func_8018A858(void *a0) { + D_801CC9AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A894); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A90C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018A9BC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AA74); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AB34); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AC00); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AE00); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AE88); + + +extern void (*D_801D03D8[])(void); + +void func_8018AF0C(void *a0) { + D_801D03D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018AF48); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018B13C); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018B1EC); + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018B29C); + +void func_8018B34C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80178D40", func_8018B354); + + diff --git a/src/ov_SC02_031/ov_SC02_031_jr_801734BC.c b/src/ov_SC02_031/ov_SC02_031_jr_801734BC.c index 0f6f40a37..2238de45e 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_801734BC.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_801734BC.c @@ -3104,1382 +3104,3 @@ void func_80178D18(void) { D_801B7B0C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B751C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B751C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B751C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B751C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B7544; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B7544 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B7500; - -s32 func_8017A3B0(void) { - switch (D_801B7500) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B753C; -extern short D_801B7538; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B753C) { - case 0: - func_800D0CA0(1); - D_801B753C = D_801B753C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B7538; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B753C = D_801B753C + 1; - if (D_801B753C < 0x1E) { - return 0; - } - D_801B753C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B757C; - extern s16 D_801B757E; - extern s16 D_801B7580; - extern s16 D_801B7574; - extern s16 D_801B7576; - extern s16 D_801B7578; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B757C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B757E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B7580, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B7574, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B7576, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B7578, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B7504; -extern u16 D_801B7584; -extern u16 D_801B7586; -extern u16 D_801B7588; -extern s16 D_801B7A98; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B7A98 = 0; - D_801B7504 = 0; - D_801B7584 = D_80126B5E; - D_801B7586 = D_80126B62; - D_801B7588 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801885B0[]; - extern s16 D_801B757C; - extern s16 D_801B7574; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801885B0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801885B0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B757C; - s16 *p78C = &D_801B7574; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B7A98 = 1; - D_801B7504 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B7524; - extern SV4_8017B368 D_801B752C; - extern s16 D_801B757C; - extern s16 D_801B7574; - extern u16 D_801885B0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B7524; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B752C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801885B0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801885B0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B757C) = loc0; - (*(SV4_8017B368 *)&D_801B7574) = loc1; - D_801B7A98 = 1; - D_801B7504 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801885B0[]; - extern s16 D_801B757C; - extern s16 D_801B757E; - extern s16 D_801B7580; - extern s16 D_801B7574; - extern s16 D_801B7576; - extern s16 D_801B7578; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801885B0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801885B0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B757C; - s16 *p78C = &D_801B7574; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B757E; - v798 = D_801B7580; - v78C = *p78C; - v78E = D_801B7576; - v790 = D_801B7578; - __asm__ __volatile__(""); - D_801B7A98 = 1; - D_801B7504 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B7504; -extern s16 D_801B757C; -extern s16 D_801B757E; -extern s16 D_801B7580; -extern s16 D_801B7574; -extern s16 D_801B7576; -extern s16 D_801B7578; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B7504 = 0; - D_801B757C = (s16) D_80114F30; - D_801B757E = (s16) D_80114F34; - D_801B7580 = (s16) D_80114F38; - D_801B7574 = (s16) D_80114F24; - D_801B7576 = (s16) D_80114F28; - D_801B7578 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B7594; -extern s16 D_801B7596; -extern s16 D_801B7598; -extern s16 D_801B759C; -extern s16 D_801B759E; -extern s16 D_801B75A0; - -void func_8017B824(void) { - D_801B7594 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B7596 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B7598 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B759C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B759E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B75A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B7594; -extern s16 D_801B7596; -extern s16 D_801B7598; -extern s16 D_801B759C; -extern s16 D_801B759E; -extern s16 D_801B75A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B7594; - D_80114F34 = D_801B7596; - D_80114F38 = D_801B7598; - D_80114F24 = D_801B759C; - D_80114F28 = D_801B759E; - D_80114F2C = D_801B75A0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B757C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B7574) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B757C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B7574) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B7584; -extern u16 D_801B7586; -extern u16 D_801B7588; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B7504; -extern short D_801B758C; -extern short D_801B758E; -extern short D_801B7590; -extern s16 D_801B757C; -extern s16 D_801B757E; -extern s16 D_801B7580; -extern s16 D_801B7574; -extern s16 D_801B7576; -extern s16 D_801B7578; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B7584); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B7586); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B7588); - (*(s16 *)&D_801B758C) = buf[0]; - (*(s16 *)&D_801B758E) = buf[1]; - (*(s16 *)&D_801B7590) = buf[2]; - D_801B757C = D_80114F30 + buf[0]; - D_801B7504 = 0; - D_801B757E = D_80114F34 + buf[1]; - D_801B7580 = D_80114F38 + buf[2]; - D_801B7574 = D_80114F24 + buf[0]; - D_801B7576 = D_80114F28 + buf[1]; - D_801B7578 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B7524; -extern SV4 D_801B752C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B752C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B7524 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B752C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B752C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B7524) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B752C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B754C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B754C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B7504; -extern s16 D_801B7A98; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B7504 = D_801B7504 + 1; - if (D_801B7504 >= 0x1F) { - D_801B7A98 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B7504; -extern s16 D_801B7A98; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B7504 = D_801B7504 + 1; - if (0x18 < D_801B7504) { - func_8012A4BC(); - D_801B7A98 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B7504; -extern void (*D_801B7548)(void); -extern short D_801B758C; -extern short D_801B758E; -extern short D_801B7590; -extern s16 D_801B7A98; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B7504 = D_801B7504 + 1; - if (D_801B7504 >= 0x19) { - if (D_801B7548 != 0) { - (*D_801B7548)(); - } else { - D_80114F30 = D_80114F30 + D_801B758C; - D_80114F34 = D_80114F34 + D_801B758E; - D_80114F38 = D_80114F38 + D_801B7590; - D_80114F24 = D_80114F24 + D_801B758C; - D_80114F28 = D_80114F28 + D_801B758E; - D_80114F2C = D_80114F2C + D_801B7590; - func_8012A4BC(); - } - D_801B7A98 = 0; - } -} - - - -extern void (*D_80188650[])(void); - -void func_8017BE60(void *a0) { - D_80188650[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017BF88); - - -extern void (*D_80188668[])(void); - -void func_8017C0E4(void *a0) { - D_80188668[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C180); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C2B0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C63C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017C9FC); - - -extern void (*D_80188780[])(void); - -void func_8017CB7C(void *a0) { - D_80188780[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CBB8); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CC04); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CCF8); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CD78); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CE2C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CE98); - -extern void func_8012C218(void *a0); - void func_8017CF24(void) { - ((void (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CF44); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017CF98); - - -extern void (*D_801887D8[])(void); - -void func_8017CFD4(void *a0) { - D_801887D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D010); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D060); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D140); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D2A8); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D2F4); - - -extern void (*D_801887EC[])(void); - -void func_8017D600(void *a0) { - D_801887EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D63C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D67C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D6EC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D778); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D84C); - - -extern void (*D_80188800[])(void); - -void func_8017D8A0(void *a0) { - D_80188800[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D8DC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D990); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017D9EC); - - -extern void (*D_801888B8[])(void); - -void func_8017DB5C(void *a0) { - D_801888B8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DB98); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DBD8); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DC54); - -void func_8017DCB4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DCBC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DCE4); - -extern s16 D_80126B0C; - s32 func_8017DD00(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DD10); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DD70); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017DE3C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E008); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E064); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E0C0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E124); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E1D4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E298); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E358); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E39C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E538); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017E73C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017EB30); - - -extern void (*D_80188C24[])(void); - -void func_8017ECB0(void *a0) { - D_80188C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017ECEC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017ED60); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017EE3C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F050); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F124); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F1F4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F24C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F344); - - -extern void (*D_80188C50[])(void); - -void func_8017F384(void *a0) { - D_80188C50[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F3C0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F400); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F480); - -void func_8017F4E0(void) { -} - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F4E8); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F510); - -extern s16 D_80126B0C; - s32 func_8017F52C(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F53C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F590); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8017F5B4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", listCdBuffer); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_80180D50(void) { - func_80029124(0x90, 1); - } - - - -extern void (*D_80188D6C[])(void); - -void func_80180D74(void *a0) { - D_80188D6C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80180DB0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180DF4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188D74[])(void); - -void func_80180E18(void *a0) { - D_80188D74[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80180E54); - - -extern void (*D_80188D80[])(void); - -void func_80180EE0(void *a0) { - D_80188D80[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80180F1C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80180F5C); - -extern void func_800D1EBC(void); - void func_80180FF0(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188D8C[])(void); - -void func_80181010(void *a0) { - D_80188D8C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018104C); - - -extern void (*D_80188D98[])(void); - -void func_801810F4(void *a0) { - D_80188D98[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181130); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181170); - -extern void func_800D1EBC(void); - void func_80181204(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_80188DA4; - -void func_80181224(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80188DA4, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_80188DB0; - -void func_8018124C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80188DB0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181274); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018129C); - - -extern void (*D_80188DD0[])(void); - -void func_8018133C(void *a0) { - D_80188DD0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181378); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801814E4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801816C0); - -extern void (*D_80188DE8[])(void); - -void func_80181868(void *a0) { - D_80188DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801818A4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181938); - - -extern void (*D_80188E00[])(void); - -void func_801819E8(void *a0) { - D_80188E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80181A24(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181A44); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181AE0); - - -extern void (*D_80188E08[])(void); - -void func_80181B78(void *a0) { - D_80188E08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181BB4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181C2C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181DEC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181E88); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181EF0); - - -extern void (*D_80188E50[])(void); - -void func_80181F20(void *a0) { - D_80188E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181F5C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80181FA4); - -void func_80182070(void) { -} - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182078); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801820E0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182174); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801821F4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182328); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801824E4); - -extern s32 func_800D0CE0(void); - extern void func_8012C218(void *a0); - void func_801825E0(s32 param_1) { - if (((int (*)(void))func_800D0CE0)() != 0) { - ((void (*)(s32))func_8012C218)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182618); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182674); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182848); - -void func_80182994(void *a0) { - *(short *)((char *)a0 + 0xfe) = 1; - } - - -void func_801829A0(void *a0) { - *(s16 *)((s32)a0 + 0xFE) = 0; - } - - -void func_801829A8(void *a0) { - *(u16 *)((s32)a0 + 0xfe) ^= 1; - } - - - -extern void (*D_80188FE0[])(void); - -void func_801829BC(void *a0) { - D_80188FE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801829F8); - -extern void func_8012C218(void *a0); - void func_80182A7C(s32 arg0) { - s32 v0; - if (*(s16 *)(arg0 + 0xfc) != *(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36)) { - ((void (*)(void))func_8012C218)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182AB4); - - -extern void (*D_80188FE8[])(void); - -void func_80182B64(void *a0) { - D_80188FE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182BA0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182BE0); - - -extern void (*D_80189048[])(void); - -void func_80182C24(void *a0) { - D_80189048[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182C60); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80182CF4); - -extern void func_801832D0(s32 arg0, s32 arg1); - void func_80183020(void) { - func_801832D0(-0x380, 0); - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183044); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183098); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801830EC); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801831B4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801832D0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801832F4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183314); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183394); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183458); - -DEFINE_func_80183808() /* dedup: shared engine-core @0x80183808 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183810); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183A20); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183A74); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183AC8); - -extern s32 func_800D0CE0(void); - s32 func_80183B90(void) { - return func_800D0CE0() != 0; - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183BB0); - - -extern void (*D_80189420[])(void); - -void func_80183D84(void *a0) { - D_80189420[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80183DC0); - - -extern void (*D_80189438[])(void); - -void func_80183FEC(void *a0) { - D_80189438[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801840D0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018418C); - - -extern void (*D_8018949C[])(void); - -void func_80184238(void *a0) { - D_8018949C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184274); - -void func_801842D8(void) { -} - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_80189484; - -void func_801842E0(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80189484); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184318); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184358); - - -extern void (*D_801AB130[])(void); - -void func_801843B4(void *a0) { - D_801AB130[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801843F0); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801844C4); - -void func_801844EC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801844F4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184640); - -extern void func_8012C218(void *a0); - void func_80184760(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018478C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018479C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801847AC); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_801847EC(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184820); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184844); - - -extern void (*D_801AB158[])(void); - -void func_801848A8(void *a0) { - D_801AB158[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_801848E4); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_8018496C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184A2C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184A9C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_801734BC", func_80184B94); - diff --git a/src/ov_SC02_031/ov_SC02_031_jr_80178D40.c b/src/ov_SC02_031/ov_SC02_031_jr_80178D40.c new file mode 100644 index 000000000..96cb2bc11 --- /dev/null +++ b/src/ov_SC02_031/ov_SC02_031_jr_80178D40.c @@ -0,0 +1,4849 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187E58[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B6870; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187E4C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187E90[]; +extern unsigned short D_80187E98[]; +extern unsigned short D_80187EA0[]; +extern unsigned char D_801B6878[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B6870; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187EA8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B69AC; +extern M2C_UNK D_801B69B0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B6938; +extern void (*D_80187ED8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B69B4[]; +extern u8 D_801B69BC[]; +extern u8 D_801B696C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187EE0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187EFC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187F04[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187F6C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187F10; +extern u8 D_80187F1C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187FA0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187FA8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187FFC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188030[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188020[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018804C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801880C4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801880CC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801880D4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801880DC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801880E4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801880EC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801880F8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188104[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188110[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188120[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188130[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188138[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188140[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188148[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188150[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188158[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188160[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188168[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188170[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188178[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188180[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188188[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188190[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188198[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801881A0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801881A8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801881B0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801881B8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801881C0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801881C8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801881D0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801881D8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801881E0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188224[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801881E8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188254[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188290[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801882E8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801882F8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188300[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188468[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188474[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B5FA0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B7A98; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B70F0; +extern short D_801B7B0C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B7B0C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B7B0C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B70F0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B7B0C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B7A68 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B7A68 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B7B0C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B7B0C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B754C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B70F4; + extern s32 D_801B7508; + extern s16 D_801B750C; + extern s16 D_801B7510; + extern s16 D_801B7514; + extern s16 D_801B7518; + extern s32 D_801B7520; + extern s32 D_801B7524; + extern s32 D_801B7534; + extern s16 D_801B7538; + extern s16 D_801B753C; + extern s32 D_801B7540; + extern s32 D_801B7548; + extern s32 D_801B754C[10]; + extern s32 D_801B79B0; + extern s16 D_801B7A68; + extern s32 D_801B7A94; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B7A68; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B7508); + D_801B7508 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B7514, D_801B7518 ? 0x48 : 0x40); + (*(s16*)&D_801B7B0C) = 2; + break; + case 0: + func_80179B28(D_801B7508); + D_801B7508 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B750C, D_801B7510 ? 0x48 : 0x40); + (*(s16*)&D_801B7B0C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B79B0 != 0) { + func_80179B28(D_801B7508); + D_801B7508 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B750C, D_801B7510 ? 0x48 : 0x40); + (*(s16*)&D_801B7B0C) = 1; + } else { + (*(s16*)&D_801B7B0C) = 3; + } + break; + case 0x32: + func_80179B28(D_801B7508); + D_801B7508 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B750C, + D_801B7510 ? 0x48 : 0x40); + (*(s16*)&D_801B7B0C) = 1; + break; + case 2: + func_80179B28(D_801B7508); + if (D_801B7520 != 0) { + D_801B70F0 = D_801B7520; + D_801B7520 = 0; + (*(s16*)&D_801B7B0C) = 3; + return; + } + (*(s16*)&D_801B7B0C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B7B0C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B7B0C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B7B0C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x1B: + D_801B7540 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B7B0C) = 4; + D_801B70F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B7B0C) = 5; + D_801B7534 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B7534 = (s32)func_8017A3B0; + (*(s16*)&D_801B7B0C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x24: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B7B0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B7B0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B7B0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B7B0C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B7B0C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B7B0C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B7B0C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B7524); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B7524); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B7524); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B7524); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x4E: + D_801B7548 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x2B: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B7B0C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B7A94 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x34: + (*(s16*)&D_801B7B0C) = 3; + D_801B70F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B7520 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B7B0C) = 3; + D_801B70F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B7B0C) = 3; + D_801B70F0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B70F0 = *(s32 *)(D_801B70F0 + 4); + return; + case 0x37: + (*(s16*)&D_801B7B0C) = 3; + D_801B750C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B7510 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B7B0C) = 3; + D_801B7514 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B7518 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B7B0C) = 3; + D_801B750C = w1; + D_801B7510 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B7B0C) = 3; + D_801B7514 = w2; + D_801B7518 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x43: + D_801B7534 = (s32)func_8017A3D8; + D_801B753C = 0; + (*(s16*)&D_801B7B0C) = 5; + D_801B7538 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B7B0C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B7B0C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B754C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B7B0C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B754C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B7B0C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B754C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B7B0C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B754C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B7B0C) = 3; + break; + default: + break; + } +Lend: + D_801B70F0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B751C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B751C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B751C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B751C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B7544; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B7544 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B7500; + +s32 func_8017A3B0(void) { + switch (D_801B7500) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B753C; +extern short D_801B7538; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B753C) { + case 0: + func_800D0CA0(1); + D_801B753C = D_801B753C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B7538; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B753C = D_801B753C + 1; + if (D_801B753C < 0x1E) { + return 0; + } + D_801B753C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B757C; + extern s16 D_801B757E; + extern s16 D_801B7580; + extern s16 D_801B7574; + extern s16 D_801B7576; + extern s16 D_801B7578; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B757C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B757E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B7580, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B7574, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B7576, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B7578, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B7504; +extern u16 D_801B7584; +extern u16 D_801B7586; +extern u16 D_801B7588; +extern s16 D_801B7A98; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B7A98 = 0; + D_801B7504 = 0; + D_801B7584 = D_80126B5E; + D_801B7586 = D_80126B62; + D_801B7588 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801885B0[]; + extern s16 D_801B757C; + extern s16 D_801B7574; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801885B0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801885B0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B757C; + s16 *p78C = &D_801B7574; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B7A98 = 1; + D_801B7504 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B7524; + extern SV4_8017B368 D_801B752C; + extern s16 D_801B757C; + extern s16 D_801B7574; + extern u16 D_801885B0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B7524; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B752C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801885B0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801885B0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B757C) = loc0; + (*(SV4_8017B368 *)&D_801B7574) = loc1; + D_801B7A98 = 1; + D_801B7504 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801885B0[]; + extern s16 D_801B757C; + extern s16 D_801B757E; + extern s16 D_801B7580; + extern s16 D_801B7574; + extern s16 D_801B7576; + extern s16 D_801B7578; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801885B0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801885B0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B757C; + s16 *p78C = &D_801B7574; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B757E; + v798 = D_801B7580; + v78C = *p78C; + v78E = D_801B7576; + v790 = D_801B7578; + __asm__ __volatile__(""); + D_801B7A98 = 1; + D_801B7504 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B7504; +extern s16 D_801B757C; +extern s16 D_801B757E; +extern s16 D_801B7580; +extern s16 D_801B7574; +extern s16 D_801B7576; +extern s16 D_801B7578; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B7504 = 0; + D_801B757C = (s16) D_80114F30; + D_801B757E = (s16) D_80114F34; + D_801B7580 = (s16) D_80114F38; + D_801B7574 = (s16) D_80114F24; + D_801B7576 = (s16) D_80114F28; + D_801B7578 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B7594; +extern s16 D_801B7596; +extern s16 D_801B7598; +extern s16 D_801B759C; +extern s16 D_801B759E; +extern s16 D_801B75A0; + +void func_8017B824(void) { + D_801B7594 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B7596 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B7598 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B759C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B759E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B75A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B7594; +extern s16 D_801B7596; +extern s16 D_801B7598; +extern s16 D_801B759C; +extern s16 D_801B759E; +extern s16 D_801B75A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B7594; + D_80114F34 = D_801B7596; + D_80114F38 = D_801B7598; + D_80114F24 = D_801B759C; + D_80114F28 = D_801B759E; + D_80114F2C = D_801B75A0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B757C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B7574) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B757C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B7574) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B7584; +extern u16 D_801B7586; +extern u16 D_801B7588; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B7504; +extern short D_801B758C; +extern short D_801B758E; +extern short D_801B7590; +extern s16 D_801B757C; +extern s16 D_801B757E; +extern s16 D_801B7580; +extern s16 D_801B7574; +extern s16 D_801B7576; +extern s16 D_801B7578; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B7584); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B7586); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B7588); + (*(s16 *)&D_801B758C) = buf[0]; + (*(s16 *)&D_801B758E) = buf[1]; + (*(s16 *)&D_801B7590) = buf[2]; + D_801B757C = D_80114F30 + buf[0]; + D_801B7504 = 0; + D_801B757E = D_80114F34 + buf[1]; + D_801B7580 = D_80114F38 + buf[2]; + D_801B7574 = D_80114F24 + buf[0]; + D_801B7576 = D_80114F28 + buf[1]; + D_801B7578 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B7524; +extern SV4 D_801B752C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B752C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B7524 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B752C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B752C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B7524) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B752C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B754C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B754C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B7504; +extern s16 D_801B7A98; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B7504 = D_801B7504 + 1; + if (D_801B7504 >= 0x1F) { + D_801B7A98 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B7504; +extern s16 D_801B7A98; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B7504 = D_801B7504 + 1; + if (0x18 < D_801B7504) { + func_8012A4BC(); + D_801B7A98 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B7504; +extern void (*D_801B7548)(void); +extern short D_801B758C; +extern short D_801B758E; +extern short D_801B7590; +extern s16 D_801B7A98; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B7504 = D_801B7504 + 1; + if (D_801B7504 >= 0x19) { + if (D_801B7548 != 0) { + (*D_801B7548)(); + } else { + D_80114F30 = D_80114F30 + D_801B758C; + D_80114F34 = D_80114F34 + D_801B758E; + D_80114F38 = D_80114F38 + D_801B7590; + D_80114F24 = D_80114F24 + D_801B758C; + D_80114F28 = D_80114F28 + D_801B758E; + D_80114F2C = D_80114F2C + D_801B7590; + func_8012A4BC(); + } + D_801B7A98 = 0; + } +} + + + +extern void (*D_80188650[])(void); + +void func_8017BE60(void *a0) { + D_80188650[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017BF88); + + +extern void (*D_80188668[])(void); + +void func_8017C0E4(void *a0) { + D_80188668[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C180); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C2B0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C63C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017C9FC); + + +extern void (*D_80188780[])(void); + +void func_8017CB7C(void *a0) { + D_80188780[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CBB8); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CC04); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CCF8); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CD78); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CE2C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CE98); + +extern void func_8012C218(void *a0); + void func_8017CF24(void) { + ((void (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CF44); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017CF98); + + +extern void (*D_801887D8[])(void); + +void func_8017CFD4(void *a0) { + D_801887D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D010); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D060); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D140); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D2A8); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D2F4); + + +extern void (*D_801887EC[])(void); + +void func_8017D600(void *a0) { + D_801887EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D63C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D67C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D6EC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D778); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D84C); + + +extern void (*D_80188800[])(void); + +void func_8017D8A0(void *a0) { + D_80188800[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D8DC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D990); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017D9EC); + + +extern void (*D_801888B8[])(void); + +void func_8017DB5C(void *a0) { + D_801888B8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DB98); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DBD8); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DC54); + +void func_8017DCB4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DCBC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DCE4); + +extern s16 D_80126B0C; + s32 func_8017DD00(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DD10); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DD70); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017DE3C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E008); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E064); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E0C0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E124); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E1D4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E298); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E358); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E39C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E538); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017E73C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017EB30); + + +extern void (*D_80188C24[])(void); + +void func_8017ECB0(void *a0) { + D_80188C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017ECEC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017ED60); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017EE3C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F050); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F124); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F1F4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F24C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F344); + + +extern void (*D_80188C50[])(void); + +void func_8017F384(void *a0) { + D_80188C50[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F3C0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F400); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F480); + +void func_8017F4E0(void) { +} + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F4E8); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F510); + +extern s16 D_80126B0C; + s32 func_8017F52C(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F53C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F590); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8017F5B4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", listCdBuffer); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_80180D50(void) { + func_80029124(0x90, 1); + } + + + +extern void (*D_80188D6C[])(void); + +void func_80180D74(void *a0) { + D_80188D6C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80180DB0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180DF4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188D74[])(void); + +void func_80180E18(void *a0) { + D_80188D74[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80180E54); + + +extern void (*D_80188D80[])(void); + +void func_80180EE0(void *a0) { + D_80188D80[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80180F1C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80180F5C); + +extern void func_800D1EBC(void); + void func_80180FF0(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188D8C[])(void); + +void func_80181010(void *a0) { + D_80188D8C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018104C); + + +extern void (*D_80188D98[])(void); + +void func_801810F4(void *a0) { + D_80188D98[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181130); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181170); + +extern void func_800D1EBC(void); + void func_80181204(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80188DA4; + +void func_80181224(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80188DA4, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80188DB0; + +void func_8018124C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80188DB0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181274); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018129C); + + +extern void (*D_80188DD0[])(void); + +void func_8018133C(void *a0) { + D_80188DD0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181378); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801814E4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801816C0); + +extern void (*D_80188DE8[])(void); + +void func_80181868(void *a0) { + D_80188DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801818A4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181938); + + +extern void (*D_80188E00[])(void); + +void func_801819E8(void *a0) { + D_80188E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80181A24(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181A44); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181AE0); + + +extern void (*D_80188E08[])(void); + +void func_80181B78(void *a0) { + D_80188E08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181BB4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181C2C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181DEC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181E88); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181EF0); + + +extern void (*D_80188E50[])(void); + +void func_80181F20(void *a0) { + D_80188E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181F5C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80181FA4); + +void func_80182070(void) { +} + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182078); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801820E0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182174); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801821F4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182328); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801824E4); + +extern s32 func_800D0CE0(void); + extern void func_8012C218(void *a0); + void func_801825E0(s32 param_1) { + if (((int (*)(void))func_800D0CE0)() != 0) { + ((void (*)(s32))func_8012C218)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182618); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182674); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182848); + +void func_80182994(void *a0) { + *(short *)((char *)a0 + 0xfe) = 1; + } + + +void func_801829A0(void *a0) { + *(s16 *)((s32)a0 + 0xFE) = 0; + } + + +void func_801829A8(void *a0) { + *(u16 *)((s32)a0 + 0xfe) ^= 1; + } + + + +extern void (*D_80188FE0[])(void); + +void func_801829BC(void *a0) { + D_80188FE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801829F8); + +extern void func_8012C218(void *a0); + void func_80182A7C(s32 arg0) { + s32 v0; + if (*(s16 *)(arg0 + 0xfc) != *(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36)) { + ((void (*)(void))func_8012C218)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182AB4); + + +extern void (*D_80188FE8[])(void); + +void func_80182B64(void *a0) { + D_80188FE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182BA0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182BE0); + + +extern void (*D_80189048[])(void); + +void func_80182C24(void *a0) { + D_80189048[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182C60); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80182CF4); + +extern void func_801832D0(s32 arg0, s32 arg1); + void func_80183020(void) { + func_801832D0(-0x380, 0); + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183044); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183098); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801830EC); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801831B4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801832D0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801832F4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183314); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183394); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183458); + +DEFINE_func_80183808() /* dedup: shared engine-core @0x80183808 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183810); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183A20); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183A74); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183AC8); + +extern s32 func_800D0CE0(void); + s32 func_80183B90(void) { + return func_800D0CE0() != 0; + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183BB0); + + +extern void (*D_80189420[])(void); + +void func_80183D84(void *a0) { + D_80189420[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80183DC0); + + +extern void (*D_80189438[])(void); + +void func_80183FEC(void *a0) { + D_80189438[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801840D0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018418C); + + +extern void (*D_8018949C[])(void); + +void func_80184238(void *a0) { + D_8018949C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184274); + +void func_801842D8(void) { +} + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_80189484; + +void func_801842E0(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80189484); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184318); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184358); + + +extern void (*D_801AB130[])(void); + +void func_801843B4(void *a0) { + D_801AB130[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801843F0); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801844C4); + +void func_801844EC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801844F4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184640); + +extern void func_8012C218(void *a0); + void func_80184760(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018478C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018479C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801847AC); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_801847EC(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184820); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184844); + + +extern void (*D_801AB158[])(void); + +void func_801848A8(void *a0) { + D_801AB158[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_801848E4); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_8018496C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184A2C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184A9C); + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_80178D40", func_80184B94); + + diff --git a/src/ov_SC02_035/ov_SC02_035_jr_801734BC.c b/src/ov_SC02_035/ov_SC02_035_jr_801734BC.c index 6c0cc5367..b7a2e1ebf 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_801734BC.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_801734BC.c @@ -3104,1216 +3104,3 @@ void func_80178D18(void) { D_801BEA44 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BE84C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801BE84C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BE84C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801BE84C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801BE874; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801BE874 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801BE830; - -s32 func_8017A3B0(void) { - switch (D_801BE830) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801BE86C; -extern short D_801BE868; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801BE86C) { - case 0: - func_800D0CA0(1); - D_801BE86C = D_801BE86C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801BE868; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801BE86C = D_801BE86C + 1; - if (D_801BE86C < 0x1E) { - return 0; - } - D_801BE86C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801BE8AC; - extern s16 D_801BE8AE; - extern s16 D_801BE8B0; - extern s16 D_801BE8A4; - extern s16 D_801BE8A6; - extern s16 D_801BE8A8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BE8AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BE8AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BE8B0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BE8A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BE8A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BE8A8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801BE834; -extern u16 D_801BE8B4; -extern u16 D_801BE8B6; -extern u16 D_801BE8B8; -extern s16 D_801BE9D0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BE9D0 = 0; - D_801BE834 = 0; - D_801BE8B4 = D_80126B5E; - D_801BE8B6 = D_80126B62; - D_801BE8B8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187E10[]; - extern s16 D_801BE8AC; - extern s16 D_801BE8A4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187E10[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187E10[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BE8AC; - s16 *p78C = &D_801BE8A4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BE9D0 = 1; - D_801BE834 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801BE854; - extern SV4_8017B368 D_801BE85C; - extern s16 D_801BE8AC; - extern s16 D_801BE8A4; - extern u16 D_80187E10; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801BE854; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801BE85C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187E10)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187E10)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801BE8AC) = loc0; - (*(SV4_8017B368 *)&D_801BE8A4) = loc1; - D_801BE9D0 = 1; - D_801BE834 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187E10[]; - extern s16 D_801BE8AC; - extern s16 D_801BE8AE; - extern s16 D_801BE8B0; - extern s16 D_801BE8A4; - extern s16 D_801BE8A6; - extern s16 D_801BE8A8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187E10[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187E10[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BE8AC; - s16 *p78C = &D_801BE8A4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801BE8AE; - v798 = D_801BE8B0; - v78C = *p78C; - v78E = D_801BE8A6; - v790 = D_801BE8A8; - __asm__ __volatile__(""); - D_801BE9D0 = 1; - D_801BE834 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BE834; -extern s16 D_801BE8AC; -extern s16 D_801BE8AE; -extern s16 D_801BE8B0; -extern s16 D_801BE8A4; -extern s16 D_801BE8A6; -extern s16 D_801BE8A8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801BE834 = 0; - D_801BE8AC = (s16) D_80114F30; - D_801BE8AE = (s16) D_80114F34; - D_801BE8B0 = (s16) D_80114F38; - D_801BE8A4 = (s16) D_80114F24; - D_801BE8A6 = (s16) D_80114F28; - D_801BE8A8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801BE8C4; -extern s16 D_801BE8C6; -extern s16 D_801BE8C8; -extern s16 D_801BE8CC; -extern s16 D_801BE8CE; -extern s16 D_801BE8D0; - -void func_8017B824(void) { - D_801BE8C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801BE8C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801BE8C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801BE8CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801BE8CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801BE8D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801BE8C4; -extern s16 D_801BE8C6; -extern s16 D_801BE8C8; -extern s16 D_801BE8CC; -extern s16 D_801BE8CE; -extern s16 D_801BE8D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801BE8C4; - D_80114F34 = D_801BE8C6; - D_80114F38 = D_801BE8C8; - D_80114F24 = D_801BE8CC; - D_80114F28 = D_801BE8CE; - D_80114F2C = D_801BE8D0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801BE8AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801BE8A4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801BE8AC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801BE8A4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801BE8B4; -extern u16 D_801BE8B6; -extern u16 D_801BE8B8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BE834; -extern short D_801BE8BC; -extern short D_801BE8BE; -extern short D_801BE8C0; -extern s16 D_801BE8AC; -extern s16 D_801BE8AE; -extern s16 D_801BE8B0; -extern s16 D_801BE8A4; -extern s16 D_801BE8A6; -extern s16 D_801BE8A8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BE8B4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BE8B6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BE8B8); - (*(s16 *)&D_801BE8BC) = buf[0]; - (*(s16 *)&D_801BE8BE) = buf[1]; - (*(s16 *)&D_801BE8C0) = buf[2]; - D_801BE8AC = D_80114F30 + buf[0]; - D_801BE834 = 0; - D_801BE8AE = D_80114F34 + buf[1]; - D_801BE8B0 = D_80114F38 + buf[2]; - D_801BE8A4 = D_80114F24 + buf[0]; - D_801BE8A6 = D_80114F28 + buf[1]; - D_801BE8A8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801BE854; -extern SV4 D_801BE85C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BE85C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801BE854 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801BE85C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BE85C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801BE854) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801BE85C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801BE87C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801BE87C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801BE834; -extern s16 D_801BE9D0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801BE834 = D_801BE834 + 1; - if (D_801BE834 >= 0x1F) { - D_801BE9D0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801BE834; -extern s16 D_801BE9D0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BE834 = D_801BE834 + 1; - if (0x18 < D_801BE834) { - func_8012A4BC(); - D_801BE9D0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801BE834; -extern void (*D_801BE878)(void); -extern short D_801BE8BC; -extern short D_801BE8BE; -extern short D_801BE8C0; -extern s16 D_801BE9D0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BE834 = D_801BE834 + 1; - if (D_801BE834 >= 0x19) { - if (D_801BE878 != 0) { - (*D_801BE878)(); - } else { - D_80114F30 = D_80114F30 + D_801BE8BC; - D_80114F34 = D_80114F34 + D_801BE8BE; - D_80114F38 = D_80114F38 + D_801BE8C0; - D_80114F24 = D_80114F24 + D_801BE8BC; - D_80114F28 = D_80114F28 + D_801BE8BE; - D_80114F2C = D_80114F2C + D_801BE8C0; - func_8012A4BC(); - } - D_801BE9D0 = 0; - } -} - - - -extern void (*D_80187EB0[])(void); - -void func_8017BE60(void *a0) { - D_80187EB0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017CD9C); - - -extern void (*D_80187F0C[])(void); - -void func_8017CDDC(void *a0) { - D_80187F0C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017CE18); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE5C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017CE80); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEC0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF3C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80187F20[])(void); - -void func_8017CF5C(void *a0) { - D_80187F20[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017CF98); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D00C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D034); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D05C); - - -extern void (*D_80187F34[])(void); - -void func_8017D0F4(void *a0) { - D_80187F34[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D130); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D1D0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D368); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D398); - - -extern void (*D_80194854[])(void); - -void func_8017D3B8(void *a0) { - D_80194854[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D3F4); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801949F0[]; - -extern s32 func_8012DFD4(s32 a0); - -void func_8017D548(int param_1) -{ - D_801949F0[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012DFD4)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D598); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D610); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D710); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D7A4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D85C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017D914); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017DBAC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017DD34); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E1E0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E374); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E724); - - -extern void (*D_80196DBC[])(void); - -void func_8017E810(void *a0) { - D_80196DBC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80196E70[])(void); - -void func_8017E84C(void *a0) { - D_80196E70[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017E888(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E8A0); - -void func_8017E944(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E960); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017E9E4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EA20); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EA50); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EAD4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EB98); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EC78); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017ECE8); - -void func_8017EDC4(void) { -} - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EDCC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EE84); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EF48); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017EF9C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F018); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F0FC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F2A0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F32C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F498); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F4DC); - -extern s32 func_8012B030(u8 *a0); - void func_8017F874(s32 arg0) { - *(s32 *)(arg0 + 0x1c) = 1; - *(s16 *)(arg0 + 0x2) = 0x4; - ((s32 (*)(void *))func_8012B030)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F8A0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F918); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017F96C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017FB1C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017FBE8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017FE4C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8017FE60); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801800C0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8018016C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8018023C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801803A4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801803F8); - -extern void (*D_80198E30[])(void); - -void func_801805FC(void *a0) { - D_80198E30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180638); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8018071C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180770); - -extern void func_801292C8(u8 *a0); - void func_8018087C(s32 *a0) { - s32 v0; - v0 = *(s32 *)((char *)a0 + 0x1c) - 1; - *(s32 *)((char *)a0 + 0x1c) = v0; - if (v0 == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801808B0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801808F0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180948); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801809E4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180B38); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180C10); - - -extern void (*D_80198EC4[])(void); - -void func_80180C70(void *a0) { - D_80198EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_80198E4C; -void func_80180CAC(void *a0) { - register s32 p __asm__("$3"); - register s32 q __asm__("$2"); - p = *(u16 *)((char *)a0 + 0x2); - q = (s32)&D_80198E4C; - *(s32 *)((char *)a0 + 0xd0) = q; - *(s32 *)((char *)a0 + 0xcc) = q; - *(s32 *)((char *)a0 + 0xe0) = *(s32 *)q; - p += 1; - *(s16 *)((char *)a0 + 0x2) = p; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180CD4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180D54); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80180ED8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801810FC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801814B0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801816F0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80181958); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80181B00); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80181D4C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80181E98); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80181F50); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801820A4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182150); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182200); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801822E8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182404); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801824E4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801825BC); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80182624(u8 *param_1) { - *(s16 *)(param_1 + 0xfe) = 0; - if (func_80153BD8((s32)param_1)) { - ((void (*)(u8 *))func_80153BF0)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182660); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182704); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801827C4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801827F8); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80182854(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8018288C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801828E8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801829C0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182A54); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182B20); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182BF8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182C94); - -void func_80182CEC(void) { -} - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182CF4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182D94); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182DE8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182E7C); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80182EC4(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182EEC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80182F38); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183024); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801830A8); - -extern void func_8012CBCC(s32 a0); - void func_801831B4(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801831EC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183258); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801832D4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183394); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801834BC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_8018362C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801837C0); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183A14); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183B20); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183CBC); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183D78); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183E04); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801B979C[]; - s32 func_80183E3C(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801B979C[0], &D_801B979C[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183E68); - -extern u8 D_80078EC1; - s32 func_80183F14(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183F2C); - - -extern void (*D_801BBE9C[])(void); - -void func_80183F98(void *a0) { - D_801BBE9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80183FD4); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801841C8); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80184278); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_80184328); - -void func_801843D8(void) { -} - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_801734BC", func_801843E0); - diff --git a/src/ov_SC02_035/ov_SC02_035_jr_80178D40.c b/src/ov_SC02_035/ov_SC02_035_jr_80178D40.c new file mode 100644 index 000000000..da96bf52b --- /dev/null +++ b/src/ov_SC02_035/ov_SC02_035_jr_80178D40.c @@ -0,0 +1,4683 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801876B8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801BDBA0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801876AC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801876F0[]; +extern unsigned short D_801876F8[]; +extern unsigned short D_80187700[]; +extern unsigned char D_801BDBA8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801BDBA0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187708[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BDCDC; +extern M2C_UNK D_801BDCE0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BDC68; +extern void (*D_80187738[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801BDCE4[]; +extern u8 D_801BDCEC[]; +extern u8 D_801BDC9C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187740[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018775C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187764[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801877CC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187770; +extern u8 D_8018777C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187800[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187808[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018785C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187890[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187880[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801878AC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187924[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018792C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187934[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018793C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187944[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018794C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187958[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187964[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187970[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187980[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187990[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187998[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801879A0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801879A8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801879B0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801879B8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801879C0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801879C8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801879D0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801879D8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801879E0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801879E8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801879F0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801879F8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187A00[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187A08[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187A10[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187A18[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187A20[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187A28[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187A30[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187A38[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187A40[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187A84[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187A48; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187AB4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187AF0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187B48[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187B58[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187B60[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187CC8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187CD4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BD268; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BE9D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801BE420; +extern short D_801BEA44; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BEA44) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BEA44)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801BE420 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BEA44) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801BE9A0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801BE9A0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BEA44) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BEA44) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801BE87C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801BE424; + extern s32 D_801BE838; + extern s16 D_801BE83C; + extern s16 D_801BE840; + extern s16 D_801BE844; + extern s16 D_801BE848; + extern s32 D_801BE850; + extern s32 D_801BE854; + extern s32 D_801BE864; + extern s16 D_801BE868; + extern s16 D_801BE86C; + extern s32 D_801BE870; + extern s32 D_801BE878; + extern s32 D_801BE87C[10]; + extern s32 D_801BE8E8; + extern s16 D_801BE9A0; + extern s32 D_801BE9CC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801BE9A0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801BE838); + D_801BE838 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BE844, D_801BE848 ? 0x48 : 0x40); + (*(s16*)&D_801BEA44) = 2; + break; + case 0: + func_80179B28(D_801BE838); + D_801BE838 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BE83C, D_801BE840 ? 0x48 : 0x40); + (*(s16*)&D_801BEA44) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801BE8E8 != 0) { + func_80179B28(D_801BE838); + D_801BE838 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801BE83C, D_801BE840 ? 0x48 : 0x40); + (*(s16*)&D_801BEA44) = 1; + } else { + (*(s16*)&D_801BEA44) = 3; + } + break; + case 0x32: + func_80179B28(D_801BE838); + D_801BE838 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801BE83C, + D_801BE840 ? 0x48 : 0x40); + (*(s16*)&D_801BEA44) = 1; + break; + case 2: + func_80179B28(D_801BE838); + if (D_801BE850 != 0) { + D_801BE420 = D_801BE850; + D_801BE850 = 0; + (*(s16*)&D_801BEA44) = 3; + return; + } + (*(s16*)&D_801BEA44) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BEA44) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BEA44) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BEA44) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BEA44) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BEA44) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x1B: + D_801BE870 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BEA44) = 4; + D_801BE424 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BEA44) = 5; + D_801BE864 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801BE864 = (s32)func_8017A3B0; + (*(s16*)&D_801BEA44) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x24: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BEA44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BEA44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BEA44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BEA44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BEA44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BEA44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BEA44) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BEA44) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BEA44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BE854); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BE854); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BE854); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BE854); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x4E: + D_801BE878 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x2B: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BEA44) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BE9CC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x34: + (*(s16*)&D_801BEA44) = 3; + D_801BE420 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801BE850 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BEA44) = 3; + D_801BE420 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BEA44) = 3; + D_801BE420 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801BE420 = *(s32 *)(D_801BE420 + 4); + return; + case 0x37: + (*(s16*)&D_801BEA44) = 3; + D_801BE83C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BE840 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BEA44) = 3; + D_801BE844 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BE848 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BEA44) = 3; + D_801BE83C = w1; + D_801BE840 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BEA44) = 3; + D_801BE844 = w2; + D_801BE848 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x43: + D_801BE864 = (s32)func_8017A3D8; + D_801BE86C = 0; + (*(s16*)&D_801BEA44) = 5; + D_801BE868 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BEA44) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BEA44) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801BE87C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BEA44) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801BE87C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BEA44) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801BE87C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BEA44) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801BE87C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BEA44) = 3; + break; + default: + break; + } +Lend: + D_801BE420 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BE84C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801BE84C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BE84C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801BE84C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801BE874; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801BE874 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801BE830; + +s32 func_8017A3B0(void) { + switch (D_801BE830) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801BE86C; +extern short D_801BE868; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801BE86C) { + case 0: + func_800D0CA0(1); + D_801BE86C = D_801BE86C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801BE868; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801BE86C = D_801BE86C + 1; + if (D_801BE86C < 0x1E) { + return 0; + } + D_801BE86C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801BE8AC; + extern s16 D_801BE8AE; + extern s16 D_801BE8B0; + extern s16 D_801BE8A4; + extern s16 D_801BE8A6; + extern s16 D_801BE8A8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BE8AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BE8AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BE8B0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BE8A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BE8A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BE8A8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801BE834; +extern u16 D_801BE8B4; +extern u16 D_801BE8B6; +extern u16 D_801BE8B8; +extern s16 D_801BE9D0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BE9D0 = 0; + D_801BE834 = 0; + D_801BE8B4 = D_80126B5E; + D_801BE8B6 = D_80126B62; + D_801BE8B8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187E10[]; + extern s16 D_801BE8AC; + extern s16 D_801BE8A4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187E10[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187E10[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BE8AC; + s16 *p78C = &D_801BE8A4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BE9D0 = 1; + D_801BE834 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801BE854; + extern SV4_8017B368 D_801BE85C; + extern s16 D_801BE8AC; + extern s16 D_801BE8A4; + extern u16 D_80187E10; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801BE854; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801BE85C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187E10)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187E10)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801BE8AC) = loc0; + (*(SV4_8017B368 *)&D_801BE8A4) = loc1; + D_801BE9D0 = 1; + D_801BE834 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187E10[]; + extern s16 D_801BE8AC; + extern s16 D_801BE8AE; + extern s16 D_801BE8B0; + extern s16 D_801BE8A4; + extern s16 D_801BE8A6; + extern s16 D_801BE8A8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187E10[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187E10[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BE8AC; + s16 *p78C = &D_801BE8A4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801BE8AE; + v798 = D_801BE8B0; + v78C = *p78C; + v78E = D_801BE8A6; + v790 = D_801BE8A8; + __asm__ __volatile__(""); + D_801BE9D0 = 1; + D_801BE834 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BE834; +extern s16 D_801BE8AC; +extern s16 D_801BE8AE; +extern s16 D_801BE8B0; +extern s16 D_801BE8A4; +extern s16 D_801BE8A6; +extern s16 D_801BE8A8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801BE834 = 0; + D_801BE8AC = (s16) D_80114F30; + D_801BE8AE = (s16) D_80114F34; + D_801BE8B0 = (s16) D_80114F38; + D_801BE8A4 = (s16) D_80114F24; + D_801BE8A6 = (s16) D_80114F28; + D_801BE8A8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801BE8C4; +extern s16 D_801BE8C6; +extern s16 D_801BE8C8; +extern s16 D_801BE8CC; +extern s16 D_801BE8CE; +extern s16 D_801BE8D0; + +void func_8017B824(void) { + D_801BE8C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801BE8C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801BE8C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801BE8CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801BE8CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801BE8D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801BE8C4; +extern s16 D_801BE8C6; +extern s16 D_801BE8C8; +extern s16 D_801BE8CC; +extern s16 D_801BE8CE; +extern s16 D_801BE8D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801BE8C4; + D_80114F34 = D_801BE8C6; + D_80114F38 = D_801BE8C8; + D_80114F24 = D_801BE8CC; + D_80114F28 = D_801BE8CE; + D_80114F2C = D_801BE8D0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801BE8AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801BE8A4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801BE8AC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801BE8A4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801BE8B4; +extern u16 D_801BE8B6; +extern u16 D_801BE8B8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BE834; +extern short D_801BE8BC; +extern short D_801BE8BE; +extern short D_801BE8C0; +extern s16 D_801BE8AC; +extern s16 D_801BE8AE; +extern s16 D_801BE8B0; +extern s16 D_801BE8A4; +extern s16 D_801BE8A6; +extern s16 D_801BE8A8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BE8B4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BE8B6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BE8B8); + (*(s16 *)&D_801BE8BC) = buf[0]; + (*(s16 *)&D_801BE8BE) = buf[1]; + (*(s16 *)&D_801BE8C0) = buf[2]; + D_801BE8AC = D_80114F30 + buf[0]; + D_801BE834 = 0; + D_801BE8AE = D_80114F34 + buf[1]; + D_801BE8B0 = D_80114F38 + buf[2]; + D_801BE8A4 = D_80114F24 + buf[0]; + D_801BE8A6 = D_80114F28 + buf[1]; + D_801BE8A8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801BE854; +extern SV4 D_801BE85C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BE85C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801BE854 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801BE85C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BE85C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801BE854) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801BE85C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801BE87C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801BE87C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801BE834; +extern s16 D_801BE9D0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801BE834 = D_801BE834 + 1; + if (D_801BE834 >= 0x1F) { + D_801BE9D0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801BE834; +extern s16 D_801BE9D0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BE834 = D_801BE834 + 1; + if (0x18 < D_801BE834) { + func_8012A4BC(); + D_801BE9D0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801BE834; +extern void (*D_801BE878)(void); +extern short D_801BE8BC; +extern short D_801BE8BE; +extern short D_801BE8C0; +extern s16 D_801BE9D0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BE834 = D_801BE834 + 1; + if (D_801BE834 >= 0x19) { + if (D_801BE878 != 0) { + (*D_801BE878)(); + } else { + D_80114F30 = D_80114F30 + D_801BE8BC; + D_80114F34 = D_80114F34 + D_801BE8BE; + D_80114F38 = D_80114F38 + D_801BE8C0; + D_80114F24 = D_80114F24 + D_801BE8BC; + D_80114F28 = D_80114F28 + D_801BE8BE; + D_80114F2C = D_80114F2C + D_801BE8C0; + func_8012A4BC(); + } + D_801BE9D0 = 0; + } +} + + + +extern void (*D_80187EB0[])(void); + +void func_8017BE60(void *a0) { + D_80187EB0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017CD9C); + + +extern void (*D_80187F0C[])(void); + +void func_8017CDDC(void *a0) { + D_80187F0C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017CE18); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE5C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017CE80); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEC0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF3C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80187F20[])(void); + +void func_8017CF5C(void *a0) { + D_80187F20[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017CF98); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D00C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D034); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D05C); + + +extern void (*D_80187F34[])(void); + +void func_8017D0F4(void *a0) { + D_80187F34[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D130); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D1D0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D368); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D398); + + +extern void (*D_80194854[])(void); + +void func_8017D3B8(void *a0) { + D_80194854[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D3F4); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801949F0[]; + +extern s32 func_8012DFD4(s32 a0); + +void func_8017D548(int param_1) +{ + D_801949F0[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012DFD4)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D598); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D610); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D710); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D7A4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D85C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017D914); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017DBAC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017DD34); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E1E0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E374); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E724); + + +extern void (*D_80196DBC[])(void); + +void func_8017E810(void *a0) { + D_80196DBC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80196E70[])(void); + +void func_8017E84C(void *a0) { + D_80196E70[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017E888(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E8A0); + +void func_8017E944(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E960); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017E9E4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EA20); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EA50); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EAD4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EB98); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EC78); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017ECE8); + +void func_8017EDC4(void) { +} + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EDCC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EE84); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EF48); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017EF9C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F018); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F0FC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F2A0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F32C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F498); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F4DC); + +extern s32 func_8012B030(u8 *a0); + void func_8017F874(s32 arg0) { + *(s32 *)(arg0 + 0x1c) = 1; + *(s16 *)(arg0 + 0x2) = 0x4; + ((s32 (*)(void *))func_8012B030)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F8A0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F918); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017F96C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017FB1C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017FBE8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017FE4C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8017FE60); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801800C0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8018016C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8018023C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801803A4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801803F8); + +extern void (*D_80198E30[])(void); + +void func_801805FC(void *a0) { + D_80198E30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180638); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8018071C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180770); + +extern void func_801292C8(u8 *a0); + void func_8018087C(s32 *a0) { + s32 v0; + v0 = *(s32 *)((char *)a0 + 0x1c) - 1; + *(s32 *)((char *)a0 + 0x1c) = v0; + if (v0 == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801808B0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801808F0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180948); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801809E4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180B38); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180C10); + + +extern void (*D_80198EC4[])(void); + +void func_80180C70(void *a0) { + D_80198EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 D_80198E4C; +void func_80180CAC(void *a0) { + register s32 p __asm__("$3"); + register s32 q __asm__("$2"); + p = *(u16 *)((char *)a0 + 0x2); + q = (s32)&D_80198E4C; + *(s32 *)((char *)a0 + 0xd0) = q; + *(s32 *)((char *)a0 + 0xcc) = q; + *(s32 *)((char *)a0 + 0xe0) = *(s32 *)q; + p += 1; + *(s16 *)((char *)a0 + 0x2) = p; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180CD4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180D54); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80180ED8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801810FC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801814B0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801816F0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80181958); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80181B00); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80181D4C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80181E98); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80181F50); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801820A4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182150); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182200); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801822E8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182404); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801824E4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801825BC); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80182624(u8 *param_1) { + *(s16 *)(param_1 + 0xfe) = 0; + if (func_80153BD8((s32)param_1)) { + ((void (*)(u8 *))func_80153BF0)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182660); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182704); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801827C4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801827F8); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80182854(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8018288C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801828E8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801829C0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182A54); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182B20); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182BF8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182C94); + +void func_80182CEC(void) { +} + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182CF4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182D94); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182DE8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182E7C); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80182EC4(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182EEC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80182F38); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183024); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801830A8); + +extern void func_8012CBCC(s32 a0); + void func_801831B4(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801831EC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183258); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801832D4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183394); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801834BC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_8018362C); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801837C0); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183A14); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183B20); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183CBC); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183D78); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183E04); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801B979C[]; + s32 func_80183E3C(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801B979C[0], &D_801B979C[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183E68); + +extern u8 D_80078EC1; + s32 func_80183F14(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183F2C); + + +extern void (*D_801BBE9C[])(void); + +void func_80183F98(void *a0) { + D_801BBE9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80183FD4); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801841C8); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80184278); + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_80184328); + +void func_801843D8(void) { +} + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_80178D40", func_801843E0); + + diff --git a/src/ov_SC02_039/ov_SC02_039_jr_801734BC.c b/src/ov_SC02_039/ov_SC02_039_jr_801734BC.c index 7ee83807f..d263e8531 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_801734BC.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_801734BC.c @@ -3105,895 +3105,3 @@ void func_80178D18(void) { D_801A0DFC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A0BFC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A0BFC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A0BFC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A0BFC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A0C24; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A0C24 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A0BE0; - -s32 func_8017A3B0(void) { - switch (D_801A0BE0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A0C1C; -extern short D_801A0C18; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A0C1C) { - case 0: - func_800D0CA0(1); - D_801A0C1C = D_801A0C1C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A0C18; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A0C1C = D_801A0C1C + 1; - if (D_801A0C1C < 0x1E) { - return 0; - } - D_801A0C1C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A0C5C; - extern s16 D_801A0C5E; - extern s16 D_801A0C60; - extern s16 D_801A0C54; - extern s16 D_801A0C56; - extern s16 D_801A0C58; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A0C5C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A0C5E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A0C60, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A0C54, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A0C56, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A0C58, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A0BE4; -extern u16 D_801A0C64; -extern u16 D_801A0C66; -extern u16 D_801A0C68; -extern s16 D_801A0D88; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A0D88 = 0; - D_801A0BE4 = 0; - D_801A0C64 = D_80126B5E; - D_801A0C66 = D_80126B62; - D_801A0C68 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182A3C[]; - extern s16 D_801A0C5C; - extern s16 D_801A0C54; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182A3C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182A3C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A0C5C; - s16 *p78C = &D_801A0C54; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A0D88 = 1; - D_801A0BE4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A0C04; - extern SV4_8017B368 D_801A0C0C; - extern s16 D_801A0C5C; - extern s16 D_801A0C54; - extern u16 D_80182A3C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A0C04; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A0C0C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182A3C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182A3C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A0C5C) = loc0; - (*(SV4_8017B368 *)&D_801A0C54) = loc1; - D_801A0D88 = 1; - D_801A0BE4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182A3C[]; - extern s16 D_801A0C5C; - extern s16 D_801A0C5E; - extern s16 D_801A0C60; - extern s16 D_801A0C54; - extern s16 D_801A0C56; - extern s16 D_801A0C58; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182A3C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182A3C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A0C5C; - s16 *p78C = &D_801A0C54; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A0C5E; - v798 = D_801A0C60; - v78C = *p78C; - v78E = D_801A0C56; - v790 = D_801A0C58; - __asm__ __volatile__(""); - D_801A0D88 = 1; - D_801A0BE4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A0BE4; -extern s16 D_801A0C5C; -extern s16 D_801A0C5E; -extern s16 D_801A0C60; -extern s16 D_801A0C54; -extern s16 D_801A0C56; -extern s16 D_801A0C58; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A0BE4 = 0; - D_801A0C5C = (s16) D_80114F30; - D_801A0C5E = (s16) D_80114F34; - D_801A0C60 = (s16) D_80114F38; - D_801A0C54 = (s16) D_80114F24; - D_801A0C56 = (s16) D_80114F28; - D_801A0C58 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A0C74; -extern s16 D_801A0C76; -extern s16 D_801A0C78; -extern s16 D_801A0C7C; -extern s16 D_801A0C7E; -extern s16 D_801A0C80; - -void func_8017B824(void) { - D_801A0C74 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A0C76 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A0C78 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A0C7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A0C7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A0C80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A0C74; -extern s16 D_801A0C76; -extern s16 D_801A0C78; -extern s16 D_801A0C7C; -extern s16 D_801A0C7E; -extern s16 D_801A0C80; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A0C74; - D_80114F34 = D_801A0C76; - D_80114F38 = D_801A0C78; - D_80114F24 = D_801A0C7C; - D_80114F28 = D_801A0C7E; - D_80114F2C = D_801A0C80; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A0C5C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A0C54) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A0C5C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A0C54) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A0C64; -extern u16 D_801A0C66; -extern u16 D_801A0C68; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A0BE4; -extern short D_801A0C6C; -extern short D_801A0C6E; -extern short D_801A0C70; -extern s16 D_801A0C5C; -extern s16 D_801A0C5E; -extern s16 D_801A0C60; -extern s16 D_801A0C54; -extern s16 D_801A0C56; -extern s16 D_801A0C58; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A0C64); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A0C66); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A0C68); - (*(s16 *)&D_801A0C6C) = buf[0]; - (*(s16 *)&D_801A0C6E) = buf[1]; - (*(s16 *)&D_801A0C70) = buf[2]; - D_801A0C5C = D_80114F30 + buf[0]; - D_801A0BE4 = 0; - D_801A0C5E = D_80114F34 + buf[1]; - D_801A0C60 = D_80114F38 + buf[2]; - D_801A0C54 = D_80114F24 + buf[0]; - D_801A0C56 = D_80114F28 + buf[1]; - D_801A0C58 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A0C04; -extern SV4 D_801A0C0C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A0C0C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A0C04 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A0C0C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A0C0C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A0C04) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A0C0C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A0C2C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A0C2C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A0BE4; -extern s16 D_801A0D88; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A0BE4 = D_801A0BE4 + 1; - if (D_801A0BE4 >= 0x1F) { - D_801A0D88 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A0BE4; -extern s16 D_801A0D88; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A0BE4 = D_801A0BE4 + 1; - if (0x18 < D_801A0BE4) { - func_8012A4BC(); - D_801A0D88 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A0BE4; -extern void (*D_801A0C28)(void); -extern short D_801A0C6C; -extern short D_801A0C6E; -extern short D_801A0C70; -extern s16 D_801A0D88; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A0BE4 = D_801A0BE4 + 1; - if (D_801A0BE4 >= 0x19) { - if (D_801A0C28 != 0) { - (*D_801A0C28)(); - } else { - D_80114F30 = D_80114F30 + D_801A0C6C; - D_80114F34 = D_80114F34 + D_801A0C6E; - D_80114F38 = D_80114F38 + D_801A0C70; - D_80114F24 = D_80114F24 + D_801A0C6C; - D_80114F28 = D_80114F28 + D_801A0C6E; - D_80114F2C = D_80114F2C + D_801A0C70; - func_8012A4BC(); - } - D_801A0D88 = 0; - } -} - - - -extern void (*D_80182ADC[])(void); - -void func_8017BE60(void *a0) { - D_80182ADC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017BEBC); - - -extern void (*D_80182B38[])(void); - -void func_8017CD9C(void *a0) { - D_80182B38[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017CE40); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CE80(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CEFC(void) { - func_800D1EBC(); - } - - - -extern void (*D_80182B4C[])(void); - -void func_8017CF1C(void *a0) { - D_80182B4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017CF58); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017CFCC); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017CFF4); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D01C); - - -extern void (*D_80182B78[])(void); - -void func_8017D0D4(void *a0) { - D_80182B78[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D2B8); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D484); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D5F4); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D6AC); - -extern s32 func_8017D764(void); - -s32 func_8017D764(void) { - return 0x49; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D76C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D7D0); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017D930); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DB14); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DBD0); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DC7C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DDB0); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DE00); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017DE84); - -extern void (*D_8019B58C[])(void); - -void func_8017DFE8(void *a0) { - D_8019B58C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E024); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E25C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E2F4); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E428); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E500); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E640); - - -extern void (*D_8019B5A4[])(void); - -void func_8017E758(void *a0) { - D_8019B5A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E794); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017E910); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017EA20); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017EC34); - -extern void (*D_8019B634[])(void); - -void func_8017EE9C(void *a0) { - D_8019B634[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017EED8); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017EF5C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_801734BC", func_8017F050); - diff --git a/src/ov_SC02_039/ov_SC02_039_jr_80178D40.c b/src/ov_SC02_039/ov_SC02_039_jr_80178D40.c new file mode 100644 index 000000000..bb6f5c959 --- /dev/null +++ b/src/ov_SC02_039/ov_SC02_039_jr_80178D40.c @@ -0,0 +1,4362 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801822E4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019FF50; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801822D8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018231C[]; +extern unsigned short D_80182324[]; +extern unsigned short D_8018232C[]; +extern unsigned char D_8019FF58[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019FF50; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182334[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A008C; +extern M2C_UNK D_801A0090; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0018; +extern void (*D_80182364[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A0094[]; +extern u8 D_801A009C[]; +extern u8 D_801A004C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018236C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182388[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182390[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801823F8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018239C; +extern u8 D_801823A8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018242C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182434[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182488[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801824BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801824AC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801824D8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182550[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182558[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182560[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182568[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182570[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182578[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182584[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182590[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018259C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801825AC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801825BC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801825C4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801825CC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801825D4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801825DC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801825E4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801825EC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801825F4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801825FC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182604[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018260C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182614[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018261C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182624[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018262C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182634[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018263C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182644[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018264C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182654[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018265C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182664[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018266C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801826B0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182674; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801826E0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018271C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182774[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182784[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018278C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801828F4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182900[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019F654; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A0D88; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A07D0; +extern short D_801A0DFC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A0DFC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A0DFC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A07D0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A0DFC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A0D58 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A0D58 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A0DFC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A0DFC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A0C2C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A07D4; + extern s32 D_801A0BE8; + extern s16 D_801A0BEC; + extern s16 D_801A0BF0; + extern s16 D_801A0BF4; + extern s16 D_801A0BF8; + extern s32 D_801A0C00; + extern s32 D_801A0C04; + extern s32 D_801A0C14; + extern s16 D_801A0C18; + extern s16 D_801A0C1C; + extern s32 D_801A0C20; + extern s32 D_801A0C28; + extern s32 D_801A0C2C[10]; + extern s32 D_801A0CA0; + extern s16 D_801A0D58; + extern s32 D_801A0D84; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A0D58; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A0BE8); + D_801A0BE8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A0BF4, D_801A0BF8 ? 0x48 : 0x40); + (*(s16*)&D_801A0DFC) = 2; + break; + case 0: + func_80179B28(D_801A0BE8); + D_801A0BE8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A0BEC, D_801A0BF0 ? 0x48 : 0x40); + (*(s16*)&D_801A0DFC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A0CA0 != 0) { + func_80179B28(D_801A0BE8); + D_801A0BE8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A0BEC, D_801A0BF0 ? 0x48 : 0x40); + (*(s16*)&D_801A0DFC) = 1; + } else { + (*(s16*)&D_801A0DFC) = 3; + } + break; + case 0x32: + func_80179B28(D_801A0BE8); + D_801A0BE8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A0BEC, + D_801A0BF0 ? 0x48 : 0x40); + (*(s16*)&D_801A0DFC) = 1; + break; + case 2: + func_80179B28(D_801A0BE8); + if (D_801A0C00 != 0) { + D_801A07D0 = D_801A0C00; + D_801A0C00 = 0; + (*(s16*)&D_801A0DFC) = 3; + return; + } + (*(s16*)&D_801A0DFC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A0DFC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A0DFC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A0DFC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x1B: + D_801A0C20 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A0DFC) = 4; + D_801A07D4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A0DFC) = 5; + D_801A0C14 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A0C14 = (s32)func_8017A3B0; + (*(s16*)&D_801A0DFC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x24: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A0DFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A0DFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A0DFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A0DFC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A0DFC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A0DFC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A0DFC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A0C04); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A0C04); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A0C04); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A0C04); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x4E: + D_801A0C28 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x2B: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A0DFC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A0D84 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x34: + (*(s16*)&D_801A0DFC) = 3; + D_801A07D0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A0C00 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A0DFC) = 3; + D_801A07D0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A0DFC) = 3; + D_801A07D0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A07D0 = *(s32 *)(D_801A07D0 + 4); + return; + case 0x37: + (*(s16*)&D_801A0DFC) = 3; + D_801A0BEC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A0BF0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A0DFC) = 3; + D_801A0BF4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A0BF8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A0DFC) = 3; + D_801A0BEC = w1; + D_801A0BF0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A0DFC) = 3; + D_801A0BF4 = w2; + D_801A0BF8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x43: + D_801A0C14 = (s32)func_8017A3D8; + D_801A0C1C = 0; + (*(s16*)&D_801A0DFC) = 5; + D_801A0C18 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A0DFC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A0DFC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A0C2C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A0DFC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A0C2C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A0DFC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A0C2C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A0DFC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A0C2C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A0DFC) = 3; + break; + default: + break; + } +Lend: + D_801A07D0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A0BFC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A0BFC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A0BFC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A0BFC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A0C24; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A0C24 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A0BE0; + +s32 func_8017A3B0(void) { + switch (D_801A0BE0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A0C1C; +extern short D_801A0C18; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A0C1C) { + case 0: + func_800D0CA0(1); + D_801A0C1C = D_801A0C1C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A0C18; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A0C1C = D_801A0C1C + 1; + if (D_801A0C1C < 0x1E) { + return 0; + } + D_801A0C1C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A0C5C; + extern s16 D_801A0C5E; + extern s16 D_801A0C60; + extern s16 D_801A0C54; + extern s16 D_801A0C56; + extern s16 D_801A0C58; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A0C5C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A0C5E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A0C60, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A0C54, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A0C56, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A0C58, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A0BE4; +extern u16 D_801A0C64; +extern u16 D_801A0C66; +extern u16 D_801A0C68; +extern s16 D_801A0D88; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A0D88 = 0; + D_801A0BE4 = 0; + D_801A0C64 = D_80126B5E; + D_801A0C66 = D_80126B62; + D_801A0C68 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182A3C[]; + extern s16 D_801A0C5C; + extern s16 D_801A0C54; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182A3C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182A3C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A0C5C; + s16 *p78C = &D_801A0C54; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A0D88 = 1; + D_801A0BE4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A0C04; + extern SV4_8017B368 D_801A0C0C; + extern s16 D_801A0C5C; + extern s16 D_801A0C54; + extern u16 D_80182A3C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A0C04; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A0C0C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182A3C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182A3C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A0C5C) = loc0; + (*(SV4_8017B368 *)&D_801A0C54) = loc1; + D_801A0D88 = 1; + D_801A0BE4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182A3C[]; + extern s16 D_801A0C5C; + extern s16 D_801A0C5E; + extern s16 D_801A0C60; + extern s16 D_801A0C54; + extern s16 D_801A0C56; + extern s16 D_801A0C58; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182A3C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182A3C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A0C5C; + s16 *p78C = &D_801A0C54; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A0C5E; + v798 = D_801A0C60; + v78C = *p78C; + v78E = D_801A0C56; + v790 = D_801A0C58; + __asm__ __volatile__(""); + D_801A0D88 = 1; + D_801A0BE4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A0BE4; +extern s16 D_801A0C5C; +extern s16 D_801A0C5E; +extern s16 D_801A0C60; +extern s16 D_801A0C54; +extern s16 D_801A0C56; +extern s16 D_801A0C58; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A0BE4 = 0; + D_801A0C5C = (s16) D_80114F30; + D_801A0C5E = (s16) D_80114F34; + D_801A0C60 = (s16) D_80114F38; + D_801A0C54 = (s16) D_80114F24; + D_801A0C56 = (s16) D_80114F28; + D_801A0C58 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A0C74; +extern s16 D_801A0C76; +extern s16 D_801A0C78; +extern s16 D_801A0C7C; +extern s16 D_801A0C7E; +extern s16 D_801A0C80; + +void func_8017B824(void) { + D_801A0C74 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A0C76 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A0C78 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A0C7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A0C7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A0C80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A0C74; +extern s16 D_801A0C76; +extern s16 D_801A0C78; +extern s16 D_801A0C7C; +extern s16 D_801A0C7E; +extern s16 D_801A0C80; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A0C74; + D_80114F34 = D_801A0C76; + D_80114F38 = D_801A0C78; + D_80114F24 = D_801A0C7C; + D_80114F28 = D_801A0C7E; + D_80114F2C = D_801A0C80; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A0C5C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A0C54) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A0C5C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A0C54) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A0C64; +extern u16 D_801A0C66; +extern u16 D_801A0C68; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A0BE4; +extern short D_801A0C6C; +extern short D_801A0C6E; +extern short D_801A0C70; +extern s16 D_801A0C5C; +extern s16 D_801A0C5E; +extern s16 D_801A0C60; +extern s16 D_801A0C54; +extern s16 D_801A0C56; +extern s16 D_801A0C58; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A0C64); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A0C66); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A0C68); + (*(s16 *)&D_801A0C6C) = buf[0]; + (*(s16 *)&D_801A0C6E) = buf[1]; + (*(s16 *)&D_801A0C70) = buf[2]; + D_801A0C5C = D_80114F30 + buf[0]; + D_801A0BE4 = 0; + D_801A0C5E = D_80114F34 + buf[1]; + D_801A0C60 = D_80114F38 + buf[2]; + D_801A0C54 = D_80114F24 + buf[0]; + D_801A0C56 = D_80114F28 + buf[1]; + D_801A0C58 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A0C04; +extern SV4 D_801A0C0C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A0C0C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A0C04 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A0C0C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A0C0C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A0C04) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A0C0C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A0C2C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A0C2C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A0BE4; +extern s16 D_801A0D88; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A0BE4 = D_801A0BE4 + 1; + if (D_801A0BE4 >= 0x1F) { + D_801A0D88 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A0BE4; +extern s16 D_801A0D88; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A0BE4 = D_801A0BE4 + 1; + if (0x18 < D_801A0BE4) { + func_8012A4BC(); + D_801A0D88 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A0BE4; +extern void (*D_801A0C28)(void); +extern short D_801A0C6C; +extern short D_801A0C6E; +extern short D_801A0C70; +extern s16 D_801A0D88; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A0BE4 = D_801A0BE4 + 1; + if (D_801A0BE4 >= 0x19) { + if (D_801A0C28 != 0) { + (*D_801A0C28)(); + } else { + D_80114F30 = D_80114F30 + D_801A0C6C; + D_80114F34 = D_80114F34 + D_801A0C6E; + D_80114F38 = D_80114F38 + D_801A0C70; + D_80114F24 = D_80114F24 + D_801A0C6C; + D_80114F28 = D_80114F28 + D_801A0C6E; + D_80114F2C = D_80114F2C + D_801A0C70; + func_8012A4BC(); + } + D_801A0D88 = 0; + } +} + + + +extern void (*D_80182ADC[])(void); + +void func_8017BE60(void *a0) { + D_80182ADC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017BEBC); + + +extern void (*D_80182B38[])(void); + +void func_8017CD9C(void *a0) { + D_80182B38[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017CE40); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CE80(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CEFC(void) { + func_800D1EBC(); + } + + + +extern void (*D_80182B4C[])(void); + +void func_8017CF1C(void *a0) { + D_80182B4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017CF58); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017CFCC); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017CFF4); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D01C); + + +extern void (*D_80182B78[])(void); + +void func_8017D0D4(void *a0) { + D_80182B78[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D2B8); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D484); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D5F4); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D6AC); + +extern s32 func_8017D764(void); + +s32 func_8017D764(void) { + return 0x49; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D76C); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D7D0); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017D930); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DB14); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DBD0); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DC7C); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DDB0); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DE00); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017DE84); + +extern void (*D_8019B58C[])(void); + +void func_8017DFE8(void *a0) { + D_8019B58C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E024); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E25C); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E2F4); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E428); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E500); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E640); + + +extern void (*D_8019B5A4[])(void); + +void func_8017E758(void *a0) { + D_8019B5A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E794); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017E910); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017EA20); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017EC34); + +extern void (*D_8019B634[])(void); + +void func_8017EE9C(void *a0) { + D_8019B634[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017EED8); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017EF5C); + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_80178D40", func_8017F050); + + diff --git a/src/ov_SC02_041/ov_SC02_041_jr_801734BC.c b/src/ov_SC02_041/ov_SC02_041_jr_801734BC.c index 5f3e0c70b..3f69b3e03 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_801734BC.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_801734BC.c @@ -3105,1404 +3105,3 @@ void func_80178D18(void) { D_801B96D4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B8F74; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B8F74 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B8F74; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B8F74 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B8F9C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B8F9C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B8F58; - -s32 func_8017A3B0(void) { - switch (D_801B8F58) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B8F94; -extern short D_801B8F90; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B8F94) { - case 0: - func_800D0CA0(1); - D_801B8F94 = D_801B8F94 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B8F90; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B8F94 = D_801B8F94 + 1; - if (D_801B8F94 < 0x1E) { - return 0; - } - D_801B8F94 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B8FD4; - extern s16 D_801B8FD6; - extern s16 D_801B8FD8; - extern s16 D_801B8FCC; - extern s16 D_801B8FCE; - extern s16 D_801B8FD0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B8FD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B8FD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B8FD8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B8FCC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B8FCE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B8FD0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B8F5C; -extern u16 D_801B8FDC; -extern u16 D_801B8FDE; -extern u16 D_801B8FE0; -extern s16 D_801B9660; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B9660 = 0; - D_801B8F5C = 0; - D_801B8FDC = D_80126B5E; - D_801B8FDE = D_80126B62; - D_801B8FE0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018870C[]; - extern s16 D_801B8FD4; - extern s16 D_801B8FCC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018870C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018870C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B8FD4; - s16 *p78C = &D_801B8FCC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B9660 = 1; - D_801B8F5C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B8F7C; - extern SV4_8017B368 D_801B8F84; - extern s16 D_801B8FD4; - extern s16 D_801B8FCC; - extern u16 D_8018870C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B8F7C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B8F84; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018870C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018870C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B8FD4) = loc0; - (*(SV4_8017B368 *)&D_801B8FCC) = loc1; - D_801B9660 = 1; - D_801B8F5C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018870C[]; - extern s16 D_801B8FD4; - extern s16 D_801B8FD6; - extern s16 D_801B8FD8; - extern s16 D_801B8FCC; - extern s16 D_801B8FCE; - extern s16 D_801B8FD0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018870C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018870C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B8FD4; - s16 *p78C = &D_801B8FCC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B8FD6; - v798 = D_801B8FD8; - v78C = *p78C; - v78E = D_801B8FCE; - v790 = D_801B8FD0; - __asm__ __volatile__(""); - D_801B9660 = 1; - D_801B8F5C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B8F5C; -extern s16 D_801B8FD4; -extern s16 D_801B8FD6; -extern s16 D_801B8FD8; -extern s16 D_801B8FCC; -extern s16 D_801B8FCE; -extern s16 D_801B8FD0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B8F5C = 0; - D_801B8FD4 = (s16) D_80114F30; - D_801B8FD6 = (s16) D_80114F34; - D_801B8FD8 = (s16) D_80114F38; - D_801B8FCC = (s16) D_80114F24; - D_801B8FCE = (s16) D_80114F28; - D_801B8FD0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B8FEC; -extern s16 D_801B8FEE; -extern s16 D_801B8FF0; -extern s16 D_801B8FF4; -extern s16 D_801B8FF6; -extern s16 D_801B8FF8; - -void func_8017B824(void) { - D_801B8FEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B8FEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B8FF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B8FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B8FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B8FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B8FEC; -extern s16 D_801B8FEE; -extern s16 D_801B8FF0; -extern s16 D_801B8FF4; -extern s16 D_801B8FF6; -extern s16 D_801B8FF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B8FEC; - D_80114F34 = D_801B8FEE; - D_80114F38 = D_801B8FF0; - D_80114F24 = D_801B8FF4; - D_80114F28 = D_801B8FF6; - D_80114F2C = D_801B8FF8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B8FD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B8FCC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B8FD4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B8FCC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B8FDC; -extern u16 D_801B8FDE; -extern u16 D_801B8FE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B8F5C; -extern short D_801B8FE4; -extern short D_801B8FE6; -extern short D_801B8FE8; -extern s16 D_801B8FD4; -extern s16 D_801B8FD6; -extern s16 D_801B8FD8; -extern s16 D_801B8FCC; -extern s16 D_801B8FCE; -extern s16 D_801B8FD0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B8FDC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B8FDE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B8FE0); - (*(s16 *)&D_801B8FE4) = buf[0]; - (*(s16 *)&D_801B8FE6) = buf[1]; - (*(s16 *)&D_801B8FE8) = buf[2]; - D_801B8FD4 = D_80114F30 + buf[0]; - D_801B8F5C = 0; - D_801B8FD6 = D_80114F34 + buf[1]; - D_801B8FD8 = D_80114F38 + buf[2]; - D_801B8FCC = D_80114F24 + buf[0]; - D_801B8FCE = D_80114F28 + buf[1]; - D_801B8FD0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B8F7C; -extern SV4 D_801B8F84; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B8F84) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B8F7C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B8F84 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B8F84)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B8F7C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B8F84) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B8FA4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B8FA4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B8F5C; -extern s16 D_801B9660; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B8F5C = D_801B8F5C + 1; - if (D_801B8F5C >= 0x1F) { - D_801B9660 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B8F5C; -extern s16 D_801B9660; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B8F5C = D_801B8F5C + 1; - if (0x18 < D_801B8F5C) { - func_8012A4BC(); - D_801B9660 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B8F5C; -extern void (*D_801B8FA0)(void); -extern short D_801B8FE4; -extern short D_801B8FE6; -extern short D_801B8FE8; -extern s16 D_801B9660; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B8F5C = D_801B8F5C + 1; - if (D_801B8F5C >= 0x19) { - if (D_801B8FA0 != 0) { - (*D_801B8FA0)(); - } else { - D_80114F30 = D_80114F30 + D_801B8FE4; - D_80114F34 = D_80114F34 + D_801B8FE6; - D_80114F38 = D_80114F38 + D_801B8FE8; - D_80114F24 = D_80114F24 + D_801B8FE4; - D_80114F28 = D_80114F28 + D_801B8FE6; - D_80114F2C = D_80114F2C + D_801B8FE8; - func_8012A4BC(); - } - D_801B9660 = 0; - } -} - - - -extern void (*D_801887AC[])(void); - -void func_8017BE60(void *a0) { - D_801887AC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017CE3C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017CEF4); - -extern void func_80151664(void); - void func_8017D098(void) { - ((s32 (*)(void))func_80151664)(); - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D0B8); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D158); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D244); - - -extern void (*D_801888B8[])(void); - -void func_8017D294(void *a0) { - D_801888B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D38C); - -void func_8017D728(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); - *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D744); - - -extern void (*D_801888F0[])(void); - -void func_8017D784(void *a0) { - D_801888F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017D7C0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DA94); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DB10); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DB58); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DB80); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DCDC); - -void func_8017DD50(s32 *a0) { - *(s32 *)((s32)a0 + 0x0) = 0x80404080; - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DD60); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DDEC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DE5C); - - -extern void (*D_80188C48[])(void); - -void func_8017DECC(void *a0) { - D_80188C48[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DF08); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DF4C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017DF70); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DFB0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E02C); - - -extern void (*D_80188C5C[])(void); - -void func_8017E04C(void *a0) { - D_80188C5C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E088); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E0FC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E124); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E14C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E1E4); - - -extern void (*D_80188C78[])(void); - -void func_8017E27C(void *a0) { - D_80188C78[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E2B8); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E374); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E414); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E5AC); - - -s32 func_8017E5DC(void) { - return 85; -} - - - -extern void (*D_80188C90[])(void); - -void func_8017E5E4(void *a0) { - D_80188C90[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s16 a1); - extern s32 func_8012AD50(void *a0); - void func_8017E620(s32 *a0) { - func_8012BF4C(a0, 0); - ((s32 (*)(s32))func_8012AD50)((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E654); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E7A4); - - -extern void (*D_80188CCC[])(void); - -void func_8017E890(void *a0) { - D_80188CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E8CC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017E9B0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EA1C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EB08); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EB60); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EBB0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EC1C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017ED70); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EDC4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EDE8); - - -extern void (*D_8019ABBC[])(void); - -void func_8017EE2C(void *a0) { - D_8019ABBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EE68); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017EFB4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F02C); - - -void func_8017F05C(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F070); - - -extern void (*D_8019ABF4[])(void); - -void func_8017F0D8(void *a0) { - D_8019ABF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F114); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F160); - -void func_8017F1A8(void) { -} - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F1B0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F314); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F690); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F81C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017F9A4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FABC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FB38); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FBA0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FC04); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FC70); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FD14); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FE34); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8017FF48); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801AB8A8; - -void func_8017FFB8(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801AB8A8)) { - func_8012A828(arg0, &D_801AB8A8); - } -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", listCdBuffer); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801ABD30; - -void func_8018008C(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801ABD30); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801800CC); - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_801801CC else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_801801CC(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801ABC88; - -s32 func_8018011C(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_801801CC(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801ABC88); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801ABA48; - -void func_801801CC(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801ABA48); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_80180228(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - *(s32 *)((s32)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018023C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801803F0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180438); - - -extern void (*D_801A3DE8[])(void); - -void func_80180584(void *a0) { - D_801A3DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801805C0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180648); - - -extern void func_8012B2CC(s32 a0); -extern void func_8012B200(u8 *a0); -extern void func_8012B178(s32 a0, s32 a1); - -void func_80180720(u8 *a0) { - u8 *p = *(u8 **)(a0 + 0x20); - u16 v = *(u16 *)(a0 + 0xFC); - *(s16 *)(a0 + 0x2) = 2; - *(s32 *)(a0 + 0x1C) = 0x50; - *(s16 *)(p + 0x12) = v; - func_8012B2CC((s32)a0); - func_8012B200(a0); - func_8012B178((s32)a0, 0xFFF00000); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180778); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80180804(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018083C); - -extern s32 func_8012BEE8(s32 arg); - extern void func_801800CC(s32 arg); - void func_801808A8(s32 arg0) { - if (func_8012BEE8(arg0)) { - func_801800CC(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801808E0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180944); - -void func_8018099C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801809A4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180A5C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180ACC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180C40); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80180ED4); - -void func_80181000(s32 arg0) { - s32 var_v1; - *(s8 *)(arg0 + 0xc1) = 0; - *(s16 *)(arg0 + 0x5e) = 0; - *(s16 *)(arg0 + 0x5c) = 0; - *(s16 *)(arg0 + 0x102) = 3; - var_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(var_v1 + 0x2c) |= 0x10; - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018102C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181164); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181284); - - -extern void (*D_801ACA6C[])(void); - -void func_80181324(void *a0) { - D_801ACA6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181360); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181434); - -void func_8018145C(void) { -} - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181464); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801815B0); - -extern void func_8012C218(void *a0); - s32 func_801816D0(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801816FC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018170C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018171C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018175C(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181790); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801817B4); - - -extern void (*D_801ACA94[])(void); - -void func_80181818(void *a0) { - D_801ACA94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181854); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801818DC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018199C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181A0C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181B04); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181C40); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181CF0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181D38); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181DD4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181E18); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80181FFC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182044); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018227C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801822C0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182444); - -extern void func_8012CBCC(s32 a0); - void func_80182484(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801824BC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182514); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018257C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801825B4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018266C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801826A4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182758); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182784); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182974); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801829B4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182A18); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182A54); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182AD4); - -extern void func_8002A04C(s32 a0); -extern void func_8012C098(void); - -void func_80182B08(s32 arg0) { - ((void (*)(void))func_8002A04C)(); - ((s32 (*)(s32))func_8012C098)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182B38); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182BAC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182CCC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182D80); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80182F20); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183014); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018317C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801832F8); - - -extern void (*D_801AD37C[])(void); - -void func_801834B4(void *a0) { - D_801AD37C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801834F0); - -void func_8018354C(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183560); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183770); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801837B0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183AE8); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183B50); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183BC8); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183D78); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80183FE0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018428C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801843D8); - - -extern void (*D_801AD3D4[])(void); - -void func_801845B4(void *a0) { - D_801AD3D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801845F0); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_8018466C); - - -extern void (*D_801B65F0[])(void); - -void func_801846AC(void *a0) { - D_801B65F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801846E8); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_801847E4); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80184A74); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80184C08); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80184C60); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80184CDC); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_801734BC", func_80184D20); - diff --git a/src/ov_SC02_041/ov_SC02_041_jr_80178D40.c b/src/ov_SC02_041/ov_SC02_041_jr_80178D40.c new file mode 100644 index 000000000..1019d821a --- /dev/null +++ b/src/ov_SC02_041/ov_SC02_041_jr_80178D40.c @@ -0,0 +1,4871 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187FB4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B82C8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187FA8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187FEC[]; +extern unsigned short D_80187FF4[]; +extern unsigned short D_80187FFC[]; +extern unsigned char D_801B82D0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B82C8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188004[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8404; +extern M2C_UNK D_801B8408; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8390; +extern void (*D_80188034[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B840C[]; +extern u8 D_801B8414[]; +extern u8 D_801B83C4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018803C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188058[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80188060[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801880C8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018806C; +extern u8 D_80188078; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801880FC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188104[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188158[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018818C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018817C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801881A8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188220[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188228[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188230[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188238[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188240[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188248[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188254[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188260[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018826C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018827C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018828C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188294[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018829C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801882A4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801882AC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801882B4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801882BC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801882C4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801882CC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801882D4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801882DC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801882E4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801882EC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801882F4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801882FC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188304[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018830C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188314[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018831C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188324[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018832C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188334[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018833C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188380[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188344; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801883B0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801883EC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188444[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188454[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018845C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801885C4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801885D0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B79C0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B9660; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B8B48; +extern short D_801B96D4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B96D4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B96D4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B8B48 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B96D4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B9630 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B9630 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B96D4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B96D4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B8FA4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B8B4C; + extern s32 D_801B8F60; + extern s16 D_801B8F64; + extern s16 D_801B8F68; + extern s16 D_801B8F6C; + extern s16 D_801B8F70; + extern s32 D_801B8F78; + extern s32 D_801B8F7C; + extern s32 D_801B8F8C; + extern s16 D_801B8F90; + extern s16 D_801B8F94; + extern s32 D_801B8F98; + extern s32 D_801B8FA0; + extern s32 D_801B8FA4[10]; + extern s32 D_801B9578; + extern s16 D_801B9630; + extern s32 D_801B965C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B9630; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B8F60); + D_801B8F60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B8F6C, D_801B8F70 ? 0x48 : 0x40); + (*(s16*)&D_801B96D4) = 2; + break; + case 0: + func_80179B28(D_801B8F60); + D_801B8F60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B8F64, D_801B8F68 ? 0x48 : 0x40); + (*(s16*)&D_801B96D4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B9578 != 0) { + func_80179B28(D_801B8F60); + D_801B8F60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B8F64, D_801B8F68 ? 0x48 : 0x40); + (*(s16*)&D_801B96D4) = 1; + } else { + (*(s16*)&D_801B96D4) = 3; + } + break; + case 0x32: + func_80179B28(D_801B8F60); + D_801B8F60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B8F64, + D_801B8F68 ? 0x48 : 0x40); + (*(s16*)&D_801B96D4) = 1; + break; + case 2: + func_80179B28(D_801B8F60); + if (D_801B8F78 != 0) { + D_801B8B48 = D_801B8F78; + D_801B8F78 = 0; + (*(s16*)&D_801B96D4) = 3; + return; + } + (*(s16*)&D_801B96D4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B96D4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B96D4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B96D4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B96D4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B96D4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x1B: + D_801B8F98 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B96D4) = 4; + D_801B8B4C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B96D4) = 5; + D_801B8F8C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B8F8C = (s32)func_8017A3B0; + (*(s16*)&D_801B96D4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x24: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B96D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B96D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B96D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B96D4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B96D4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B96D4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B96D4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B96D4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B96D4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B8F7C); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B8F7C); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B8F7C); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B8F7C); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x4E: + D_801B8FA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x2B: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B96D4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B965C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x34: + (*(s16*)&D_801B96D4) = 3; + D_801B8B48 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B8F78 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B96D4) = 3; + D_801B8B48 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B96D4) = 3; + D_801B8B48 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B8B48 = *(s32 *)(D_801B8B48 + 4); + return; + case 0x37: + (*(s16*)&D_801B96D4) = 3; + D_801B8F64 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B8F68 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B96D4) = 3; + D_801B8F6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B8F70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B96D4) = 3; + D_801B8F64 = w1; + D_801B8F68 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B96D4) = 3; + D_801B8F6C = w2; + D_801B8F70 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x43: + D_801B8F8C = (s32)func_8017A3D8; + D_801B8F94 = 0; + (*(s16*)&D_801B96D4) = 5; + D_801B8F90 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B96D4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B96D4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B8FA4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B96D4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B8FA4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B96D4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B8FA4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B96D4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B8FA4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B96D4) = 3; + break; + default: + break; + } +Lend: + D_801B8B48 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B8F74; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B8F74 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B8F74; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B8F74 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B8F9C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B8F9C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B8F58; + +s32 func_8017A3B0(void) { + switch (D_801B8F58) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B8F94; +extern short D_801B8F90; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B8F94) { + case 0: + func_800D0CA0(1); + D_801B8F94 = D_801B8F94 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B8F90; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B8F94 = D_801B8F94 + 1; + if (D_801B8F94 < 0x1E) { + return 0; + } + D_801B8F94 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B8FD4; + extern s16 D_801B8FD6; + extern s16 D_801B8FD8; + extern s16 D_801B8FCC; + extern s16 D_801B8FCE; + extern s16 D_801B8FD0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B8FD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B8FD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B8FD8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B8FCC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B8FCE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B8FD0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B8F5C; +extern u16 D_801B8FDC; +extern u16 D_801B8FDE; +extern u16 D_801B8FE0; +extern s16 D_801B9660; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B9660 = 0; + D_801B8F5C = 0; + D_801B8FDC = D_80126B5E; + D_801B8FDE = D_80126B62; + D_801B8FE0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018870C[]; + extern s16 D_801B8FD4; + extern s16 D_801B8FCC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018870C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018870C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B8FD4; + s16 *p78C = &D_801B8FCC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B9660 = 1; + D_801B8F5C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B8F7C; + extern SV4_8017B368 D_801B8F84; + extern s16 D_801B8FD4; + extern s16 D_801B8FCC; + extern u16 D_8018870C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B8F7C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B8F84; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018870C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018870C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B8FD4) = loc0; + (*(SV4_8017B368 *)&D_801B8FCC) = loc1; + D_801B9660 = 1; + D_801B8F5C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018870C[]; + extern s16 D_801B8FD4; + extern s16 D_801B8FD6; + extern s16 D_801B8FD8; + extern s16 D_801B8FCC; + extern s16 D_801B8FCE; + extern s16 D_801B8FD0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018870C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018870C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B8FD4; + s16 *p78C = &D_801B8FCC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B8FD6; + v798 = D_801B8FD8; + v78C = *p78C; + v78E = D_801B8FCE; + v790 = D_801B8FD0; + __asm__ __volatile__(""); + D_801B9660 = 1; + D_801B8F5C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B8F5C; +extern s16 D_801B8FD4; +extern s16 D_801B8FD6; +extern s16 D_801B8FD8; +extern s16 D_801B8FCC; +extern s16 D_801B8FCE; +extern s16 D_801B8FD0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B8F5C = 0; + D_801B8FD4 = (s16) D_80114F30; + D_801B8FD6 = (s16) D_80114F34; + D_801B8FD8 = (s16) D_80114F38; + D_801B8FCC = (s16) D_80114F24; + D_801B8FCE = (s16) D_80114F28; + D_801B8FD0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B8FEC; +extern s16 D_801B8FEE; +extern s16 D_801B8FF0; +extern s16 D_801B8FF4; +extern s16 D_801B8FF6; +extern s16 D_801B8FF8; + +void func_8017B824(void) { + D_801B8FEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B8FEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B8FF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B8FF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B8FF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B8FF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B8FEC; +extern s16 D_801B8FEE; +extern s16 D_801B8FF0; +extern s16 D_801B8FF4; +extern s16 D_801B8FF6; +extern s16 D_801B8FF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B8FEC; + D_80114F34 = D_801B8FEE; + D_80114F38 = D_801B8FF0; + D_80114F24 = D_801B8FF4; + D_80114F28 = D_801B8FF6; + D_80114F2C = D_801B8FF8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B8FD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B8FCC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B8FD4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B8FCC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B8FDC; +extern u16 D_801B8FDE; +extern u16 D_801B8FE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B8F5C; +extern short D_801B8FE4; +extern short D_801B8FE6; +extern short D_801B8FE8; +extern s16 D_801B8FD4; +extern s16 D_801B8FD6; +extern s16 D_801B8FD8; +extern s16 D_801B8FCC; +extern s16 D_801B8FCE; +extern s16 D_801B8FD0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B8FDC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B8FDE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B8FE0); + (*(s16 *)&D_801B8FE4) = buf[0]; + (*(s16 *)&D_801B8FE6) = buf[1]; + (*(s16 *)&D_801B8FE8) = buf[2]; + D_801B8FD4 = D_80114F30 + buf[0]; + D_801B8F5C = 0; + D_801B8FD6 = D_80114F34 + buf[1]; + D_801B8FD8 = D_80114F38 + buf[2]; + D_801B8FCC = D_80114F24 + buf[0]; + D_801B8FCE = D_80114F28 + buf[1]; + D_801B8FD0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B8F7C; +extern SV4 D_801B8F84; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B8F84) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B8F7C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B8F84 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B8F84)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B8F7C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B8F84) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B8FA4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B8FA4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B8F5C; +extern s16 D_801B9660; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B8F5C = D_801B8F5C + 1; + if (D_801B8F5C >= 0x1F) { + D_801B9660 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B8F5C; +extern s16 D_801B9660; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B8F5C = D_801B8F5C + 1; + if (0x18 < D_801B8F5C) { + func_8012A4BC(); + D_801B9660 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B8F5C; +extern void (*D_801B8FA0)(void); +extern short D_801B8FE4; +extern short D_801B8FE6; +extern short D_801B8FE8; +extern s16 D_801B9660; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B8F5C = D_801B8F5C + 1; + if (D_801B8F5C >= 0x19) { + if (D_801B8FA0 != 0) { + (*D_801B8FA0)(); + } else { + D_80114F30 = D_80114F30 + D_801B8FE4; + D_80114F34 = D_80114F34 + D_801B8FE6; + D_80114F38 = D_80114F38 + D_801B8FE8; + D_80114F24 = D_80114F24 + D_801B8FE4; + D_80114F28 = D_80114F28 + D_801B8FE6; + D_80114F2C = D_80114F2C + D_801B8FE8; + func_8012A4BC(); + } + D_801B9660 = 0; + } +} + + + +extern void (*D_801887AC[])(void); + +void func_8017BE60(void *a0) { + D_801887AC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017CE3C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017CEF4); + +extern void func_80151664(void); + void func_8017D098(void) { + ((s32 (*)(void))func_80151664)(); + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D0B8); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D158); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D244); + + +extern void (*D_801888B8[])(void); + +void func_8017D294(void *a0) { + D_801888B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D38C); + +void func_8017D728(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); + *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D744); + + +extern void (*D_801888F0[])(void); + +void func_8017D784(void *a0) { + D_801888F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017D7C0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DA94); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DB10); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DB58); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DB80); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DCDC); + +void func_8017DD50(s32 *a0) { + *(s32 *)((s32)a0 + 0x0) = 0x80404080; + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DD60); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DDEC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DE5C); + + +extern void (*D_80188C48[])(void); + +void func_8017DECC(void *a0) { + D_80188C48[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DF08); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DF4C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017DF70); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DFB0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E02C); + + +extern void (*D_80188C5C[])(void); + +void func_8017E04C(void *a0) { + D_80188C5C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E088); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E0FC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E124); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E14C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E1E4); + + +extern void (*D_80188C78[])(void); + +void func_8017E27C(void *a0) { + D_80188C78[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E2B8); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E374); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E414); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E5AC); + + +s32 func_8017E5DC(void) { + return 85; +} + + + +extern void (*D_80188C90[])(void); + +void func_8017E5E4(void *a0) { + D_80188C90[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s16 a1); + extern s32 func_8012AD50(void *a0); + void func_8017E620(s32 *a0) { + func_8012BF4C(a0, 0); + ((s32 (*)(s32))func_8012AD50)((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E654); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E7A4); + + +extern void (*D_80188CCC[])(void); + +void func_8017E890(void *a0) { + D_80188CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E8CC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017E9B0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EA1C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EB08); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EB60); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EBB0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EC1C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017ED70); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EDC4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EDE8); + + +extern void (*D_8019ABBC[])(void); + +void func_8017EE2C(void *a0) { + D_8019ABBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EE68); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017EFB4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F02C); + + +void func_8017F05C(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F070); + + +extern void (*D_8019ABF4[])(void); + +void func_8017F0D8(void *a0) { + D_8019ABF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F114); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F160); + +void func_8017F1A8(void) { +} + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F1B0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F314); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F690); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F81C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017F9A4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FABC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FB38); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FBA0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FC04); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FC70); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FD14); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FE34); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8017FF48); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801AB8A8; + +void func_8017FFB8(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801AB8A8)) { + func_8012A828(arg0, &D_801AB8A8); + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", listCdBuffer); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801ABD30; + +void func_8018008C(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801ABD30); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801800CC); + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_801801CC else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_801801CC(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801ABC88; + +s32 func_8018011C(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_801801CC(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801ABC88); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801ABA48; + +void func_801801CC(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801ABA48); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_80180228(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + *(s32 *)((s32)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018023C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801803F0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180438); + + +extern void (*D_801A3DE8[])(void); + +void func_80180584(void *a0) { + D_801A3DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801805C0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180648); + + +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); + +void func_80180720(u8 *a0) { + u8 *p = *(u8 **)(a0 + 0x20); + u16 v = *(u16 *)(a0 + 0xFC); + *(s16 *)(a0 + 0x2) = 2; + *(s32 *)(a0 + 0x1C) = 0x50; + *(s16 *)(p + 0x12) = v; + func_8012B2CC((s32)a0); + func_8012B200(a0); + func_8012B178((s32)a0, 0xFFF00000); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180778); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80180804(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018083C); + +extern s32 func_8012BEE8(s32 arg); + extern void func_801800CC(s32 arg); + void func_801808A8(s32 arg0) { + if (func_8012BEE8(arg0)) { + func_801800CC(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801808E0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180944); + +void func_8018099C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801809A4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180A5C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180ACC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180C40); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80180ED4); + +void func_80181000(s32 arg0) { + s32 var_v1; + *(s8 *)(arg0 + 0xc1) = 0; + *(s16 *)(arg0 + 0x5e) = 0; + *(s16 *)(arg0 + 0x5c) = 0; + *(s16 *)(arg0 + 0x102) = 3; + var_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(var_v1 + 0x2c) |= 0x10; + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018102C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181164); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181284); + + +extern void (*D_801ACA6C[])(void); + +void func_80181324(void *a0) { + D_801ACA6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181360); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181434); + +void func_8018145C(void) { +} + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181464); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801815B0); + +extern void func_8012C218(void *a0); + s32 func_801816D0(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801816FC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018170C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018171C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018175C(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181790); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801817B4); + + +extern void (*D_801ACA94[])(void); + +void func_80181818(void *a0) { + D_801ACA94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181854); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801818DC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018199C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181A0C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181B04); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181C40); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181CF0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181D38); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181DD4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181E18); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80181FFC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182044); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018227C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801822C0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182444); + +extern void func_8012CBCC(s32 a0); + void func_80182484(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801824BC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182514); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018257C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801825B4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018266C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801826A4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182758); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182784); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182974); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801829B4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182A18); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182A54); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182AD4); + +extern void func_8002A04C(s32 a0); +extern void func_8012C098(void); + +void func_80182B08(s32 arg0) { + ((void (*)(void))func_8002A04C)(); + ((s32 (*)(s32))func_8012C098)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182B38); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182BAC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182CCC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182D80); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80182F20); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183014); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018317C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801832F8); + + +extern void (*D_801AD37C[])(void); + +void func_801834B4(void *a0) { + D_801AD37C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801834F0); + +void func_8018354C(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183560); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183770); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801837B0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183AE8); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183B50); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183BC8); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183D78); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80183FE0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018428C); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801843D8); + + +extern void (*D_801AD3D4[])(void); + +void func_801845B4(void *a0) { + D_801AD3D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801845F0); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_8018466C); + + +extern void (*D_801B65F0[])(void); + +void func_801846AC(void *a0) { + D_801B65F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801846E8); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_801847E4); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80184A74); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80184C08); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80184C60); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80184CDC); + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_80178D40", func_80184D20); + + diff --git a/src/ov_SC03_001/ov_SC03_001_jr_801734BC.c b/src/ov_SC03_001/ov_SC03_001_jr_801734BC.c index cc2fe2241..d1ffda008 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_801734BC.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_801734BC.c @@ -3095,2759 +3095,3 @@ void func_80178D18(void) { D_801EF464 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EE5F4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EE5F4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EE5F4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EE5F4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EE61C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EE61C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EE5D8; - -s32 func_8017A3B0(void) { - switch (D_801EE5D8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801EE614; -extern short D_801EE610; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801EE614) { - case 0: - func_800D0CA0(1); - D_801EE614 = D_801EE614 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801EE610; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801EE614 = D_801EE614 + 1; - if (D_801EE614 < 0x1E) { - return 0; - } - D_801EE614 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EE654; - extern s16 D_801EE656; - extern s16 D_801EE658; - extern s16 D_801EE64C; - extern s16 D_801EE64E; - extern s16 D_801EE650; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EE654, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EE656, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EE658, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EE64C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EE64E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EE650, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EE5DC; -extern u16 D_801EE65C; -extern u16 D_801EE65E; -extern u16 D_801EE660; -extern s16 D_801EF3F0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EF3F0 = 0; - D_801EE5DC = 0; - D_801EE65C = D_80126B5E; - D_801EE65E = D_80126B62; - D_801EE660 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190E4C[]; - extern s16 D_801EE654; - extern s16 D_801EE64C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EE654; - s16 *p78C = &D_801EE64C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EF3F0 = 1; - D_801EE5DC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EE5FC; - extern SV4_8017B368 D_801EE604; - extern s16 D_801EE654; - extern s16 D_801EE64C; - extern u16 D_80190E4C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EE5FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EE604; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EE654) = loc0; - (*(SV4_8017B368 *)&D_801EE64C) = loc1; - D_801EF3F0 = 1; - D_801EE5DC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190E4C[]; - extern s16 D_801EE654; - extern s16 D_801EE656; - extern s16 D_801EE658; - extern s16 D_801EE64C; - extern s16 D_801EE64E; - extern s16 D_801EE650; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EE654; - s16 *p78C = &D_801EE64C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EE656; - v798 = D_801EE658; - v78C = *p78C; - v78E = D_801EE64E; - v790 = D_801EE650; - __asm__ __volatile__(""); - D_801EF3F0 = 1; - D_801EE5DC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EE5DC; -extern s16 D_801EE654; -extern s16 D_801EE656; -extern s16 D_801EE658; -extern s16 D_801EE64C; -extern s16 D_801EE64E; -extern s16 D_801EE650; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EE5DC = 0; - D_801EE654 = (s16) D_80114F30; - D_801EE656 = (s16) D_80114F34; - D_801EE658 = (s16) D_80114F38; - D_801EE64C = (s16) D_80114F24; - D_801EE64E = (s16) D_80114F28; - D_801EE650 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EE66C; -extern s16 D_801EE66E; -extern s16 D_801EE670; -extern s16 D_801EE674; -extern s16 D_801EE676; -extern s16 D_801EE678; - -void func_8017B824(void) { - D_801EE66C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EE66E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EE670 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EE674 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EE676 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EE678 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EE66C; -extern s16 D_801EE66E; -extern s16 D_801EE670; -extern s16 D_801EE674; -extern s16 D_801EE676; -extern s16 D_801EE678; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EE66C; - D_80114F34 = D_801EE66E; - D_80114F38 = D_801EE670; - D_80114F24 = D_801EE674; - D_80114F28 = D_801EE676; - D_80114F2C = D_801EE678; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EE654), src[8..15] -> (*(S8_8017B8E8 *)&D_801EE64C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EE654) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EE64C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EE65C; -extern u16 D_801EE65E; -extern u16 D_801EE660; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EE5DC; -extern short D_801EE664; -extern short D_801EE666; -extern short D_801EE668; -extern s16 D_801EE654; -extern s16 D_801EE656; -extern s16 D_801EE658; -extern s16 D_801EE64C; -extern s16 D_801EE64E; -extern s16 D_801EE650; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EE65C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EE65E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EE660); - (*(s16 *)&D_801EE664) = buf[0]; - (*(s16 *)&D_801EE666) = buf[1]; - (*(s16 *)&D_801EE668) = buf[2]; - D_801EE654 = D_80114F30 + buf[0]; - D_801EE5DC = 0; - D_801EE656 = D_80114F34 + buf[1]; - D_801EE658 = D_80114F38 + buf[2]; - D_801EE64C = D_80114F24 + buf[0]; - D_801EE64E = D_80114F28 + buf[1]; - D_801EE650 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EE5FC; -extern SV4 D_801EE604; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EE604) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EE5FC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EE604 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EE604)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EE5FC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EE604) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EE624[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EE624; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EE5DC; -extern s16 D_801EF3F0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EE5DC = D_801EE5DC + 1; - if (D_801EE5DC >= 0x1F) { - D_801EF3F0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EE5DC; -extern s16 D_801EF3F0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EE5DC = D_801EE5DC + 1; - if (0x18 < D_801EE5DC) { - func_8012A4BC(); - D_801EF3F0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EE5DC; -extern void (*D_801EE620)(void); -extern short D_801EE664; -extern short D_801EE666; -extern short D_801EE668; -extern s16 D_801EF3F0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EE5DC = D_801EE5DC + 1; - if (D_801EE5DC >= 0x19) { - if (D_801EE620 != 0) { - (*D_801EE620)(); - } else { - D_80114F30 = D_80114F30 + D_801EE664; - D_80114F34 = D_80114F34 + D_801EE666; - D_80114F38 = D_80114F38 + D_801EE668; - D_80114F24 = D_80114F24 + D_801EE664; - D_80114F28 = D_80114F28 + D_801EE666; - D_80114F2C = D_80114F2C + D_801EE668; - func_8012A4BC(); - } - D_801EF3F0 = 0; - } -} - - - -extern void (*D_80190EEC[])(void); - -void func_8017BE60(void *a0) { - D_80190EEC[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_80190F8C[])(void); - -void func_8017BE9C(void *a0) { - D_80190F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190F94[])(void); - -void func_8017BED8(void *a0) { - D_80190F94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190F9C[])(void); - -void func_8017BF14(void *a0) { - D_80190F9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017BF50); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C094); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C100); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C1AC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C1EC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C2B0); - - -extern void (*D_80190FBC[])(void); - -void func_8017C338(void *a0) { - D_80190FBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C374); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C538); - - -extern void (*D_80190FC4[])(void); - -void func_8017C5CC(void *a0) { - D_80190FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80190FB0; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80190FB0, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C6AC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017C710); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017D5F0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017D734); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017D8A8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DA48); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DB6C); - -void func_8017DC48(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DC50); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DCE4); - - -extern void (*D_8019106C[])(void); - -void func_8017DDEC(void *a0) { - D_8019106C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_8019105C; - -void func_8017DE28(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8019105C | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */ - - -extern void (*D_801910A4[])(void); - -void func_8017DEAC(void *a0) { - D_801910A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DEE8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017DF78); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E1B4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E204); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E2C0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E3D8); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801EE918; -extern u16 D_801910AC[]; -extern u16 D_801EE91C[]; -extern s32 D_801910CC; - -extern void func_800183E0(s32 a0); - -void func_8017E408(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_801910AC; - base = D_801EE918 >> 8; - p = D_801EE91C; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_801910CC); - D_801EE918 = D_801EE918 + 0x100; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E494); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E508); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E578); - -extern void func_800D1EBC(void); - void func_8017E628(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E648); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E69C); - - -extern void (*D_801910EC[])(void); - -void func_8017E720(void *a0) { - D_801910EC[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_801910F4[])(void); - -void func_8017E75C(void *a0) { - D_801910F4[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80191100[])(void); - -void func_8017E798(void *a0) { - D_80191100[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8019110C[])(void); - -void func_8017E7D4(void *a0) { - D_8019110C[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E810(void) { - D_80127050 = 1; - } - - - -extern void (*D_801913C0[])(void); - -void func_8017E824(void *a0) { - D_801913C0[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E860(s32 *a0) { - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E874); - - -extern void (*D_801913C8[])(void); - -void func_8017E8AC(void *a0) { - D_801913C8[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E8E8(u8 *a0) { - *(s8 *)(a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8017E8FC(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017E91C); - - -extern void (*D_801913D0[])(void); - -void func_8017E9E0(void *a0) { - D_801913D0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EA1C); - -void func_8017EA50(u8 *a0) { - *(s8 *)(a0 + 0xa0) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EA58); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EB98); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_801913D4; - void func_8017ED8C(void *a0) { - *(short *)((char *)a0 + 0x2) = 2; - func_80187778(a0, &D_801913D4); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EDB8); - -extern void (*D_801914A8[])(void); - -void func_8017EEA8(void *a0) { - D_801914A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EEE4); - -extern s32 func_800D0EC4(void); - s32 func_8017EF10(void) { - return (func_800D0EC4() == 0); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EF30); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017EFD4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F058); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F0EC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F13C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F1F0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F258); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F2AC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F368); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F750); - - -extern void (*D_801918FC[])(void); - -void func_8017F7C8(void *a0) { - D_801918FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017F804); - - -extern void (*D_80191928[])(void); - -void func_8017F920(void *a0) { - D_80191928[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191930[])(void); - -void func_8017F95C(void *a0) { - D_80191930[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191940[])(void); - -void func_8017F998(void *a0) { - D_80191940[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191950[])(void); - -void func_8017F9D4(void *a0) { - D_80191950[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017FA10(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017FA18); - - -extern void (*D_80191960[])(void); - -void func_8017FBC4(void *a0) { - D_80191960[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017FC00); - -extern s32 D_801915FC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FD5C(void) { - D_801EEAE8 = &D_801915FC; - func_8017F1F0(0x474, 0x4B0); -} - - -extern s32 D_80191634; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FD90(void) { - D_801EEAE8 = &D_80191634; - func_8017F1F0(0x474, 0x4EC); -} - - -extern s32 D_8019166C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FDC4(void) { - D_801EEAE8 = &D_8019166C; - func_8017F1F0(0x474, 0x4B0); -} - - -extern s32 D_80191694; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FDF8(void) { - D_801EEAE8 = &D_80191694; - func_8017F1F0(0x474, 0x4B0); -} - - - -extern s32 D_801916CC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FE2C(void) { - D_801EEAE8 = &D_801916CC; - func_8017F1F0(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017FE60); - - -extern s32 D_80191744; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FED4(void) { - D_801EEAE8 = &D_80191744; - func_8017F1F0(0x474, 0x1A4); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017FF08); - - -extern s32 D_8019179C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FF54(void) { - D_801EEAE8 = &D_8019179C; - func_8017F1F0(0x12c, 0x1A4); -} - - - -extern s32 D_801917EC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FF88(void) { - D_801EEAE8 = &D_801917EC; - func_8017F1F0(0x474, 0x4B0); -} - - - -extern s32 D_8019184C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FFBC(void) { - D_801EEAE8 = &D_8019184C; - func_8017F1F0(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8017FFF0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", listCdBuffer); - -extern s32 D_80191894; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8018003C(void) { - D_801EEAE8 = &D_80191894; - func_8017F1F0(0x564, 0x1A4); -} - - -s32 func_80180070(void) { - return -1; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180078); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180134); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801801E0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180224); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180340); - - -extern void func_8012B414(int a0); - void func_801803DC(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180410); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180488); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801804D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180574); - -void func_801805EC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80191978[])(void); - -void func_801805F8(void *a0) { - D_80191978[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180634); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018069C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801806E8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180728); - -void func_80180770(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - -extern void (*D_8019198C[])(void); - -void func_8018077C(void *a0) { - D_8019198C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801807B8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180820); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180884); - -void func_801808F0(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_801919A0[])(void); - -void func_801808FC(void *a0) { - D_801919A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180938); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018098C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801809D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180A10); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180A58); - - -extern void (*D_80191B0C[])(void); - -void func_80180A88(void *a0) { - D_80191B0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180AC4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180B1C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180B5C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180BCC); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801C3B38; - void func_80180C3C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - func_8012A828((int)arg0, (int)&D_801C3B38); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180C68); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180CD4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180D34); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180D5C); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80180D9C(void) { - if ((func_80029178(0x110) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180DD8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180E10); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180E68); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180ECC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180FA0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80180FF8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181078); - -void func_801810EC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80191B30[])(void); - -void func_801810F8(void *a0) { - D_80191B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181134); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018119C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181200); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018126C); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191B3C; - void func_80181298(short *param_1) { - *(short *)((char *)param_1 + 0x2) = 0x3; - func_80187778(param_1, &D_80191B3C); - } - - - -extern void (*D_80191C08[])(void); - -void func_801812C4(void *a0) { - D_80191C08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181300); - -extern s32 func_8014CB1C(void); - int func_80181374(void) { - return func_8014CB1C() != 0; - } - - - -extern void func_8014B2A8(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80181394(void) { - func_8014B2A8(); - ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191BC0; - void func_801813C0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_80191BC0); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801813F0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181458); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801814C4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018153C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801815A0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018166C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801816D8); - - -extern void (*D_80191C20[])(void); - -void func_801817C4(void *a0) { - D_80191C20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181800); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181864); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191C28; - void func_801818E0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_80187778((s32 *)a0, (s32)&D_80191C28); - } - - - -extern void (*D_80191C90[])(void); - -void func_8018190C(void *a0) { - D_80191C90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181948); - -void func_80181988(void *a0) { - *(short *)((char *)a0 + 0x2) = 4; - *(short *)((char *)a0 + 0x34) = 0; - *(int *)((char *)a0 + 0x1c) = 0x3c; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801819A0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801819E0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181A18); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181A68); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181B40); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181BC0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181C38); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181CAC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181D04); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191CA4; - void func_80181D8C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80187778((s32 *)a0, (s32)&D_80191CA4); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181DB8); - - -extern void (*D_80191D3C[])(void); - -void func_80181ED4(void *a0) { - D_80191D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181F10); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191CDC; - void func_80181F74(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC(a0, &D_80191CDC); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181FA0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80181FE0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182058); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182148); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801821C0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182254); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182294); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182304); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182398); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182400); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191D14; - void func_80182450(short *param) { - param[1] = 0xB; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80191D14); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018247C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801824DC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182548); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801825A8); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191D6C; - void func_8018260C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80187778((s32 *)a0, (s32)&D_80191D6C); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182638); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018268C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801826B8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182704); - - -extern void (*D_80191E0C[])(void); - -void func_80182824(void *a0) { - D_80191E0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182860); - -extern s32 D_801DD064; -extern s32 D_801D6014; - -void func_80182898(void) { - D_801D6014 = D_801DD064; -} - - -extern s32 D_801EEAF8; -extern s32 D_801D6014; - -void func_801828B0(void) { - *(s32 *)&D_801D6014 = D_801EEAF8; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801828C8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182928); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182968); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801829A8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182A34); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182A74); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182AEC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182B78); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182BB8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182CC4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182D04); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182DFC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182E70); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182EE4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80182F3C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183168); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191E38; - void func_801831F0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80187778((s32 *)a0, (s32)&D_80191E38); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018321C); - - -extern void (*D_801922F0[])(void); - -void func_8018333C(void *a0) { - D_801922F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183378); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191E70; - void func_801833DC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC((s32 *)a0, (s32)&D_80191E70); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183408); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183448); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801834C0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801835B0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183628); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801836BC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183708); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183778); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183804); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018386C); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801922C8; - void func_801838BC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xB; - func_80178CBC((s32 *)a0, (s32)&D_801922C8); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801838E8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183948); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801839BC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183A14); - - -extern void (*D_80192418[])(void); - -void func_80183A88(void *a0) { - D_80192418[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183AC4); - - -extern s32 D_801DD950; -extern s32 D_801DAAAC; - -void func_80183AFC(void) { - D_801DAAAC = D_801DD950; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183B14); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183B74); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80183BB4(void) { - if ((func_80029178(0x113) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183BF0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183C30); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183CC8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183D08); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183D78); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183E14); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183EE4); - -extern s32 D_80192434; -extern void func_80187778(s32 *a0, s32 a1); - -void func_80183F58(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 0x2; - func_80187778(arg0, &D_80192434); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183F84); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80183FF4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184054); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801840B8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801840E4); - - -extern void (*D_80192510[])(void); - -void func_80184210(void *a0) { - D_80192510[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_8019246C; - void func_8018424C(short *a0) { - *(short *)((char *)a0 + 0x2) = 4; - ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_8019246C); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184278); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801924B8; - void func_801842A4(short *param) { - param[1] = 0xC; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_801924B8); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801842D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184310); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184350); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801843DC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018444C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184498); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018451C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018456C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801845B8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801845FC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184648); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801846A0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801846F0); - - -extern void (*D_80192544[])(void); - -void func_80184748(void *a0) { - D_80192544[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184784(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184794); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801847D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184840); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801848A0); - - -extern void (*D_80192624[])(void); - -void func_80184900(void *a0) { - D_80192624[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801925AC; - void func_8018493C(short *param) { - param[1] = 0x5; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_801925AC); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184968); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_801849E0(void) { - if ((func_80029178(0x115) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184A1C); - -extern s32 func_80187A64(s32); - extern void func_80184840(s32); - void func_80184A8C(s32 arg0) { - if (func_80187A64(arg0)) { - func_80184840(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184AC4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184B60); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184BB0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184BF4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184CF0); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192640; - void func_80184D64(short *param_1) { - *(short *)((char *)param_1 + 2) = 1; - func_80187778((s32 *)param_1, (s32)&D_80192640); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184D90); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184DDC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184F18); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80184F64); - - -extern void (*D_80192828[])(void); - -void func_801850A0(void *a0) { - D_80192828[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801850DC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018511C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018515C); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_8018519C(void) { - if ((func_80029178(0x116) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); - return 1; - } - return 0; - } - - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801926F8; - void func_801851D8(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x8; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_801926F8); - } - - -extern void func_80178CBC(s32 *a0, s32 a1); -extern short D_80192740; - -void func_80185208(void *a0) { - *(short *)((char *)a0 + 0x2) = 0xe; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(int, int))func_80178CBC)((int)a0, (int)&D_80192740); -} - - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80192748; - void func_80185238(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_80192748); - } - - -extern void func_80178CBC(s32 *a0, s32 a1); -extern short D_801927B8; - -void func_80185268(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xB; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(void *, s32))func_80178CBC)(a0, &D_801927B8); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185298); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801852E4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185334); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185380); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801853D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018541C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185474); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801854D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185528); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801855CC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801856A8); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192864; - void func_80185874(short *param_1) { - *(short *)((char *)param_1 + 2) = 0x2; - ((void (*)(int, int))func_80187778)((int)param_1, (int)&D_80192864); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192864; - void func_801858A0(short *param_1) { - param_1[1] = 0x7; - func_80187778(param_1, &D_80192864); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192864; - void func_801858CC(short *param_1) { - *(short *)((char *)param_1 + 2) = 0x12; - func_80187778((s32 *)param_1, (int)&D_80192864); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192864; - void func_801858F8(short *param_1) { - *(short *)((char *)param_1 + 0x2) = 0x17; - func_80187778(param_1, &D_80192864); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192864; - void func_80185924(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x1F; - func_80187778((s32 *)a0, (s32)&D_80192864); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185950); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801859AC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185B54); - - -extern void (*D_801928D8[])(void); - -void func_80185C60(void *a0) { - D_801928D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185C9C); - - -extern void (*D_80192968[])(void); - -void func_80185CD8(void *a0) { - D_80192968[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80128C98(s32 arg); - extern void func_801EF734(void *a0); - void func_80185D14(void *a0) { - if (func_80128C98(1)) { - ((void (*)(void *))func_801EF734)(a0); - } - } - - - -extern s32 func_80128C98(s32 arg); - extern void func_801EF904(void *a0); - void func_80185D50(void *a0) { - if (func_80128C98(1)) { - ((void (*)(void *))func_801EF904)(a0); - } - } - - - -extern s32 func_80128C98(s32 arg); - extern void func_801EF46C(void *a0); - void func_80185D8C(void *a0) { - if (func_80128C98(1)) { - ((void (*)(void *))func_801EF46C)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185DC8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185E44); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185EC8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185F3C); - -void func_80185F9C(void) { -} - - -void func_80185FA4(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - - -extern s32 func_80128C98(s32 arg); - extern void func_801EF58C(void *a0); - void func_80185FB4(void *a0) { - if (func_80128C98(1)) { - ((void (*)(void *))func_801EF58C)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80185FF0); - -extern s32 func_80128C98(s32 arg); -extern void func_801EF624(void *a0); - -void func_80186064(void *a0) { - if (func_80128C98(1)) { - ((void (*)(void *))func_801EF624)(a0); - } -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80192888; - void func_801860A0(short *param_1) { - param_1[1] = 0x1d; - ((void (*)(s32, s32))func_80178CBC)((int)param_1, (int)&D_80192888); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801860CC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186124); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018617C); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80192970; - void func_80186288(short *param_1) { - param_1[1] = 2; - func_80187778(param_1, &D_80192970); - } - - - -extern void (*D_801929D4[])(void); - -void func_801862B4(void *a0) { - D_801929D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801862F0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018631C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018640C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018644C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186498); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801864E8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186568); - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_801929E8; - void func_801865E0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_80187778((s32 *)a0, (s32)&D_801929E8); - } - - - -extern void (*D_80192A50[])(void); - -void func_8018660C(void *a0) { - D_80192A50[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80192A18; - void func_80186648(short *param) { - param[1] = 0x4; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80192A18); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186674); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801866B4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186700); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186758); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801867A8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186828); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186890); - - -extern void (*D_80192AE8[])(void); - -void func_801868E0(void *a0) { - D_80192AE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192B10[])(void); - -void func_8018691C(void *a0) { - D_80192B10[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); -extern short D_80192AC8; - -void func_80186958(short *param) { - param[1] = 0x3; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80192AC8); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186984); - -extern s32 func_80029504(void); - extern void func_80186890(s32 arg0); - void func_801869C8(s32 arg0) { - if ((u32)func_80029504() >= 0x1E) { - func_80186890(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186A04); - -void func_80186A6C(void) { -} - -void func_80186A74(void) { -} - -void func_80186A7C(void) { -} - -void func_80186A84(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186A8C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186B54); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186BEC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186C54); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186CD0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186D18); - - -extern void func_8012B2CC(s32 arg); - void func_80186D7C(void *arg0) { - s32 *p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186DAC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186DDC); - - -extern void (*D_801C063C[])(void); - -void func_80186F4C(void *a0) { - D_801C063C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80186F88); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187004); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187074); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018708C(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801870B0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801871E4); - -void func_8018724C(void) { -} - -void func_80187254(void) { -} - -void func_8018725C(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -void func_8018726C(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018727C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187318); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187344); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187370); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018739C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187420); - -extern s32 func_80187420(s32 arg); -extern void func_80187584(void *a0); - -void func_80187550(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_80187420((s32)a0); - func_80187584(a0); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187584); - - -extern short D_800BA2BA; - s32 func_801875C4(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801C0B00[])(void); - -void func_801875EC(void *a0) { - D_801C0B00[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80187628(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187630); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018766C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187690); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801876E8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187750); - -void func_80187770(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187778); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801877C0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018781C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187890); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187904); - - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_80187960(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187994); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187A64); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187C2C); - - -extern void (*D_801C0B20[])(void); - -void func_80187C74(void *a0) { - D_801C0B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80187CB0(void) { -} - -void func_80187CB8(void) { -} - -void func_80187CC0(void) { -} - -void func_80187CC8(void) { -} - -void func_80187CD0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187CD8); - -void func_80187D1C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187D24); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187DAC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80187F84); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188124); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801881A0); - -extern s32 func_801889AC(void); - void func_8018826C(void) { - func_801889AC(); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018828C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018835C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801883C4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188438); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188498); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188518); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188570); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801885D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188618); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188668); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801886A0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018872C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801887D0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188830); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801889AC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801889E0); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188A14); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188A78); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188AEC); - - -extern void (*D_801C0E1C[])(void); - -void func_80188B44(void *a0) { - D_801C0E1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188B80); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188BFC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188D1C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188D68); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188E74); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188ED0); - -extern s16 D_801EEB10; - s32 func_80188F10(void) { - return D_801EEB10; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188F20); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188F6C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80188FDC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_80189030); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_801898E4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018A270); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018A3A8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018ABAC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018AEE8); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018B238); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018B478); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018B644); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018B8DC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018BCD4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018C000); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018C89C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018C8D4); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018C914); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018C960); - - -extern void (*D_801EB364[])(void); - -void func_8018CB74(void *a0) { - D_801EB364[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801EB344[]; - -void func_8018CBB0(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801EB344[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801EB344)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801EB344[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801EB378[])(void); - -void func_8018CC74(void *a0) { - D_801EB378[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8018CBB0(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_8018CCB0(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_8018CBB0(param_1, -0x80); - func_8018CBB0(param_1, -0x30); - func_8018CBB0(param_1, 0x20); - func_8018CBB0(param_1, 0x70); - func_8018CBB0(param_1, 0xc0); - } - if (1 < uVar1) { - func_8018CBB0(param_1, -0x58); - func_8018CBB0(param_1, -0x8); - func_8018CBB0(param_1, 0x48); - func_8018CBB0(param_1, 0x98); - func_8018CBB0(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018CBB0(s32, s32); - -void func_8018CD98(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_8018CBB0(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801EB36C; - -void func_8018CDD8(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801EB36C, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018CE60(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018CEA8); - - -extern void (*D_801EB48C[])(void); - -void func_8018CF54(void *a0) { - D_801EB48C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018CF90); - -void func_8018CFF4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018CFFC); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018D048); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018D088); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801734BC", func_8018D0E4); - diff --git a/src/ov_SC03_001/ov_SC03_001_jr_80178D40.c b/src/ov_SC03_001/ov_SC03_001_jr_80178D40.c new file mode 100644 index 000000000..db5a75b02 --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_80178D40.c @@ -0,0 +1,6225 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801906F4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801ED948; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801906E8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8019072C[]; +extern unsigned short D_80190734[]; +extern unsigned short D_8019073C[]; +extern unsigned char D_801ED950[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801ED948; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80190744[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EDA84; +extern M2C_UNK D_801EDA88; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EDA10; +extern void (*D_80190774[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EDA8C[]; +extern u8 D_801EDA94[]; +extern u8 D_801EDA44[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8019077C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80190798[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801907A0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190808[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801907AC; +extern u8 D_801907B8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8019083C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80190844[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80190898[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801908CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801908BC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801908E8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80190960[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190968[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80190970[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190978[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80190980[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190988[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80190994[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801909A0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801909AC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801909BC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801909CC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801909D4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801909DC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801909E4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801909EC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801909F4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801909FC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80190A04[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190A0C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80190A14[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190A1C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80190A24[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190A2C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80190A34[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190A3C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80190A44[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190A4C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80190A54[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190A5C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80190A64[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190A6C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80190A74[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190A7C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80190AC0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80190A84; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80190AF0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190B2C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80190B84[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80190B94[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80190B9C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80190D04[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190D10[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801ECAE0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EF3F0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801EF464; +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EF464) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EF464)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EE1C8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EF464) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EF3A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EF3A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EF464) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EF464) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EE624[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EE1C8; + extern s32 D_801EE1CC; + extern s32 D_801EE5E0; + extern s16 D_801EE5E4; + extern s16 D_801EE5E8; + extern s16 D_801EE5EC; + extern s16 D_801EE5F0; + extern s32 D_801EE5F8; + extern s32 D_801EE5FC; + extern s32 D_801EE60C; + extern s16 D_801EE610; + extern s16 D_801EE614; + extern s32 D_801EE618; + extern s32 D_801EE620; + extern s32 D_801EE624[10]; + extern s32 D_801EF2D8; + extern s16 D_801EF3A8; + extern s32 D_801EF3EC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EF3A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EE5E0); + D_801EE5E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EE5EC, D_801EE5F0 ? 0x48 : 0x40); + (*(s16*)&D_801EF464) = 2; + break; + case 0: + func_80179B28(D_801EE5E0); + D_801EE5E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EE5E4, D_801EE5E8 ? 0x48 : 0x40); + (*(s16*)&D_801EF464) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EF2D8 != 0) { + func_80179B28(D_801EE5E0); + D_801EE5E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EE5E4, D_801EE5E8 ? 0x48 : 0x40); + (*(s16*)&D_801EF464) = 1; + } else { + (*(s16*)&D_801EF464) = 3; + } + break; + case 0x32: + func_80179B28(D_801EE5E0); + D_801EE5E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EE5E4, + D_801EE5E8 ? 0x48 : 0x40); + (*(s16*)&D_801EF464) = 1; + break; + case 2: + func_80179B28(D_801EE5E0); + if (D_801EE5F8 != 0) { + D_801EE1C8 = D_801EE5F8; + D_801EE5F8 = 0; + (*(s16*)&D_801EF464) = 3; + return; + } + (*(s16*)&D_801EF464) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EF464) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EF464) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EF464) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EF464) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EF464) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EF464) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EF464) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EF464) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EF464) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EF464) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EF464) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x1B: + D_801EE618 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EF464) = 4; + D_801EE1CC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EF464) = 5; + D_801EE60C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EE60C = (s32)func_8017A3B0; + (*(s16*)&D_801EF464) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x24: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EF464) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EF464) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EF464) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EF464) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EF464) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EF464) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EF464) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EF464) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EF464) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EE5FC); + (*(s16*)&D_801EF464) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EE5FC); + (*(s16*)&D_801EF464) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EE5FC); + (*(s16*)&D_801EF464) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EE5FC); + (*(s16*)&D_801EF464) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + break; + case 0x4E: + D_801EE620 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x2B: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EF464) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EF3EC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EF464) = 3; + break; + case 0x34: + (*(s16*)&D_801EF464) = 3; + D_801EE1C8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EE5F8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EF464) = 3; + D_801EE1C8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EF464) = 3; + D_801EE1C8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EE1C8 = *(s32 *)(D_801EE1C8 + 4); + return; + case 0x37: + (*(s16*)&D_801EF464) = 3; + D_801EE5E4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EE5E8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EF464) = 3; + D_801EE5EC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EE5F0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EF464) = 3; + D_801EE5E4 = w1; + D_801EE5E8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EF464) = 3; + D_801EE5EC = w2; + D_801EE5F0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + case 0x43: + D_801EE60C = (s32)func_8017A3D8; + D_801EE614 = 0; + (*(s16*)&D_801EF464) = 5; + D_801EE610 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EF464) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EF464) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EF464) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EE624; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EF464) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EE624; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EF464) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EE624[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EF464) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EE624; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EF464) = 3; + break; + default: + break; + } +Lend: + D_801EE1C8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EE5F4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EE5F4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EE5F4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EE5F4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EE61C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EE61C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EE5D8; + +s32 func_8017A3B0(void) { + switch (D_801EE5D8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801EE614; +extern short D_801EE610; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801EE614) { + case 0: + func_800D0CA0(1); + D_801EE614 = D_801EE614 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801EE610; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801EE614 = D_801EE614 + 1; + if (D_801EE614 < 0x1E) { + return 0; + } + D_801EE614 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EE654; + extern s16 D_801EE656; + extern s16 D_801EE658; + extern s16 D_801EE64C; + extern s16 D_801EE64E; + extern s16 D_801EE650; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EE654, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EE656, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EE658, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EE64C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EE64E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EE650, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EE5DC; +extern u16 D_801EE65C; +extern u16 D_801EE65E; +extern u16 D_801EE660; +extern s16 D_801EF3F0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EF3F0 = 0; + D_801EE5DC = 0; + D_801EE65C = D_80126B5E; + D_801EE65E = D_80126B62; + D_801EE660 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190E4C[]; + extern s16 D_801EE654; + extern s16 D_801EE64C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EE654; + s16 *p78C = &D_801EE64C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EF3F0 = 1; + D_801EE5DC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EE5FC; + extern SV4_8017B368 D_801EE604; + extern s16 D_801EE654; + extern s16 D_801EE64C; + extern u16 D_80190E4C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EE5FC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EE604; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EE654) = loc0; + (*(SV4_8017B368 *)&D_801EE64C) = loc1; + D_801EF3F0 = 1; + D_801EE5DC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190E4C[]; + extern s16 D_801EE654; + extern s16 D_801EE656; + extern s16 D_801EE658; + extern s16 D_801EE64C; + extern s16 D_801EE64E; + extern s16 D_801EE650; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EE654; + s16 *p78C = &D_801EE64C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EE656; + v798 = D_801EE658; + v78C = *p78C; + v78E = D_801EE64E; + v790 = D_801EE650; + __asm__ __volatile__(""); + D_801EF3F0 = 1; + D_801EE5DC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EE5DC; +extern s16 D_801EE654; +extern s16 D_801EE656; +extern s16 D_801EE658; +extern s16 D_801EE64C; +extern s16 D_801EE64E; +extern s16 D_801EE650; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EE5DC = 0; + D_801EE654 = (s16) D_80114F30; + D_801EE656 = (s16) D_80114F34; + D_801EE658 = (s16) D_80114F38; + D_801EE64C = (s16) D_80114F24; + D_801EE64E = (s16) D_80114F28; + D_801EE650 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EE66C; +extern s16 D_801EE66E; +extern s16 D_801EE670; +extern s16 D_801EE674; +extern s16 D_801EE676; +extern s16 D_801EE678; + +void func_8017B824(void) { + D_801EE66C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EE66E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EE670 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EE674 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EE676 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EE678 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EE66C; +extern s16 D_801EE66E; +extern s16 D_801EE670; +extern s16 D_801EE674; +extern s16 D_801EE676; +extern s16 D_801EE678; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EE66C; + D_80114F34 = D_801EE66E; + D_80114F38 = D_801EE670; + D_80114F24 = D_801EE674; + D_80114F28 = D_801EE676; + D_80114F2C = D_801EE678; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EE654), src[8..15] -> (*(S8_8017B8E8 *)&D_801EE64C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EE654) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EE64C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EE65C; +extern u16 D_801EE65E; +extern u16 D_801EE660; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EE5DC; +extern short D_801EE664; +extern short D_801EE666; +extern short D_801EE668; +extern s16 D_801EE654; +extern s16 D_801EE656; +extern s16 D_801EE658; +extern s16 D_801EE64C; +extern s16 D_801EE64E; +extern s16 D_801EE650; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EE65C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EE65E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EE660); + (*(s16 *)&D_801EE664) = buf[0]; + (*(s16 *)&D_801EE666) = buf[1]; + (*(s16 *)&D_801EE668) = buf[2]; + D_801EE654 = D_80114F30 + buf[0]; + D_801EE5DC = 0; + D_801EE656 = D_80114F34 + buf[1]; + D_801EE658 = D_80114F38 + buf[2]; + D_801EE64C = D_80114F24 + buf[0]; + D_801EE64E = D_80114F28 + buf[1]; + D_801EE650 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EE5FC; +extern SV4 D_801EE604; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EE604) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EE5FC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EE604 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EE604)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EE5FC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EE604) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EE624[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EE624; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EE5DC; +extern s16 D_801EF3F0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EE5DC = D_801EE5DC + 1; + if (D_801EE5DC >= 0x1F) { + D_801EF3F0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EE5DC; +extern s16 D_801EF3F0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EE5DC = D_801EE5DC + 1; + if (0x18 < D_801EE5DC) { + func_8012A4BC(); + D_801EF3F0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EE5DC; +extern void (*D_801EE620)(void); +extern short D_801EE664; +extern short D_801EE666; +extern short D_801EE668; +extern s16 D_801EF3F0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EE5DC = D_801EE5DC + 1; + if (D_801EE5DC >= 0x19) { + if (D_801EE620 != 0) { + (*D_801EE620)(); + } else { + D_80114F30 = D_80114F30 + D_801EE664; + D_80114F34 = D_80114F34 + D_801EE666; + D_80114F38 = D_80114F38 + D_801EE668; + D_80114F24 = D_80114F24 + D_801EE664; + D_80114F28 = D_80114F28 + D_801EE666; + D_80114F2C = D_80114F2C + D_801EE668; + func_8012A4BC(); + } + D_801EF3F0 = 0; + } +} + + + +extern void (*D_80190EEC[])(void); + +void func_8017BE60(void *a0) { + D_80190EEC[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_80190F8C[])(void); + +void func_8017BE9C(void *a0) { + D_80190F8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190F94[])(void); + +void func_8017BED8(void *a0) { + D_80190F94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190F9C[])(void); + +void func_8017BF14(void *a0) { + D_80190F9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017BF50); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C094); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C100); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C1AC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C1EC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C2B0); + + +extern void (*D_80190FBC[])(void); + +void func_8017C338(void *a0) { + D_80190FBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C374); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C538); + + +extern void (*D_80190FC4[])(void); + +void func_8017C5CC(void *a0) { + D_80190FC4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80190FB0; + +void func_8017C608(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80190FB0, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C6AC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017C710); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017D5F0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017D734); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017D8A8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DA48); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DB6C); + +void func_8017DC48(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DC50); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DCE4); + + +extern void (*D_8019106C[])(void); + +void func_8017DDEC(void *a0) { + D_8019106C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_8019105C; + +void func_8017DE28(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8019105C | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */ + + +extern void (*D_801910A4[])(void); + +void func_8017DEAC(void *a0) { + D_801910A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DEE8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017DF78); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E1B4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E204); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E2C0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E3D8); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801EE918; +extern u16 D_801910AC[]; +extern u16 D_801EE91C[]; +extern s32 D_801910CC; + +extern void func_800183E0(s32 a0); + +void func_8017E408(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_801910AC; + base = D_801EE918 >> 8; + p = D_801EE91C; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_801910CC); + D_801EE918 = D_801EE918 + 0x100; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E494); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E4E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E508); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E578); + +extern void func_800D1EBC(void); + void func_8017E628(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E648); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E69C); + + +extern void (*D_801910EC[])(void); + +void func_8017E720(void *a0) { + D_801910EC[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_801910F4[])(void); + +void func_8017E75C(void *a0) { + D_801910F4[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80191100[])(void); + +void func_8017E798(void *a0) { + D_80191100[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8019110C[])(void); + +void func_8017E7D4(void *a0) { + D_8019110C[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017E810(void) { + D_80127050 = 1; + } + + + +extern void (*D_801913C0[])(void); + +void func_8017E824(void *a0) { + D_801913C0[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E860(s32 *a0) { + *(u8 *)((s32)a0 + 0x214) += 1; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E874); + + +extern void (*D_801913C8[])(void); + +void func_8017E8AC(void *a0) { + D_801913C8[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E8E8(u8 *a0) { + *(s8 *)(a0 + 0x214) += 1; + } + + +extern void func_8016F0E4(void); + void func_8017E8FC(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017E91C); + + +extern void (*D_801913D0[])(void); + +void func_8017E9E0(void *a0) { + D_801913D0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EA1C); + +void func_8017EA50(u8 *a0) { + *(s8 *)(a0 + 0xa0) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EA58); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EB98); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_801913D4; + void func_8017ED8C(void *a0) { + *(short *)((char *)a0 + 0x2) = 2; + func_80187778(a0, &D_801913D4); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EDB8); + +extern void (*D_801914A8[])(void); + +void func_8017EEA8(void *a0) { + D_801914A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EEE4); + +extern s32 func_800D0EC4(void); + s32 func_8017EF10(void) { + return (func_800D0EC4() == 0); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EF30); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017EFD4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F058); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F0EC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F13C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F1F0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F258); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F2AC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F368); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F750); + + +extern void (*D_801918FC[])(void); + +void func_8017F7C8(void *a0) { + D_801918FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017F804); + + +extern void (*D_80191928[])(void); + +void func_8017F920(void *a0) { + D_80191928[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80191930[])(void); + +void func_8017F95C(void *a0) { + D_80191930[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80191940[])(void); + +void func_8017F998(void *a0) { + D_80191940[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80191950[])(void); + +void func_8017F9D4(void *a0) { + D_80191950[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017FA10(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017FA18); + + +extern void (*D_80191960[])(void); + +void func_8017FBC4(void *a0) { + D_80191960[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017FC00); + +extern s32 D_801915FC; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FD5C(void) { + D_801EEAE8 = &D_801915FC; + func_8017F1F0(0x474, 0x4B0); +} + + +extern s32 D_80191634; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FD90(void) { + D_801EEAE8 = &D_80191634; + func_8017F1F0(0x474, 0x4EC); +} + + +extern s32 D_8019166C; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FDC4(void) { + D_801EEAE8 = &D_8019166C; + func_8017F1F0(0x474, 0x4B0); +} + + +extern s32 D_80191694; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FDF8(void) { + D_801EEAE8 = &D_80191694; + func_8017F1F0(0x474, 0x4B0); +} + + + +extern s32 D_801916CC; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FE2C(void) { + D_801EEAE8 = &D_801916CC; + func_8017F1F0(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017FE60); + + +extern s32 D_80191744; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FED4(void) { + D_801EEAE8 = &D_80191744; + func_8017F1F0(0x474, 0x1A4); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017FF08); + + +extern s32 D_8019179C; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FF54(void) { + D_801EEAE8 = &D_8019179C; + func_8017F1F0(0x12c, 0x1A4); +} + + + +extern s32 D_801917EC; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FF88(void) { + D_801EEAE8 = &D_801917EC; + func_8017F1F0(0x474, 0x4B0); +} + + + +extern s32 D_8019184C; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8017FFBC(void) { + D_801EEAE8 = &D_8019184C; + func_8017F1F0(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8017FFF0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", listCdBuffer); + +extern s32 D_80191894; +extern s32 D_801EEAE8; +extern void func_8017F1F0(s32 arg0, s32 arg1); + +void func_8018003C(void) { + D_801EEAE8 = &D_80191894; + func_8017F1F0(0x564, 0x1A4); +} + + +s32 func_80180070(void) { + return -1; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180078); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180134); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801801E0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180224); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180340); + + +extern void func_8012B414(int a0); + void func_801803DC(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180410); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180488); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801804D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180574); + +void func_801805EC(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + + +extern void (*D_80191978[])(void); + +void func_801805F8(void *a0) { + D_80191978[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180634); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018069C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801806E8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180728); + +void func_80180770(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + +extern void (*D_8019198C[])(void); + +void func_8018077C(void *a0) { + D_8019198C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801807B8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180820); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180884); + +void func_801808F0(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + + +extern void (*D_801919A0[])(void); + +void func_801808FC(void *a0) { + D_801919A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180938); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018098C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801809D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180A10); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180A58); + + +extern void (*D_80191B0C[])(void); + +void func_80180A88(void *a0) { + D_80191B0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180AC4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180B1C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180B5C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180BCC); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801C3B38; + void func_80180C3C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 3; + func_8012A828((int)arg0, (int)&D_801C3B38); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180C68); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180CD4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180D34); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180D5C); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80180D9C(void) { + if ((func_80029178(0x110) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180DD8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180E10); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180E68); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180ECC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180FA0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80180FF8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181078); + +void func_801810EC(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + + +extern void (*D_80191B30[])(void); + +void func_801810F8(void *a0) { + D_80191B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181134); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018119C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181200); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018126C); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80191B3C; + void func_80181298(short *param_1) { + *(short *)((char *)param_1 + 0x2) = 0x3; + func_80187778(param_1, &D_80191B3C); + } + + + +extern void (*D_80191C08[])(void); + +void func_801812C4(void *a0) { + D_80191C08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181300); + +extern s32 func_8014CB1C(void); + int func_80181374(void) { + return func_8014CB1C() != 0; + } + + + +extern void func_8014B2A8(void); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80181394(void) { + func_8014B2A8(); + ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191BC0; + void func_801813C0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_80191BC0); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801813F0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181458); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801814C4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018153C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801815A0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018166C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801816D8); + + +extern void (*D_80191C20[])(void); + +void func_801817C4(void *a0) { + D_80191C20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181800); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181864); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80191C28; + void func_801818E0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + func_80187778((s32 *)a0, (s32)&D_80191C28); + } + + + +extern void (*D_80191C90[])(void); + +void func_8018190C(void *a0) { + D_80191C90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181948); + +void func_80181988(void *a0) { + *(short *)((char *)a0 + 0x2) = 4; + *(short *)((char *)a0 + 0x34) = 0; + *(int *)((char *)a0 + 0x1c) = 0x3c; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801819A0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801819E0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181A18); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181A68); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181B40); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181BC0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181C38); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181CAC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181D04); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80191CA4; + void func_80181D8C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + func_80187778((s32 *)a0, (s32)&D_80191CA4); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181DB8); + + +extern void (*D_80191D3C[])(void); + +void func_80181ED4(void *a0) { + D_80191D3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181F10); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191CDC; + void func_80181F74(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_80178CBC(a0, &D_80191CDC); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181FA0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80181FE0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182058); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182148); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801821C0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182254); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182294); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182304); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182398); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182400); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191D14; + void func_80182450(short *param) { + param[1] = 0xB; + ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80191D14); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018247C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801824DC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182548); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801825A8); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80191D6C; + void func_8018260C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_80187778((s32 *)a0, (s32)&D_80191D6C); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182638); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018268C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801826B8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182704); + + +extern void (*D_80191E0C[])(void); + +void func_80182824(void *a0) { + D_80191E0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182860); + +extern s32 D_801DD064; +extern s32 D_801D6014; + +void func_80182898(void) { + D_801D6014 = D_801DD064; +} + + +extern s32 D_801EEAF8; +extern s32 D_801D6014; + +void func_801828B0(void) { + *(s32 *)&D_801D6014 = D_801EEAF8; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801828C8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182928); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182968); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801829A8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182A34); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182A74); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182AEC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182B78); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182BB8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182CC4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182D04); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182DFC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182E70); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182EE4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80182F3C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183168); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80191E38; + void func_801831F0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + func_80187778((s32 *)a0, (s32)&D_80191E38); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018321C); + + +extern void (*D_801922F0[])(void); + +void func_8018333C(void *a0) { + D_801922F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183378); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191E70; + void func_801833DC(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_80178CBC((s32 *)a0, (s32)&D_80191E70); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183408); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183448); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801834C0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801835B0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183628); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801836BC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183708); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183778); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183804); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018386C); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801922C8; + void func_801838BC(short *a0) { + *(short *)((char *)a0 + 0x2) = 0xB; + func_80178CBC((s32 *)a0, (s32)&D_801922C8); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801838E8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183948); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801839BC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183A14); + + +extern void (*D_80192418[])(void); + +void func_80183A88(void *a0) { + D_80192418[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183AC4); + + +extern s32 D_801DD950; +extern s32 D_801DAAAC; + +void func_80183AFC(void) { + D_801DAAAC = D_801DD950; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183B14); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183B74); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80183BB4(void) { + if ((func_80029178(0x113) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183BF0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183C30); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183CC8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183D08); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183D78); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183E14); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183EE4); + +extern s32 D_80192434; +extern void func_80187778(s32 *a0, s32 a1); + +void func_80183F58(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 0x2; + func_80187778(arg0, &D_80192434); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183F84); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80183FF4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184054); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801840B8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801840E4); + + +extern void (*D_80192510[])(void); + +void func_80184210(void *a0) { + D_80192510[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_8019246C; + void func_8018424C(short *a0) { + *(short *)((char *)a0 + 0x2) = 4; + ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_8019246C); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184278); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801924B8; + void func_801842A4(short *param) { + param[1] = 0xC; + ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_801924B8); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801842D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184310); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184350); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801843DC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018444C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184498); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018451C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018456C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801845B8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801845FC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184648); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801846A0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801846F0); + + +extern void (*D_80192544[])(void); + +void func_80184748(void *a0) { + D_80192544[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184784(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184794); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801847D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184840); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801848A0); + + +extern void (*D_80192624[])(void); + +void func_80184900(void *a0) { + D_80192624[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801925AC; + void func_8018493C(short *param) { + param[1] = 0x5; + ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_801925AC); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184968); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_801849E0(void) { + if ((func_80029178(0x115) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184A1C); + +extern s32 func_80187A64(s32); + extern void func_80184840(s32); + void func_80184A8C(s32 arg0) { + if (func_80187A64(arg0)) { + func_80184840(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184AC4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184B60); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184BB0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184BF4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184CF0); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192640; + void func_80184D64(short *param_1) { + *(short *)((char *)param_1 + 2) = 1; + func_80187778((s32 *)param_1, (s32)&D_80192640); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184D90); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184DDC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184F18); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80184F64); + + +extern void (*D_80192828[])(void); + +void func_801850A0(void *a0) { + D_80192828[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801850DC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018511C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018515C); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_8018519C(void) { + if ((func_80029178(0x116) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); + return 1; + } + return 0; + } + + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801926F8; + void func_801851D8(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x8; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_801926F8); + } + + +extern void func_80178CBC(s32 *a0, s32 a1); +extern short D_80192740; + +void func_80185208(void *a0) { + *(short *)((char *)a0 + 0x2) = 0xe; + *(short *)((char *)a0 + 0x34) = 0; + ((void (*)(int, int))func_80178CBC)((int)a0, (int)&D_80192740); +} + + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80192748; + void func_80185238(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_80192748); + } + + +extern void func_80178CBC(s32 *a0, s32 a1); +extern short D_801927B8; + +void func_80185268(short *a0) { + *(short *)((char *)a0 + 0x2) = 0xB; + *(short *)((char *)a0 + 0x34) = 0; + ((void (*)(void *, s32))func_80178CBC)(a0, &D_801927B8); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185298); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801852E4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185334); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185380); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801853D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018541C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185474); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801854D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185528); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801855CC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801856A8); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192864; + void func_80185874(short *param_1) { + *(short *)((char *)param_1 + 2) = 0x2; + ((void (*)(int, int))func_80187778)((int)param_1, (int)&D_80192864); + } + + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192864; + void func_801858A0(short *param_1) { + param_1[1] = 0x7; + func_80187778(param_1, &D_80192864); + } + + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192864; + void func_801858CC(short *param_1) { + *(short *)((char *)param_1 + 2) = 0x12; + func_80187778((s32 *)param_1, (int)&D_80192864); + } + + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192864; + void func_801858F8(short *param_1) { + *(short *)((char *)param_1 + 0x2) = 0x17; + func_80187778(param_1, &D_80192864); + } + + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192864; + void func_80185924(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x1F; + func_80187778((s32 *)a0, (s32)&D_80192864); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185950); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801859AC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185B54); + + +extern void (*D_801928D8[])(void); + +void func_80185C60(void *a0) { + D_801928D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185C9C); + + +extern void (*D_80192968[])(void); + +void func_80185CD8(void *a0) { + D_80192968[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_80128C98(s32 arg); + extern void func_801EF734(void *a0); + void func_80185D14(void *a0) { + if (func_80128C98(1)) { + ((void (*)(void *))func_801EF734)(a0); + } + } + + + +extern s32 func_80128C98(s32 arg); + extern void func_801EF904(void *a0); + void func_80185D50(void *a0) { + if (func_80128C98(1)) { + ((void (*)(void *))func_801EF904)(a0); + } + } + + + +extern s32 func_80128C98(s32 arg); + extern void func_801EF46C(void *a0); + void func_80185D8C(void *a0) { + if (func_80128C98(1)) { + ((void (*)(void *))func_801EF46C)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185DC8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185E44); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185EC8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185F3C); + +void func_80185F9C(void) { +} + + +void func_80185FA4(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + + +extern s32 func_80128C98(s32 arg); + extern void func_801EF58C(void *a0); + void func_80185FB4(void *a0) { + if (func_80128C98(1)) { + ((void (*)(void *))func_801EF58C)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80185FF0); + +extern s32 func_80128C98(s32 arg); +extern void func_801EF624(void *a0); + +void func_80186064(void *a0) { + if (func_80128C98(1)) { + ((void (*)(void *))func_801EF624)(a0); + } +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80192888; + void func_801860A0(short *param_1) { + param_1[1] = 0x1d; + ((void (*)(s32, s32))func_80178CBC)((int)param_1, (int)&D_80192888); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801860CC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186124); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018617C); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_80192970; + void func_80186288(short *param_1) { + param_1[1] = 2; + func_80187778(param_1, &D_80192970); + } + + + +extern void (*D_801929D4[])(void); + +void func_801862B4(void *a0) { + D_801929D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801862F0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018631C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018640C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018644C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186498); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801864E8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186568); + +extern void func_80187778(s32 *a0, s32 a1); + extern short D_801929E8; + void func_801865E0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + func_80187778((s32 *)a0, (s32)&D_801929E8); + } + + + +extern void (*D_80192A50[])(void); + +void func_8018660C(void *a0) { + D_80192A50[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80192A18; + void func_80186648(short *param) { + param[1] = 0x4; + ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80192A18); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186674); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801866B4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186700); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186758); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801867A8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186828); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186890); + + +extern void (*D_80192AE8[])(void); + +void func_801868E0(void *a0) { + D_80192AE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192B10[])(void); + +void func_8018691C(void *a0) { + D_80192B10[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); +extern short D_80192AC8; + +void func_80186958(short *param) { + param[1] = 0x3; + ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80192AC8); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186984); + +extern s32 func_80029504(void); + extern void func_80186890(s32 arg0); + void func_801869C8(s32 arg0) { + if ((u32)func_80029504() >= 0x1E) { + func_80186890(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186A04); + +void func_80186A6C(void) { +} + +void func_80186A74(void) { +} + +void func_80186A7C(void) { +} + +void func_80186A84(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186A8C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186B54); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186BEC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186C54); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186CD0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186D18); + + +extern void func_8012B2CC(s32 arg); + void func_80186D7C(void *arg0) { + s32 *p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186DAC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186DDC); + + +extern void (*D_801C063C[])(void); + +void func_80186F4C(void *a0) { + D_801C063C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80186F88); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187004); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187074); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018708C(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801870B0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801871E4); + +void func_8018724C(void) { +} + +void func_80187254(void) { +} + +void func_8018725C(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +void func_8018726C(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018727C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187318); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187344); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187370); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018739C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187420); + +extern s32 func_80187420(s32 arg); +extern void func_80187584(void *a0); + +void func_80187550(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_80187420((s32)a0); + func_80187584(a0); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187584); + + +extern short D_800BA2BA; + s32 func_801875C4(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801C0B00[])(void); + +void func_801875EC(void *a0) { + D_801C0B00[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80187628(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187630); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018766C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187690); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801876E8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187750); + +void func_80187770(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187778); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801877C0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018781C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187890); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187904); + + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_80187960(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187994); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187A64); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187C2C); + + +extern void (*D_801C0B20[])(void); + +void func_80187C74(void *a0) { + D_801C0B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80187CB0(void) { +} + +void func_80187CB8(void) { +} + +void func_80187CC0(void) { +} + +void func_80187CC8(void) { +} + +void func_80187CD0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187CD8); + +void func_80187D1C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187D24); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187DAC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80187F84); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188124); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801881A0); + +extern s32 func_801889AC(void); + void func_8018826C(void) { + func_801889AC(); + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018828C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018835C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801883C4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188438); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188498); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188518); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188570); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801885D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188618); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188668); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801886A0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018872C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801887D0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188830); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801889AC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801889E0); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188A14); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188A78); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188AEC); + + +extern void (*D_801C0E1C[])(void); + +void func_80188B44(void *a0) { + D_801C0E1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188B80); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188BFC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188D1C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188D68); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188E74); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188ED0); + +extern s16 D_801EEB10; + s32 func_80188F10(void) { + return D_801EEB10; + } + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188F20); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188F6C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80188FDC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_80189030); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_801898E4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018A270); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018A3A8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018ABAC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018AEE8); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018B238); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018B478); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018B644); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018B8DC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018BCD4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018C000); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018C89C); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018C8D4); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018C914); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018C960); + + +extern void (*D_801EB364[])(void); + +void func_8018CB74(void *a0) { + D_801EB364[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801EB344[]; + +void func_8018CBB0(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801EB344[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801EB344)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801EB344[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801EB378[])(void); + +void func_8018CC74(void *a0) { + D_801EB378[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8018CBB0(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_8018CCB0(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_8018CBB0(param_1, -0x80); + func_8018CBB0(param_1, -0x30); + func_8018CBB0(param_1, 0x20); + func_8018CBB0(param_1, 0x70); + func_8018CBB0(param_1, 0xc0); + } + if (1 < uVar1) { + func_8018CBB0(param_1, -0x58); + func_8018CBB0(param_1, -0x8); + func_8018CBB0(param_1, 0x48); + func_8018CBB0(param_1, 0x98); + func_8018CBB0(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018CBB0(s32, s32); + +void func_8018CD98(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_8018CBB0(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801EB36C; + +void func_8018CDD8(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801EB36C, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018CE60(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018CEA8); + + +extern void (*D_801EB48C[])(void); + +void func_8018CF54(void *a0) { + D_801EB48C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018CF90); + +void func_8018CFF4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018CFFC); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018D048); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018D088); + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_80178D40", func_8018D0E4); + + diff --git a/src/ov_SC03_002/ov_SC03_002_jr_801734BC.c b/src/ov_SC03_002/ov_SC03_002_jr_801734BC.c index db21ce8a2..4415c0dd0 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_801734BC.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_801734BC.c @@ -3105,1735 +3105,3 @@ void func_80178D18(void) { D_801CBB4C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CB674; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CB674 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CB674; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CB674 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CB69C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CB69C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CB658; - -s32 func_8017A3B0(void) { - switch (D_801CB658) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CB694; -extern short D_801CB690; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CB694) { - case 0: - func_800D0CA0(1); - D_801CB694 = D_801CB694 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CB690; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CB694 = D_801CB694 + 1; - if (D_801CB694 < 0x1E) { - return 0; - } - D_801CB694 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CB6D4; - extern s16 D_801CB6D6; - extern s16 D_801CB6D8; - extern s16 D_801CB6CC; - extern s16 D_801CB6CE; - extern s16 D_801CB6D0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CB6D4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CB6D6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CB6D8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CB6CC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CB6CE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CB6D0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CB65C; -extern u16 D_801CB6DC; -extern u16 D_801CB6DE; -extern u16 D_801CB6E0; -extern s16 D_801CBAD8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CBAD8 = 0; - D_801CB65C = 0; - D_801CB6DC = D_80126B5E; - D_801CB6DE = D_80126B62; - D_801CB6E0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188E3C[]; - extern s16 D_801CB6D4; - extern s16 D_801CB6CC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188E3C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188E3C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CB6D4; - s16 *p78C = &D_801CB6CC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CBAD8 = 1; - D_801CB65C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CB67C; - extern SV4_8017B368 D_801CB684; - extern s16 D_801CB6D4; - extern s16 D_801CB6CC; - extern u16 D_80188E3C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CB67C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CB684; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80188E3C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80188E3C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CB6D4) = loc0; - (*(SV4_8017B368 *)&D_801CB6CC) = loc1; - D_801CBAD8 = 1; - D_801CB65C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188E3C[]; - extern s16 D_801CB6D4; - extern s16 D_801CB6D6; - extern s16 D_801CB6D8; - extern s16 D_801CB6CC; - extern s16 D_801CB6CE; - extern s16 D_801CB6D0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188E3C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188E3C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CB6D4; - s16 *p78C = &D_801CB6CC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CB6D6; - v798 = D_801CB6D8; - v78C = *p78C; - v78E = D_801CB6CE; - v790 = D_801CB6D0; - __asm__ __volatile__(""); - D_801CBAD8 = 1; - D_801CB65C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CB65C; -extern s16 D_801CB6D4; -extern s16 D_801CB6D6; -extern s16 D_801CB6D8; -extern s16 D_801CB6CC; -extern s16 D_801CB6CE; -extern s16 D_801CB6D0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CB65C = 0; - D_801CB6D4 = (s16) D_80114F30; - D_801CB6D6 = (s16) D_80114F34; - D_801CB6D8 = (s16) D_80114F38; - D_801CB6CC = (s16) D_80114F24; - D_801CB6CE = (s16) D_80114F28; - D_801CB6D0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CB6EC; -extern s16 D_801CB6EE; -extern s16 D_801CB6F0; -extern s16 D_801CB6F4; -extern s16 D_801CB6F6; -extern s16 D_801CB6F8; - -void func_8017B824(void) { - D_801CB6EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CB6EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CB6F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CB6F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CB6F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CB6F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CB6EC; -extern s16 D_801CB6EE; -extern s16 D_801CB6F0; -extern s16 D_801CB6F4; -extern s16 D_801CB6F6; -extern s16 D_801CB6F8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CB6EC; - D_80114F34 = D_801CB6EE; - D_80114F38 = D_801CB6F0; - D_80114F24 = D_801CB6F4; - D_80114F28 = D_801CB6F6; - D_80114F2C = D_801CB6F8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CB6D4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CB6CC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CB6D4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CB6CC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CB6DC; -extern u16 D_801CB6DE; -extern u16 D_801CB6E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CB65C; -extern short D_801CB6E4; -extern short D_801CB6E6; -extern short D_801CB6E8; -extern s16 D_801CB6D4; -extern s16 D_801CB6D6; -extern s16 D_801CB6D8; -extern s16 D_801CB6CC; -extern s16 D_801CB6CE; -extern s16 D_801CB6D0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CB6DC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CB6DE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CB6E0); - (*(s16 *)&D_801CB6E4) = buf[0]; - (*(s16 *)&D_801CB6E6) = buf[1]; - (*(s16 *)&D_801CB6E8) = buf[2]; - D_801CB6D4 = D_80114F30 + buf[0]; - D_801CB65C = 0; - D_801CB6D6 = D_80114F34 + buf[1]; - D_801CB6D8 = D_80114F38 + buf[2]; - D_801CB6CC = D_80114F24 + buf[0]; - D_801CB6CE = D_80114F28 + buf[1]; - D_801CB6D0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CB67C; -extern SV4 D_801CB684; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CB684) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CB67C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CB684 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CB684)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CB67C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CB684) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CB6A4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CB6A4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CB65C; -extern s16 D_801CBAD8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CB65C = D_801CB65C + 1; - if (D_801CB65C >= 0x1F) { - D_801CBAD8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CB65C; -extern s16 D_801CBAD8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CB65C = D_801CB65C + 1; - if (0x18 < D_801CB65C) { - func_8012A4BC(); - D_801CBAD8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CB65C; -extern void (*D_801CB6A0)(void); -extern short D_801CB6E4; -extern short D_801CB6E6; -extern short D_801CB6E8; -extern s16 D_801CBAD8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CB65C = D_801CB65C + 1; - if (D_801CB65C >= 0x19) { - if (D_801CB6A0 != 0) { - (*D_801CB6A0)(); - } else { - D_80114F30 = D_80114F30 + D_801CB6E4; - D_80114F34 = D_80114F34 + D_801CB6E6; - D_80114F38 = D_80114F38 + D_801CB6E8; - D_80114F24 = D_80114F24 + D_801CB6E4; - D_80114F28 = D_80114F28 + D_801CB6E6; - D_80114F2C = D_80114F2C + D_801CB6E8; - func_8012A4BC(); - } - D_801CBAD8 = 0; - } -} - - - -extern void (*D_80188EDC[])(void); - -void func_8017BE60(void *a0) { - D_80188EDC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017BF88); - - -extern void (*D_80188EF4[])(void); - -void func_8017C0E4(void *a0) { - D_80188EF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C120); - - -extern void (*D_80188F90[])(void); - -void func_8017C180(void *a0) { - D_80188F90[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80188F98[])(void); - -void func_8017C1BC(void *a0) { - D_80188F98[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80188FA0[])(void); - -void func_8017C1F8(void *a0) { - D_80188FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C3E4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C4D0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C594); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C61C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C7B8); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017C9BC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017CDB0); - - -extern void (*D_8018927C[])(void); - -void func_8017CF30(void *a0) { - D_8018927C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017CF6C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017CFE0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D474); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D5C4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017D604); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017E4E4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017E68C); - - -extern void (*D_801892B0[])(void); - -void func_8017E6CC(void *a0) { - D_801892B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017E708); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017E7FC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017E8B0); - - -extern void (*D_80189308[])(void); - -void func_8017E9EC(void *a0) { - D_80189308[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EA28); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EA54); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EAE8); - - -extern void (*D_80189314[])(void); - -void func_8017EB74(void *a0) { - D_80189314[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017EBB0(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EBD0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EC98); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017EF80); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F068); - - -extern void (*D_8018932C[])(void); - -void func_8017F1C4(void *a0) { - D_8018932C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F200); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F290); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F304); - - -extern void (*D_801893E8[])(void); - -void func_8017F3A4(void *a0) { - D_801893E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F3E0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F464); - - -extern void (*D_80189400[])(void); - -void func_8017F4C4(void *a0) { - D_80189400[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F500); - -void func_8017F5B4(void) { -} - - -extern void (*D_80189438[])(void); - -void func_8017F5BC(void *a0) { - D_80189438[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F5F8); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F688); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F8C4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F914); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017F9D0); - - -extern void (*D_8018962C[])(void); - -void func_8017FAE8(void *a0) { - D_8018962C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FB24); - -void func_8017FBF0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FBF8); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FC90); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FCD0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FD44); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017FD94(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FDB8); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FDFC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FE6C); - -extern void func_800D1EBC(void); - void func_8017FF1C(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FF3C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8017FF90); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180014); - - -extern void (*D_8018963C[])(void); - -void func_80180040(void *a0) { - D_8018963C[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern void (*D_80189644[])(void); - -void func_8018007C(void *a0) { - D_80189644[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018964C[])(void); - -void func_801800B8(void *a0) { - D_8018964C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80189658[])(void); - -void func_801800F4(void *a0) { - D_80189658[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_80180130(void) { - D_80127050 = 1; - } - - - -extern void (*D_8018978C[])(void); - -void func_80180144(void *a0) { - D_8018978C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_80180180(s32 *a0) { - *(u8 *)((s32)a0 + 0x214) = *(u8 *)((s32)a0 + 0x214) + 1; - } - - -extern void func_80175414(s32 arg0); - extern void func_8016F0E4(void); - extern void func_80165770(void); - void func_80180194(s32 arg0) { - func_80175414(arg0); - ((s32 (*)(s32))func_8016F0E4)(arg0); - ((void (*)(s32))func_80165770)(arg0); - } - - - -extern void (*D_80189794[])(void); - -void func_801801CC(void *a0) { - D_80189794[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_80180208(void *a0) { - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8018021C(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018023C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180290); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801802F4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180378); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180570); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801805B0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018061C); - - -extern void (*D_80189840[])(void); - -void func_801806B4(void *a0) { - D_80189840[*(u8 *)((s32)a0 + 0x216)](); -} - - -extern s32 func_80171990(u8 *a0); - void func_801806F0(void) { - ((s32 (*)(void))func_80171990)(); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180710); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018979C; - -void func_80180748(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018979C, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180770); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180834); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801808F8); - - -extern void (*D_80189848[])(void); - -void func_801809C8(void *a0) { - D_80189848[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_80180AC0(s32 a0, s32 a1); - extern void func_80180C00(s32 arg0); - void func_80180A04(s32 param_1) { - func_80180AC0(param_1, param_1 + 0xa0); - ((void (*)(s32))func_80180C00)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180A38); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180AC0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180C00); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180DF4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180E90); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80180F1C); - - -extern void (*D_8018990C[])(void); - -void func_80181054(void *a0) { - D_8018990C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181090); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018112C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018118C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181200); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181240); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181280); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181304); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018137C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801813E4); - -extern void func_80183264(void *a0, s32 a1); - extern short D_80189928; - void func_801814F0(s32 a0) { - *(short *)(a0 + 0x2) = 2; - func_80183264((void *)a0, &D_80189928); - } - - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801AB098; - void func_8018151C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 11; - func_8012A828((int)arg0, (int)&D_801AB098); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181548); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801815AC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801816F0); - - -extern void (*D_801899F4[])(void); - -void func_80181808(void *a0) { - D_801899F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181844); - - -extern s32 func_80128C98(s32 arg); - extern void func_801CBB54(void *a0); - void func_80181894(void *a0) { - if (func_80128C98(3)) { - ((void (*)(void *))func_801CBB54)(a0); - } - } - - -extern s32 func_80128C98(s32 arg); - extern void func_801CBBDC(void *a0); - void func_801818D0(u8 *a0) { - if (func_80128C98(0x3)) { - ((void (*)(u8 *))func_801CBBDC)(a0); - } - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_801899A4; - void func_8018190C(short *param) { - param[1] = 0x12; - func_80178CBC((int)param, (int)&D_801899A4); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181938); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181990); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181A10); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181A64); - -void func_80181B14(void) { -} - -void func_80181B1C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181B24); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181B88); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181BCC); - - -extern void (*D_80189BEC[])(void); - -void func_80181D3C(void *a0) { - D_80189BEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80181D78); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801821B4); - - -extern void (*D_80189CF4[])(void); - -void func_8018225C(void *a0) { - D_80189CF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182298); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801822C8); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801822F8(void) { - func_8002D4C8(0x525, 0); - } - - -void func_8018231C(void) { -} - -void func_80182324(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018232C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018235C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182418); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182498); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801824DC); - - -extern void (*D_80189D04[])(void); - -void func_80182654(void *a0) { - D_80189D04[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_80189D24[])(void); - -void func_80182690(void *a0) { - D_80189D24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801826CC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182758); - -extern s32 func_80029504(void); -extern void func_800183E0(s32 arg0); -extern char D_80189D2C; - -void func_801827B0(void) { - if (!(func_80029504() < 0x492)) { - func_800183E0((s32)&D_80189D2C); - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801827EC); - - -extern void (*D_80189DA4[])(void); - -void func_80182884(void *a0) { - D_80189DA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801828C0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182964); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801829C4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182A30); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182A78); - - -void func_80182D48(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -void func_80182D58(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182D68); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182E04); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182E30); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182E5C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182E88); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80182F0C); - -extern s32 func_80182F0C(s32 arg); - extern void func_80183070(void *a0); - void func_8018303C(u8 *a0) { - *(s32 *)(a0 + 0xe0) = func_80182F0C((s32)a0); - func_80183070(a0); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183070); - - -extern short D_800BA2BA; - s32 func_801830B0(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801A84A4[])(void); - -void func_801830D8(void *a0) { - D_801A84A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80183114(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018311C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183158); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018317C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801831D4); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018323C); - -void func_8018325C(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183264); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801832AC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183308); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018337C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801833F0); - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_8018344C(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183480); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183550); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183718); - -extern void (*D_801A84C4[])(void); - -void func_80183760(void *a0) { - D_801A84C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018379C(void) { -} - -void func_801837A4(void) { -} - -void func_801837AC(void) { -} - -void func_801837B4(void) { -} - -void func_801837BC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801837C4); - -DEFINE_func_80183808() /* dedup: shared engine-core @0x80183808 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183810); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183898); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183A70); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183C10); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183C8C); - -extern void func_80184498(void); - void func_80183D58(void) { - func_80184498(); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183D78); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183E48); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183EB0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183F24); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80183F84); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184004); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018405C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801840BC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184104); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184154); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018418C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184218); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801842BC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018431C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184498); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801844CC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184500); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184564); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801845D8); - - -extern void (*D_801A87C0[])(void); - -void func_80184630(void *a0) { - D_801A87C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_8018466C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801846E8); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184808); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184854); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184960); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801849BC); - - -extern void (*D_801BDC58[])(void); - -void func_801849FC(void *a0) { - D_801BDC58[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801BDC38[]; - -void func_80184A38(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801BDC38[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801BDC38)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801BDC38[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801BDC6C[])(void); - -void func_80184AFC(void *a0) { - D_801BDC6C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_80184A38(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_80184B38(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_80184A38(param_1, -0x80); - func_80184A38(param_1, -0x30); - func_80184A38(param_1, 0x20); - func_80184A38(param_1, 0x70); - func_80184A38(param_1, 0xc0); - } - if (1 < uVar1) { - func_80184A38(param_1, -0x58); - func_80184A38(param_1, -0x8); - func_80184A38(param_1, 0x48); - func_80184A38(param_1, 0x98); - func_80184A38(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_80184A38(s32, s32); - -void func_80184C20(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_80184A38(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801BDC60; - -void func_80184C60(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801BDC60, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_80184CE8(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184D30); - - -extern void (*D_801C2E5C[])(void); - -void func_80184DDC(void *a0) { - D_801C2E5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184E18); - -void func_80184E7C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184E84); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184ED0); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184F10); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80184F6C); - -extern void func_8012B2CC(s32 arg); - void func_80184FD0(void *arg0) { - s32 *p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80185000); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80185030); - - -extern void (*D_801C8C74[])(void); - -void func_801851A0(void *a0) { - D_801C8C74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801851DC); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80185258); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_801852C8); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801852E0(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80185304); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801734BC", func_80185438); - -void func_801854A0(void) { -} - -void func_801854A8(void) { -} - diff --git a/src/ov_SC03_002/ov_SC03_002_jr_80178D40.c b/src/ov_SC03_002/ov_SC03_002_jr_80178D40.c new file mode 100644 index 000000000..e77485564 --- /dev/null +++ b/src/ov_SC03_002/ov_SC03_002_jr_80178D40.c @@ -0,0 +1,5202 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801886E4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CA9C8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801886D8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018871C[]; +extern unsigned short D_80188724[]; +extern unsigned short D_8018872C[]; +extern unsigned char D_801CA9D0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CA9C8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188734[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CAB04; +extern M2C_UNK D_801CAB08; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CAA90; +extern void (*D_80188764[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CAB0C[]; +extern u8 D_801CAB14[]; +extern u8 D_801CAAC4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018876C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188788[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80188790[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801887F8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018879C; +extern u8 D_801887A8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018882C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188834[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188888[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801888BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801888AC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801888D8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188950[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188958[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188960[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188968[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188970[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188978[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188984[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188990[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018899C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801889AC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801889BC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801889C4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801889CC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801889D4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801889DC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801889E4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801889EC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801889F4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801889FC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188A04[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188A0C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188A14[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188A1C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188A24[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188A2C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188A34[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188A3C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188A44[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188A4C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188A54[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188A5C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188A64[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188A6C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188AB0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188A74; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188AE0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188B1C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188B74[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188B84[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188B8C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188CF4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188D00[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CA03C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CBAD8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CB248; +extern short D_801CBB4C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CBB4C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CBB4C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CB248 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CBB4C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CBA90 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CBA90 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CBB4C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CBB4C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CB6A4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CB24C; + extern s32 D_801CB660; + extern s16 D_801CB664; + extern s16 D_801CB668; + extern s16 D_801CB66C; + extern s16 D_801CB670; + extern s32 D_801CB678; + extern s32 D_801CB67C; + extern s32 D_801CB68C; + extern s16 D_801CB690; + extern s16 D_801CB694; + extern s32 D_801CB698; + extern s32 D_801CB6A0; + extern s32 D_801CB6A4[10]; + extern s32 D_801CB9C0; + extern s16 D_801CBA90; + extern s32 D_801CBAD4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CBA90; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CB660); + D_801CB660 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CB66C, D_801CB670 ? 0x48 : 0x40); + (*(s16*)&D_801CBB4C) = 2; + break; + case 0: + func_80179B28(D_801CB660); + D_801CB660 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CB664, D_801CB668 ? 0x48 : 0x40); + (*(s16*)&D_801CBB4C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CB9C0 != 0) { + func_80179B28(D_801CB660); + D_801CB660 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CB664, D_801CB668 ? 0x48 : 0x40); + (*(s16*)&D_801CBB4C) = 1; + } else { + (*(s16*)&D_801CBB4C) = 3; + } + break; + case 0x32: + func_80179B28(D_801CB660); + D_801CB660 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CB664, + D_801CB668 ? 0x48 : 0x40); + (*(s16*)&D_801CBB4C) = 1; + break; + case 2: + func_80179B28(D_801CB660); + if (D_801CB678 != 0) { + D_801CB248 = D_801CB678; + D_801CB678 = 0; + (*(s16*)&D_801CBB4C) = 3; + return; + } + (*(s16*)&D_801CBB4C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CBB4C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CBB4C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CBB4C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x1B: + D_801CB698 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CBB4C) = 4; + D_801CB24C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CBB4C) = 5; + D_801CB68C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CB68C = (s32)func_8017A3B0; + (*(s16*)&D_801CBB4C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x24: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CBB4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CBB4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CBB4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBB4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBB4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBB4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CBB4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CB67C); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CB67C); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CB67C); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CB67C); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x4E: + D_801CB6A0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x2B: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CBB4C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CBAD4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x34: + (*(s16*)&D_801CBB4C) = 3; + D_801CB248 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CB678 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CBB4C) = 3; + D_801CB248 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CBB4C) = 3; + D_801CB248 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CB248 = *(s32 *)(D_801CB248 + 4); + return; + case 0x37: + (*(s16*)&D_801CBB4C) = 3; + D_801CB664 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CB668 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CBB4C) = 3; + D_801CB66C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CB670 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CBB4C) = 3; + D_801CB664 = w1; + D_801CB668 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CBB4C) = 3; + D_801CB66C = w2; + D_801CB670 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x43: + D_801CB68C = (s32)func_8017A3D8; + D_801CB694 = 0; + (*(s16*)&D_801CBB4C) = 5; + D_801CB690 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBB4C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBB4C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CB6A4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CBB4C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CB6A4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CBB4C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CB6A4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CBB4C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CB6A4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CBB4C) = 3; + break; + default: + break; + } +Lend: + D_801CB248 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CB674; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CB674 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CB674; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CB674 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CB69C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CB69C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CB658; + +s32 func_8017A3B0(void) { + switch (D_801CB658) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CB694; +extern short D_801CB690; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CB694) { + case 0: + func_800D0CA0(1); + D_801CB694 = D_801CB694 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CB690; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CB694 = D_801CB694 + 1; + if (D_801CB694 < 0x1E) { + return 0; + } + D_801CB694 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CB6D4; + extern s16 D_801CB6D6; + extern s16 D_801CB6D8; + extern s16 D_801CB6CC; + extern s16 D_801CB6CE; + extern s16 D_801CB6D0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CB6D4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CB6D6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CB6D8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CB6CC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CB6CE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CB6D0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CB65C; +extern u16 D_801CB6DC; +extern u16 D_801CB6DE; +extern u16 D_801CB6E0; +extern s16 D_801CBAD8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CBAD8 = 0; + D_801CB65C = 0; + D_801CB6DC = D_80126B5E; + D_801CB6DE = D_80126B62; + D_801CB6E0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188E3C[]; + extern s16 D_801CB6D4; + extern s16 D_801CB6CC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188E3C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188E3C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CB6D4; + s16 *p78C = &D_801CB6CC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CBAD8 = 1; + D_801CB65C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CB67C; + extern SV4_8017B368 D_801CB684; + extern s16 D_801CB6D4; + extern s16 D_801CB6CC; + extern u16 D_80188E3C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CB67C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CB684; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80188E3C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80188E3C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CB6D4) = loc0; + (*(SV4_8017B368 *)&D_801CB6CC) = loc1; + D_801CBAD8 = 1; + D_801CB65C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188E3C[]; + extern s16 D_801CB6D4; + extern s16 D_801CB6D6; + extern s16 D_801CB6D8; + extern s16 D_801CB6CC; + extern s16 D_801CB6CE; + extern s16 D_801CB6D0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188E3C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188E3C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CB6D4; + s16 *p78C = &D_801CB6CC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CB6D6; + v798 = D_801CB6D8; + v78C = *p78C; + v78E = D_801CB6CE; + v790 = D_801CB6D0; + __asm__ __volatile__(""); + D_801CBAD8 = 1; + D_801CB65C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CB65C; +extern s16 D_801CB6D4; +extern s16 D_801CB6D6; +extern s16 D_801CB6D8; +extern s16 D_801CB6CC; +extern s16 D_801CB6CE; +extern s16 D_801CB6D0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CB65C = 0; + D_801CB6D4 = (s16) D_80114F30; + D_801CB6D6 = (s16) D_80114F34; + D_801CB6D8 = (s16) D_80114F38; + D_801CB6CC = (s16) D_80114F24; + D_801CB6CE = (s16) D_80114F28; + D_801CB6D0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CB6EC; +extern s16 D_801CB6EE; +extern s16 D_801CB6F0; +extern s16 D_801CB6F4; +extern s16 D_801CB6F6; +extern s16 D_801CB6F8; + +void func_8017B824(void) { + D_801CB6EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CB6EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CB6F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CB6F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CB6F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CB6F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CB6EC; +extern s16 D_801CB6EE; +extern s16 D_801CB6F0; +extern s16 D_801CB6F4; +extern s16 D_801CB6F6; +extern s16 D_801CB6F8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CB6EC; + D_80114F34 = D_801CB6EE; + D_80114F38 = D_801CB6F0; + D_80114F24 = D_801CB6F4; + D_80114F28 = D_801CB6F6; + D_80114F2C = D_801CB6F8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CB6D4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CB6CC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CB6D4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CB6CC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CB6DC; +extern u16 D_801CB6DE; +extern u16 D_801CB6E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CB65C; +extern short D_801CB6E4; +extern short D_801CB6E6; +extern short D_801CB6E8; +extern s16 D_801CB6D4; +extern s16 D_801CB6D6; +extern s16 D_801CB6D8; +extern s16 D_801CB6CC; +extern s16 D_801CB6CE; +extern s16 D_801CB6D0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CB6DC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CB6DE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CB6E0); + (*(s16 *)&D_801CB6E4) = buf[0]; + (*(s16 *)&D_801CB6E6) = buf[1]; + (*(s16 *)&D_801CB6E8) = buf[2]; + D_801CB6D4 = D_80114F30 + buf[0]; + D_801CB65C = 0; + D_801CB6D6 = D_80114F34 + buf[1]; + D_801CB6D8 = D_80114F38 + buf[2]; + D_801CB6CC = D_80114F24 + buf[0]; + D_801CB6CE = D_80114F28 + buf[1]; + D_801CB6D0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CB67C; +extern SV4 D_801CB684; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CB684) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CB67C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CB684 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CB684)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CB67C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CB684) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CB6A4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CB6A4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CB65C; +extern s16 D_801CBAD8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CB65C = D_801CB65C + 1; + if (D_801CB65C >= 0x1F) { + D_801CBAD8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CB65C; +extern s16 D_801CBAD8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CB65C = D_801CB65C + 1; + if (0x18 < D_801CB65C) { + func_8012A4BC(); + D_801CBAD8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CB65C; +extern void (*D_801CB6A0)(void); +extern short D_801CB6E4; +extern short D_801CB6E6; +extern short D_801CB6E8; +extern s16 D_801CBAD8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CB65C = D_801CB65C + 1; + if (D_801CB65C >= 0x19) { + if (D_801CB6A0 != 0) { + (*D_801CB6A0)(); + } else { + D_80114F30 = D_80114F30 + D_801CB6E4; + D_80114F34 = D_80114F34 + D_801CB6E6; + D_80114F38 = D_80114F38 + D_801CB6E8; + D_80114F24 = D_80114F24 + D_801CB6E4; + D_80114F28 = D_80114F28 + D_801CB6E6; + D_80114F2C = D_80114F2C + D_801CB6E8; + func_8012A4BC(); + } + D_801CBAD8 = 0; + } +} + + + +extern void (*D_80188EDC[])(void); + +void func_8017BE60(void *a0) { + D_80188EDC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017BF88); + + +extern void (*D_80188EF4[])(void); + +void func_8017C0E4(void *a0) { + D_80188EF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C120); + + +extern void (*D_80188F90[])(void); + +void func_8017C180(void *a0) { + D_80188F90[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80188F98[])(void); + +void func_8017C1BC(void *a0) { + D_80188F98[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80188FA0[])(void); + +void func_8017C1F8(void *a0) { + D_80188FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C3E4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C4D0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C594); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C61C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C7B8); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017C9BC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017CDB0); + + +extern void (*D_8018927C[])(void); + +void func_8017CF30(void *a0) { + D_8018927C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017CF6C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017CFE0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D474); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D5C4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017D604); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017E4E4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017E68C); + + +extern void (*D_801892B0[])(void); + +void func_8017E6CC(void *a0) { + D_801892B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017E708); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017E7FC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017E8B0); + + +extern void (*D_80189308[])(void); + +void func_8017E9EC(void *a0) { + D_80189308[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EA28); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EA54); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EAE8); + + +extern void (*D_80189314[])(void); + +void func_8017EB74(void *a0) { + D_80189314[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017EBB0(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EBD0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EC98); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017EF80); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F068); + + +extern void (*D_8018932C[])(void); + +void func_8017F1C4(void *a0) { + D_8018932C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F200); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F290); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F304); + + +extern void (*D_801893E8[])(void); + +void func_8017F3A4(void *a0) { + D_801893E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F3E0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F464); + + +extern void (*D_80189400[])(void); + +void func_8017F4C4(void *a0) { + D_80189400[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F500); + +void func_8017F5B4(void) { +} + + +extern void (*D_80189438[])(void); + +void func_8017F5BC(void *a0) { + D_80189438[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F5F8); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F688); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F8C4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F914); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017F9D0); + + +extern void (*D_8018962C[])(void); + +void func_8017FAE8(void *a0) { + D_8018962C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FB24); + +void func_8017FBF0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FBF8); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FC90); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FCD0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FD44); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017FD94(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FDB8); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FDFC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FE6C); + +extern void func_800D1EBC(void); + void func_8017FF1C(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FF3C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8017FF90); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180014); + + +extern void (*D_8018963C[])(void); + +void func_80180040(void *a0) { + D_8018963C[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern void (*D_80189644[])(void); + +void func_8018007C(void *a0) { + D_80189644[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018964C[])(void); + +void func_801800B8(void *a0) { + D_8018964C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80189658[])(void); + +void func_801800F4(void *a0) { + D_80189658[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_80180130(void) { + D_80127050 = 1; + } + + + +extern void (*D_8018978C[])(void); + +void func_80180144(void *a0) { + D_8018978C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_80180180(s32 *a0) { + *(u8 *)((s32)a0 + 0x214) = *(u8 *)((s32)a0 + 0x214) + 1; + } + + +extern void func_80175414(s32 arg0); + extern void func_8016F0E4(void); + extern void func_80165770(void); + void func_80180194(s32 arg0) { + func_80175414(arg0); + ((s32 (*)(s32))func_8016F0E4)(arg0); + ((void (*)(s32))func_80165770)(arg0); + } + + + +extern void (*D_80189794[])(void); + +void func_801801CC(void *a0) { + D_80189794[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_80180208(void *a0) { + *(u8 *)((s32)a0 + 0x214) += 1; + } + + +extern void func_8016F0E4(void); + void func_8018021C(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018023C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180290); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801802F4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180378); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180570); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801805B0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018061C); + + +extern void (*D_80189840[])(void); + +void func_801806B4(void *a0) { + D_80189840[*(u8 *)((s32)a0 + 0x216)](); +} + + +extern s32 func_80171990(u8 *a0); + void func_801806F0(void) { + ((s32 (*)(void))func_80171990)(); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180710); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018979C; + +void func_80180748(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018979C, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180770); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180834); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801808F8); + + +extern void (*D_80189848[])(void); + +void func_801809C8(void *a0) { + D_80189848[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_80180AC0(s32 a0, s32 a1); + extern void func_80180C00(s32 arg0); + void func_80180A04(s32 param_1) { + func_80180AC0(param_1, param_1 + 0xa0); + ((void (*)(s32))func_80180C00)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180A38); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180AC0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180C00); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180DF4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180E90); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80180F1C); + + +extern void (*D_8018990C[])(void); + +void func_80181054(void *a0) { + D_8018990C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181090); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018112C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018118C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181200); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181240); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181280); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181304); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018137C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801813E4); + +extern void func_80183264(void *a0, s32 a1); + extern short D_80189928; + void func_801814F0(s32 a0) { + *(short *)(a0 + 0x2) = 2; + func_80183264((void *)a0, &D_80189928); + } + + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801AB098; + void func_8018151C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 11; + func_8012A828((int)arg0, (int)&D_801AB098); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181548); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801815AC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801816F0); + + +extern void (*D_801899F4[])(void); + +void func_80181808(void *a0) { + D_801899F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181844); + + +extern s32 func_80128C98(s32 arg); + extern void func_801CBB54(void *a0); + void func_80181894(void *a0) { + if (func_80128C98(3)) { + ((void (*)(void *))func_801CBB54)(a0); + } + } + + +extern s32 func_80128C98(s32 arg); + extern void func_801CBBDC(void *a0); + void func_801818D0(u8 *a0) { + if (func_80128C98(0x3)) { + ((void (*)(u8 *))func_801CBBDC)(a0); + } + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_801899A4; + void func_8018190C(short *param) { + param[1] = 0x12; + func_80178CBC((int)param, (int)&D_801899A4); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181938); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181990); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181A10); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181A64); + +void func_80181B14(void) { +} + +void func_80181B1C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181B24); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181B88); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181BCC); + + +extern void (*D_80189BEC[])(void); + +void func_80181D3C(void *a0) { + D_80189BEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80181D78); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801821B4); + + +extern void (*D_80189CF4[])(void); + +void func_8018225C(void *a0) { + D_80189CF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182298); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801822C8); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801822F8(void) { + func_8002D4C8(0x525, 0); + } + + +void func_8018231C(void) { +} + +void func_80182324(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018232C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018235C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182418); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182498); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801824DC); + + +extern void (*D_80189D04[])(void); + +void func_80182654(void *a0) { + D_80189D04[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_80189D24[])(void); + +void func_80182690(void *a0) { + D_80189D24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801826CC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182758); + +extern s32 func_80029504(void); +extern void func_800183E0(s32 arg0); +extern char D_80189D2C; + +void func_801827B0(void) { + if (!(func_80029504() < 0x492)) { + func_800183E0((s32)&D_80189D2C); + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801827EC); + + +extern void (*D_80189DA4[])(void); + +void func_80182884(void *a0) { + D_80189DA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801828C0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182964); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801829C4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182A30); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182A78); + + +void func_80182D48(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +void func_80182D58(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182D68); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182E04); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182E30); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182E5C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182E88); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80182F0C); + +extern s32 func_80182F0C(s32 arg); + extern void func_80183070(void *a0); + void func_8018303C(u8 *a0) { + *(s32 *)(a0 + 0xe0) = func_80182F0C((s32)a0); + func_80183070(a0); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183070); + + +extern short D_800BA2BA; + s32 func_801830B0(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801A84A4[])(void); + +void func_801830D8(void *a0) { + D_801A84A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80183114(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018311C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183158); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018317C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801831D4); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018323C); + +void func_8018325C(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183264); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801832AC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183308); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018337C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801833F0); + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_8018344C(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183480); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183550); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183718); + +extern void (*D_801A84C4[])(void); + +void func_80183760(void *a0) { + D_801A84C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018379C(void) { +} + +void func_801837A4(void) { +} + +void func_801837AC(void) { +} + +void func_801837B4(void) { +} + +void func_801837BC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801837C4); + +DEFINE_func_80183808() /* dedup: shared engine-core @0x80183808 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183810); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183898); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183A70); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183C10); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183C8C); + +extern void func_80184498(void); + void func_80183D58(void) { + func_80184498(); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183D78); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183E48); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183EB0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183F24); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80183F84); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184004); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018405C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801840BC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184104); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184154); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018418C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184218); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801842BC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018431C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184498); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801844CC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184500); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184564); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801845D8); + + +extern void (*D_801A87C0[])(void); + +void func_80184630(void *a0) { + D_801A87C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_8018466C); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801846E8); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184808); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184854); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184960); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801849BC); + + +extern void (*D_801BDC58[])(void); + +void func_801849FC(void *a0) { + D_801BDC58[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801BDC38[]; + +void func_80184A38(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801BDC38[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801BDC38)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801BDC38[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801BDC6C[])(void); + +void func_80184AFC(void *a0) { + D_801BDC6C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_80184A38(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_80184B38(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_80184A38(param_1, -0x80); + func_80184A38(param_1, -0x30); + func_80184A38(param_1, 0x20); + func_80184A38(param_1, 0x70); + func_80184A38(param_1, 0xc0); + } + if (1 < uVar1) { + func_80184A38(param_1, -0x58); + func_80184A38(param_1, -0x8); + func_80184A38(param_1, 0x48); + func_80184A38(param_1, 0x98); + func_80184A38(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_80184A38(s32, s32); + +void func_80184C20(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_80184A38(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801BDC60; + +void func_80184C60(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801BDC60, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_80184CE8(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184D30); + + +extern void (*D_801C2E5C[])(void); + +void func_80184DDC(void *a0) { + D_801C2E5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184E18); + +void func_80184E7C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184E84); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184ED0); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184F10); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80184F6C); + +extern void func_8012B2CC(s32 arg); + void func_80184FD0(void *arg0) { + s32 *p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80185000); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80185030); + + +extern void (*D_801C8C74[])(void); + +void func_801851A0(void *a0) { + D_801C8C74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801851DC); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80185258); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_801852C8); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801852E0(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80185304); + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_80178D40", func_80185438); + +void func_801854A0(void) { +} + +void func_801854A8(void) { +} + + diff --git a/src/ov_SC03_003/ov_SC03_003_jr_801734BC.c b/src/ov_SC03_003/ov_SC03_003_jr_801734BC.c index 2605ea63b..a55bd399f 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_801734BC.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_801734BC.c @@ -3105,950 +3105,3 @@ void func_80178D18(void) { D_8018FB74 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F97C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018F97C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F97C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018F97C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018F9A4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018F9A4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018F960; - -s32 func_8017A3B0(void) { - switch (D_8018F960) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018F99C; -extern short D_8018F998; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018F99C) { - case 0: - func_800D0CA0(1); - D_8018F99C = D_8018F99C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018F998; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018F99C = D_8018F99C + 1; - if (D_8018F99C < 0x1E) { - return 0; - } - D_8018F99C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018F9DC; - extern s16 D_8018F9DE; - extern s16 D_8018F9E0; - extern s16 D_8018F9D4; - extern s16 D_8018F9D6; - extern s16 D_8018F9D8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F9DC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F9DE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F9E0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F9D4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F9D6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F9D8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018F964; -extern u16 D_8018F9E4; -extern u16 D_8018F9E6; -extern u16 D_8018F9E8; -extern s16 D_8018FB00; - -void func_8017B1D8(void) { - func_8012A418(); - D_8018FB00 = 0; - D_8018F964 = 0; - D_8018F9E4 = D_80126B5E; - D_8018F9E6 = D_80126B62; - D_8018F9E8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182C04[]; - extern s16 D_8018F9DC; - extern s16 D_8018F9D4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182C04[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182C04[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F9DC; - s16 *p78C = &D_8018F9D4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8018FB00 = 1; - D_8018F964 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018F984; - extern SV4_8017B368 D_8018F98C; - extern s16 D_8018F9DC; - extern s16 D_8018F9D4; - extern u16 D_80182C04; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018F984; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018F98C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182C04)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182C04)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018F9DC) = loc0; - (*(SV4_8017B368 *)&D_8018F9D4) = loc1; - D_8018FB00 = 1; - D_8018F964 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182C04[]; - extern s16 D_8018F9DC; - extern s16 D_8018F9DE; - extern s16 D_8018F9E0; - extern s16 D_8018F9D4; - extern s16 D_8018F9D6; - extern s16 D_8018F9D8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182C04[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182C04[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F9DC; - s16 *p78C = &D_8018F9D4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018F9DE; - v798 = D_8018F9E0; - v78C = *p78C; - v78E = D_8018F9D6; - v790 = D_8018F9D8; - __asm__ __volatile__(""); - D_8018FB00 = 1; - D_8018F964 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F964; -extern s16 D_8018F9DC; -extern s16 D_8018F9DE; -extern s16 D_8018F9E0; -extern s16 D_8018F9D4; -extern s16 D_8018F9D6; -extern s16 D_8018F9D8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018F964 = 0; - D_8018F9DC = (s16) D_80114F30; - D_8018F9DE = (s16) D_80114F34; - D_8018F9E0 = (s16) D_80114F38; - D_8018F9D4 = (s16) D_80114F24; - D_8018F9D6 = (s16) D_80114F28; - D_8018F9D8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018F9F4; -extern s16 D_8018F9F6; -extern s16 D_8018F9F8; -extern s16 D_8018F9FC; -extern s16 D_8018F9FE; -extern s16 D_8018FA00; - -void func_8017B824(void) { - D_8018F9F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018F9F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018F9F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018F9FC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018F9FE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018FA00 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018F9F4; -extern s16 D_8018F9F6; -extern s16 D_8018F9F8; -extern s16 D_8018F9FC; -extern s16 D_8018F9FE; -extern s16 D_8018FA00; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018F9F4; - D_80114F34 = D_8018F9F6; - D_80114F38 = D_8018F9F8; - D_80114F24 = D_8018F9FC; - D_80114F28 = D_8018F9FE; - D_80114F2C = D_8018FA00; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018F9DC), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F9D4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018F9DC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018F9D4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018F9E4; -extern u16 D_8018F9E6; -extern u16 D_8018F9E8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F964; -extern short D_8018F9EC; -extern short D_8018F9EE; -extern short D_8018F9F0; -extern s16 D_8018F9DC; -extern s16 D_8018F9DE; -extern s16 D_8018F9E0; -extern s16 D_8018F9D4; -extern s16 D_8018F9D6; -extern s16 D_8018F9D8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F9E4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F9E6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F9E8); - (*(s16 *)&D_8018F9EC) = buf[0]; - (*(s16 *)&D_8018F9EE) = buf[1]; - (*(s16 *)&D_8018F9F0) = buf[2]; - D_8018F9DC = D_80114F30 + buf[0]; - D_8018F964 = 0; - D_8018F9DE = D_80114F34 + buf[1]; - D_8018F9E0 = D_80114F38 + buf[2]; - D_8018F9D4 = D_80114F24 + buf[0]; - D_8018F9D6 = D_80114F28 + buf[1]; - D_8018F9D8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018F984; -extern SV4 D_8018F98C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F98C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018F984 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018F98C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F98C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018F984) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018F98C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018F9AC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018F9AC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018F964; -extern s16 D_8018FB00; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018F964 = D_8018F964 + 1; - if (D_8018F964 >= 0x1F) { - D_8018FB00 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018F964; -extern s16 D_8018FB00; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F964 = D_8018F964 + 1; - if (0x18 < D_8018F964) { - func_8012A4BC(); - D_8018FB00 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018F964; -extern void (*D_8018F9A8)(void); -extern short D_8018F9EC; -extern short D_8018F9EE; -extern short D_8018F9F0; -extern s16 D_8018FB00; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F964 = D_8018F964 + 1; - if (D_8018F964 >= 0x19) { - if (D_8018F9A8 != 0) { - (*D_8018F9A8)(); - } else { - D_80114F30 = D_80114F30 + D_8018F9EC; - D_80114F34 = D_80114F34 + D_8018F9EE; - D_80114F38 = D_80114F38 + D_8018F9F0; - D_80114F24 = D_80114F24 + D_8018F9EC; - D_80114F28 = D_80114F28 + D_8018F9EE; - D_80114F2C = D_80114F2C + D_8018F9F0; - func_8012A4BC(); - } - D_8018FB00 = 0; - } -} - - - -extern void (*D_80182CA4[])(void); - -void func_8017BE60(void *a0) { - D_80182CA4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80182CBC[])(void); - -void func_8017BEBC(void *a0) { - D_80182CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017BEF8); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017BFA4); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017C014); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017C3EC); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017C688); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017D5C0); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E4A0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E508); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E550(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E5CC(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E5EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E62C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E6A8); - - -extern void (*D_80182CC4[])(void); - -void func_8017E6C8(void *a0) { - D_80182CC4[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182CCC[])(void); - -void func_8017E704(void *a0) { - D_80182CCC[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182CD8[])(void); - -void func_8017E740(void *a0) { - D_80182CD8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182F84[])(void); - -void func_8017E77C(void *a0) { - D_80182F84[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E808); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E91C); - - -extern void (*D_80182F98[])(void); - -void func_8017E950(void *a0) { - D_80182F98[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E98C); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017E9CC); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EA88); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EADC); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EB6C); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EBF4); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EC64); - - -extern void (*D_80182FB4[])(void); - -void func_8017ECBC(void *a0) { - D_80182FB4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017ECF8); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017ED44); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EDB4); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EDDC); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EE04); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EEB4); - - -extern void (*D_80182FC0[])(void); - -void func_8017EF5C(void *a0) { - D_80182FC0[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern s32 func_8017EFEC(void); - void func_8017EF98(void) { - func_8017EFEC(); - } - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EFB8); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017EFEC); - - -s32 func_8017F198(void) { - return 135; -} - - - -extern void (*D_80182FC8[])(void); - -void func_8017F1A0(void *a0) { - D_80182FC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017F1DC); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_801734BC", func_8017F204); - -void func_8017F270(void) { -} - diff --git a/src/ov_SC03_003/ov_SC03_003_jr_80178D40.c b/src/ov_SC03_003/ov_SC03_003_jr_80178D40.c new file mode 100644 index 000000000..182abf0ef --- /dev/null +++ b/src/ov_SC03_003/ov_SC03_003_jr_80178D40.c @@ -0,0 +1,4417 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801824AC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018ECD0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801824A0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801824E4[]; +extern unsigned short D_801824EC[]; +extern unsigned short D_801824F4[]; +extern unsigned char D_8018ECD8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018ECD0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801824FC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EE0C; +extern M2C_UNK D_8018EE10; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED98; +extern void (*D_8018252C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EE14[]; +extern u8 D_8018EE1C[]; +extern u8 D_8018EDCC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182534[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182550[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182558[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801825C0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182564; +extern u8 D_80182570; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801825F4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801825FC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182650[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182684[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182674[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801826A0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182718[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182720[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182728[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182730[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182738[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182740[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018274C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182758[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182764[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182774[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182784[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018278C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182794[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018279C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801827A4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801827AC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801827B4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801827BC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801827C4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801827CC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801827D4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801827DC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801827E4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801827EC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801827F4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801827FC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182804[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018280C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182814[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018281C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182824[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018282C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182834[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182878[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018283C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801828A8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801828E4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018293C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018294C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182954[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182ABC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182AC8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E3BC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8018FB00; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F550; +extern short D_8018FB74; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8018FB74) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8018FB74)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F550 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8018FB74) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8018FAD0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8018FAD0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8018FB74) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8018FB74) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018F9AC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F554; + extern s32 D_8018F968; + extern s16 D_8018F96C; + extern s16 D_8018F970; + extern s16 D_8018F974; + extern s16 D_8018F978; + extern s32 D_8018F980; + extern s32 D_8018F984; + extern s32 D_8018F994; + extern s16 D_8018F998; + extern s16 D_8018F99C; + extern s32 D_8018F9A0; + extern s32 D_8018F9A8; + extern s32 D_8018F9AC[10]; + extern s32 D_8018FA18; + extern s16 D_8018FAD0; + extern s32 D_8018FAFC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8018FAD0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018F968); + D_8018F968 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F974, D_8018F978 ? 0x48 : 0x40); + (*(s16*)&D_8018FB74) = 2; + break; + case 0: + func_80179B28(D_8018F968); + D_8018F968 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F96C, D_8018F970 ? 0x48 : 0x40); + (*(s16*)&D_8018FB74) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8018FA18 != 0) { + func_80179B28(D_8018F968); + D_8018F968 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018F96C, D_8018F970 ? 0x48 : 0x40); + (*(s16*)&D_8018FB74) = 1; + } else { + (*(s16*)&D_8018FB74) = 3; + } + break; + case 0x32: + func_80179B28(D_8018F968); + D_8018F968 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018F96C, + D_8018F970 ? 0x48 : 0x40); + (*(s16*)&D_8018FB74) = 1; + break; + case 2: + func_80179B28(D_8018F968); + if (D_8018F980 != 0) { + D_8018F550 = D_8018F980; + D_8018F980 = 0; + (*(s16*)&D_8018FB74) = 3; + return; + } + (*(s16*)&D_8018FB74) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8018FB74) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8018FB74) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB74) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8018FB74) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB74) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x1B: + D_8018F9A0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8018FB74) = 4; + D_8018F554 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8018FB74) = 5; + D_8018F994 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018F994 = (s32)func_8017A3B0; + (*(s16*)&D_8018FB74) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x24: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB74) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB74) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8018FB74) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB74) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB74) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB74) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB74) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB74) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8018FB74) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F984); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F984); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F984); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F984); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x4E: + D_8018F9A8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x2B: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8018FB74) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8018FAFC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x34: + (*(s16*)&D_8018FB74) = 3; + D_8018F550 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018F980 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8018FB74) = 3; + D_8018F550 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8018FB74) = 3; + D_8018F550 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F550 = *(s32 *)(D_8018F550 + 4); + return; + case 0x37: + (*(s16*)&D_8018FB74) = 3; + D_8018F96C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F970 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8018FB74) = 3; + D_8018F974 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F978 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8018FB74) = 3; + D_8018F96C = w1; + D_8018F970 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8018FB74) = 3; + D_8018F974 = w2; + D_8018F978 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x43: + D_8018F994 = (s32)func_8017A3D8; + D_8018F99C = 0; + (*(s16*)&D_8018FB74) = 5; + D_8018F998 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB74) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB74) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018F9AC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8018FB74) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018F9AC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8018FB74) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018F9AC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8018FB74) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018F9AC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8018FB74) = 3; + break; + default: + break; + } +Lend: + D_8018F550 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F97C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018F97C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F97C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018F97C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018F9A4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018F9A4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018F960; + +s32 func_8017A3B0(void) { + switch (D_8018F960) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018F99C; +extern short D_8018F998; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018F99C) { + case 0: + func_800D0CA0(1); + D_8018F99C = D_8018F99C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018F998; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018F99C = D_8018F99C + 1; + if (D_8018F99C < 0x1E) { + return 0; + } + D_8018F99C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018F9DC; + extern s16 D_8018F9DE; + extern s16 D_8018F9E0; + extern s16 D_8018F9D4; + extern s16 D_8018F9D6; + extern s16 D_8018F9D8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F9DC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F9DE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F9E0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F9D4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F9D6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F9D8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018F964; +extern u16 D_8018F9E4; +extern u16 D_8018F9E6; +extern u16 D_8018F9E8; +extern s16 D_8018FB00; + +void func_8017B1D8(void) { + func_8012A418(); + D_8018FB00 = 0; + D_8018F964 = 0; + D_8018F9E4 = D_80126B5E; + D_8018F9E6 = D_80126B62; + D_8018F9E8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182C04[]; + extern s16 D_8018F9DC; + extern s16 D_8018F9D4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182C04[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182C04[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F9DC; + s16 *p78C = &D_8018F9D4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8018FB00 = 1; + D_8018F964 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018F984; + extern SV4_8017B368 D_8018F98C; + extern s16 D_8018F9DC; + extern s16 D_8018F9D4; + extern u16 D_80182C04; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018F984; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018F98C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182C04)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182C04)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018F9DC) = loc0; + (*(SV4_8017B368 *)&D_8018F9D4) = loc1; + D_8018FB00 = 1; + D_8018F964 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182C04[]; + extern s16 D_8018F9DC; + extern s16 D_8018F9DE; + extern s16 D_8018F9E0; + extern s16 D_8018F9D4; + extern s16 D_8018F9D6; + extern s16 D_8018F9D8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182C04[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182C04[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F9DC; + s16 *p78C = &D_8018F9D4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018F9DE; + v798 = D_8018F9E0; + v78C = *p78C; + v78E = D_8018F9D6; + v790 = D_8018F9D8; + __asm__ __volatile__(""); + D_8018FB00 = 1; + D_8018F964 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F964; +extern s16 D_8018F9DC; +extern s16 D_8018F9DE; +extern s16 D_8018F9E0; +extern s16 D_8018F9D4; +extern s16 D_8018F9D6; +extern s16 D_8018F9D8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018F964 = 0; + D_8018F9DC = (s16) D_80114F30; + D_8018F9DE = (s16) D_80114F34; + D_8018F9E0 = (s16) D_80114F38; + D_8018F9D4 = (s16) D_80114F24; + D_8018F9D6 = (s16) D_80114F28; + D_8018F9D8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018F9F4; +extern s16 D_8018F9F6; +extern s16 D_8018F9F8; +extern s16 D_8018F9FC; +extern s16 D_8018F9FE; +extern s16 D_8018FA00; + +void func_8017B824(void) { + D_8018F9F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018F9F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018F9F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018F9FC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018F9FE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018FA00 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018F9F4; +extern s16 D_8018F9F6; +extern s16 D_8018F9F8; +extern s16 D_8018F9FC; +extern s16 D_8018F9FE; +extern s16 D_8018FA00; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018F9F4; + D_80114F34 = D_8018F9F6; + D_80114F38 = D_8018F9F8; + D_80114F24 = D_8018F9FC; + D_80114F28 = D_8018F9FE; + D_80114F2C = D_8018FA00; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018F9DC), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F9D4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018F9DC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018F9D4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018F9E4; +extern u16 D_8018F9E6; +extern u16 D_8018F9E8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F964; +extern short D_8018F9EC; +extern short D_8018F9EE; +extern short D_8018F9F0; +extern s16 D_8018F9DC; +extern s16 D_8018F9DE; +extern s16 D_8018F9E0; +extern s16 D_8018F9D4; +extern s16 D_8018F9D6; +extern s16 D_8018F9D8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F9E4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F9E6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F9E8); + (*(s16 *)&D_8018F9EC) = buf[0]; + (*(s16 *)&D_8018F9EE) = buf[1]; + (*(s16 *)&D_8018F9F0) = buf[2]; + D_8018F9DC = D_80114F30 + buf[0]; + D_8018F964 = 0; + D_8018F9DE = D_80114F34 + buf[1]; + D_8018F9E0 = D_80114F38 + buf[2]; + D_8018F9D4 = D_80114F24 + buf[0]; + D_8018F9D6 = D_80114F28 + buf[1]; + D_8018F9D8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018F984; +extern SV4 D_8018F98C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F98C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018F984 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018F98C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F98C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018F984) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018F98C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018F9AC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018F9AC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018F964; +extern s16 D_8018FB00; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018F964 = D_8018F964 + 1; + if (D_8018F964 >= 0x1F) { + D_8018FB00 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018F964; +extern s16 D_8018FB00; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F964 = D_8018F964 + 1; + if (0x18 < D_8018F964) { + func_8012A4BC(); + D_8018FB00 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018F964; +extern void (*D_8018F9A8)(void); +extern short D_8018F9EC; +extern short D_8018F9EE; +extern short D_8018F9F0; +extern s16 D_8018FB00; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F964 = D_8018F964 + 1; + if (D_8018F964 >= 0x19) { + if (D_8018F9A8 != 0) { + (*D_8018F9A8)(); + } else { + D_80114F30 = D_80114F30 + D_8018F9EC; + D_80114F34 = D_80114F34 + D_8018F9EE; + D_80114F38 = D_80114F38 + D_8018F9F0; + D_80114F24 = D_80114F24 + D_8018F9EC; + D_80114F28 = D_80114F28 + D_8018F9EE; + D_80114F2C = D_80114F2C + D_8018F9F0; + func_8012A4BC(); + } + D_8018FB00 = 0; + } +} + + + +extern void (*D_80182CA4[])(void); + +void func_8017BE60(void *a0) { + D_80182CA4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80182CBC[])(void); + +void func_8017BEBC(void *a0) { + D_80182CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017BEF8); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017BFA4); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017C014); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017C3EC); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017C688); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017D5C0); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E4A0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E4E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E508); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E550(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E5CC(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E5EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E62C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E6A8); + + +extern void (*D_80182CC4[])(void); + +void func_8017E6C8(void *a0) { + D_80182CC4[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182CCC[])(void); + +void func_8017E704(void *a0) { + D_80182CCC[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182CD8[])(void); + +void func_8017E740(void *a0) { + D_80182CD8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182F84[])(void); + +void func_8017E77C(void *a0) { + D_80182F84[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E808); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E91C); + + +extern void (*D_80182F98[])(void); + +void func_8017E950(void *a0) { + D_80182F98[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E98C); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017E9CC); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EA88); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EADC); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EB6C); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EBF4); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EC64); + + +extern void (*D_80182FB4[])(void); + +void func_8017ECBC(void *a0) { + D_80182FB4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017ECF8); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017ED44); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EDB4); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EDDC); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EE04); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EEB4); + + +extern void (*D_80182FC0[])(void); + +void func_8017EF5C(void *a0) { + D_80182FC0[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern s32 func_8017EFEC(void); + void func_8017EF98(void) { + func_8017EFEC(); + } + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EFB8); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017EFEC); + + +s32 func_8017F198(void) { + return 135; +} + + + +extern void (*D_80182FC8[])(void); + +void func_8017F1A0(void *a0) { + D_80182FC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017F1DC); + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_80178D40", func_8017F204); + +void func_8017F270(void) { +} + + diff --git a/src/ov_SC03_006/ov_SC03_006_jr_801734BC.c b/src/ov_SC03_006/ov_SC03_006_jr_801734BC.c index 58b3d050e..f9939e723 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_801734BC.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_801734BC.c @@ -3105,2060 +3105,3 @@ void func_80178D18(void) { D_801F78B4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F72F4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801F72F4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F72F4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801F72F4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801F731C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801F731C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801F72D8; - -s32 func_8017A3B0(void) { - switch (D_801F72D8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801F7354; - extern s16 D_801F7356; - extern s16 D_801F7358; - extern s16 D_801F734C; - extern s16 D_801F734E; - extern s16 D_801F7350; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F7354, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F7356, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F7358, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F734C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F734E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F7350, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801F72DC; -extern u16 D_801F735C; -extern u16 D_801F735E; -extern u16 D_801F7360; -extern s16 D_801F7840; - -void func_8017B1D8(void) { - func_8012A418(); - D_801F7840 = 0; - D_801F72DC = 0; - D_801F735C = D_80126B5E; - D_801F735E = D_80126B62; - D_801F7360 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018FF20[]; - extern s16 D_801F7354; - extern s16 D_801F734C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018FF20[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018FF20[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F7354; - s16 *p78C = &D_801F734C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801F7840 = 1; - D_801F72DC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801F72FC; - extern SV4_8017B368 D_801F7304; - extern s16 D_801F7354; - extern s16 D_801F734C; - extern u16 D_8018FF20; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801F72FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801F7304; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018FF20)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018FF20)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801F7354) = loc0; - (*(SV4_8017B368 *)&D_801F734C) = loc1; - D_801F7840 = 1; - D_801F72DC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018FF20[]; - extern s16 D_801F7354; - extern s16 D_801F7356; - extern s16 D_801F7358; - extern s16 D_801F734C; - extern s16 D_801F734E; - extern s16 D_801F7350; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018FF20[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018FF20[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F7354; - s16 *p78C = &D_801F734C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801F7356; - v798 = D_801F7358; - v78C = *p78C; - v78E = D_801F734E; - v790 = D_801F7350; - __asm__ __volatile__(""); - D_801F7840 = 1; - D_801F72DC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F72DC; -extern s16 D_801F7354; -extern s16 D_801F7356; -extern s16 D_801F7358; -extern s16 D_801F734C; -extern s16 D_801F734E; -extern s16 D_801F7350; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801F72DC = 0; - D_801F7354 = (s16) D_80114F30; - D_801F7356 = (s16) D_80114F34; - D_801F7358 = (s16) D_80114F38; - D_801F734C = (s16) D_80114F24; - D_801F734E = (s16) D_80114F28; - D_801F7350 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801F736C; -extern s16 D_801F736E; -extern s16 D_801F7370; -extern s16 D_801F7374; -extern s16 D_801F7376; -extern s16 D_801F7378; - -void func_8017B824(void) { - D_801F736C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801F736E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801F7370 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801F7374 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801F7376 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801F7378 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801F736C; -extern s16 D_801F736E; -extern s16 D_801F7370; -extern s16 D_801F7374; -extern s16 D_801F7376; -extern s16 D_801F7378; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801F736C; - D_80114F34 = D_801F736E; - D_80114F38 = D_801F7370; - D_80114F24 = D_801F7374; - D_80114F28 = D_801F7376; - D_80114F2C = D_801F7378; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801F7354), src[8..15] -> (*(S8_8017B8E8 *)&D_801F734C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801F7354) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801F734C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801F735C; -extern u16 D_801F735E; -extern u16 D_801F7360; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F72DC; -extern short D_801F7364; -extern short D_801F7366; -extern short D_801F7368; -extern s16 D_801F7354; -extern s16 D_801F7356; -extern s16 D_801F7358; -extern s16 D_801F734C; -extern s16 D_801F734E; -extern s16 D_801F7350; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F735C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F735E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F7360); - (*(s16 *)&D_801F7364) = buf[0]; - (*(s16 *)&D_801F7366) = buf[1]; - (*(s16 *)&D_801F7368) = buf[2]; - D_801F7354 = D_80114F30 + buf[0]; - D_801F72DC = 0; - D_801F7356 = D_80114F34 + buf[1]; - D_801F7358 = D_80114F38 + buf[2]; - D_801F734C = D_80114F24 + buf[0]; - D_801F734E = D_80114F28 + buf[1]; - D_801F7350 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801F72FC; -extern SV4 D_801F7304; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F7304) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801F72FC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801F7304 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F7304)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801F72FC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801F7304) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801F7324[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801F7324; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801F72DC; -extern s16 D_801F7840; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801F72DC = D_801F72DC + 1; - if (D_801F72DC >= 0x1F) { - D_801F7840 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801F72DC; -extern s16 D_801F7840; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F72DC = D_801F72DC + 1; - if (0x18 < D_801F72DC) { - func_8012A4BC(); - D_801F7840 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801F72DC; -extern void (*D_801F7320)(void); -extern short D_801F7364; -extern short D_801F7366; -extern short D_801F7368; -extern s16 D_801F7840; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F72DC = D_801F72DC + 1; - if (D_801F72DC >= 0x19) { - if (D_801F7320 != 0) { - (*D_801F7320)(); - } else { - D_80114F30 = D_80114F30 + D_801F7364; - D_80114F34 = D_80114F34 + D_801F7366; - D_80114F38 = D_80114F38 + D_801F7368; - D_80114F24 = D_80114F24 + D_801F7364; - D_80114F28 = D_80114F28 + D_801F7366; - D_80114F2C = D_80114F2C + D_801F7368; - func_8012A4BC(); - } - D_801F7840 = 0; - } -} - - - -extern void (*D_8018FFC0[])(void); - -void func_8017BE60(void *a0) { - D_8018FFC0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_8018FFE4[])(void); - -void func_8017BEBC(void *a0) { - D_8018FFE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_8018FFEC[])(void); - -void func_8017C150(void *a0) { - D_8018FFEC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018FFD8; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018FFD8, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017C3C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017C750); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017C9C8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CB10); - - -extern void (*D_80190104[])(void); - -void func_8017CC90(void *a0) { - D_80190104[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CCCC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CD18); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CE0C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CE8C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017CFAC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D038); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D058); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D0AC); - - -extern void (*D_8019015C[])(void); - -void func_8017D0E8(void *a0) { - D_8019015C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D124); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D1D0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D3BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D408); - - -extern void (*D_80190170[])(void); - -void func_8017D714(void *a0) { - D_80190170[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D750); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D790); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D800); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D88C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D960); - - -extern void (*D_80190184[])(void); - -void func_8017D9B4(void *a0) { - D_80190184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017D9F0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017DAA4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017DC70); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017DE0C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E010); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E404); - -extern void (*D_80190460[])(void); - -void func_8017E584(void *a0) { - D_80190460[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E5C0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E634); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E710); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E924); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017E9F8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EAC8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EB20); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EC18); - - -extern void (*D_80190534[])(void); - -void func_8017EC58(void *a0) { - D_80190534[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EC94); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017ECD4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017ED50); - -void func_8017EDB0(void) { -} - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8019052C; - void func_8017EDB8(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019052C, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EDE0); - -extern s16 D_80126B0C; - s32 func_8017EDFC(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EE0C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EE6C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017EF38); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F104); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F160); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F1BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F220); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F2D0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F394); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F454); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F498); - -extern void func_8017F510(s32 arg0, s32 arg1, s32 arg2); - void func_8017F4EC(s32 arg0) { - func_8017F510(arg0, *(s32 *)(arg0 + 0x8), arg0 + 0x10); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8017F510); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80180CAC); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_80180CF0(void) { - func_80029124(0x142, 0); - } - - - -extern void (*D_801907B8[])(void); - -void func_80180D14(void *a0) { - D_801907B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80180D50); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180D94(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801907C0[])(void); - -void func_80180DB8(void *a0) { - D_801907C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80180DF4); - - -extern void (*D_801907C8[])(void); - -void func_80180E38(void *a0) { - D_801907C8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80180E74); - - -extern void (*D_801907D4[])(void); - -void func_80180EC8(void *a0) { - D_801907D4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80180F04); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180F44(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_80180FC0(void) { - func_800D1EBC(); - } - - - -extern void (*D_801907E0[])(void); - -void func_80180FE0(void *a0) { - D_801907E0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018101C); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_801907EC; - -void func_801810B4(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801907EC, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_801907F8; - -void func_801810DC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801907F8, 0x1000000); -} - - -extern s32 D_801907FC; -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - -void func_80181104(void) { - ((void (*)(s32, s32))func_8016EE40)((s32)&D_801907FC, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018112C); - -extern void (*D_80190810[])(void); - -void func_801811CC(u8 *param_1) -{ - D_80190810[param_1[0x4]](); -} - - -extern s32 func_80181228(); - void func_80181208(void) { - func_80181228(); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181228); - -extern void (*D_80190824[])(void); - -void func_80181418(void *a0) { - D_80190824[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181454); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801814DC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801815A8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018163C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181694); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018185C); - - -extern void (*D_80190844[])(void); - -void func_8018189C(void *a0) { - D_80190844[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801818D8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181A14); - -extern void (*D_801908B4[])(void); - -void func_80181ACC(void *a0) { - D_801908B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181B08); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181B50); - -void func_80181C48(void) { -} - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_801908EC[])(); - -void func_80181C50(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_801908EC[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181C9C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181D38); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181F74); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80181FC4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182080); - - -extern void (*D_80190C34[])(void); - -void func_80182290(void *a0) { - D_80190C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801822CC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801823B8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801826EC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182794); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801827E8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801828B0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801829FC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182A44); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801F76A8; -extern u16 D_80190C5C[]; -extern u16 D_801F76AC[]; -extern s32 D_80190C7C; - -extern void func_800183E0(s32 a0); - -void func_80182C8C(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80190C5C; - base = D_801F76A8 >> 8; - p = D_801F76AC; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80190C7C); - D_801F76A8 = D_801F76A8 + 0x100; -} - - - -extern void (*D_80190D34[])(void); - -void func_80182D18(void *a0) { - D_80190D34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182D54); - -void func_80182DB8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182DC0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182E0C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182E4C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182EA8); - - -extern void (*D_80190D44[])(void); - -void func_80182F10(void *a0) { - D_80190D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80182F4C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183090); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801830D0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183118); - - -extern void (*D_80190F70[])(void); - -void func_8018316C(void *a0) { - D_80190F70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801831A8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801833E4); - - -extern void (*D_801910DC[])(void); - -void func_801834B4(void *a0) { - D_801910DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801834F0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183564); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801835FC); - - -extern void func_8012BE98(s32 a0, u16 *a1); - extern s32 D_80190D9C; - s32 func_8018360C(s32 arg0) { - return ((s32 (*)(s32, void *))func_8012BE98)(arg0, &D_80190D9C) < 0x401; - } - - -extern void func_8012BE98(s32 a0, u16 *a1); - extern s32 D_80190DA4; - s32 func_80183634(s32 arg0) { - return ((s32 (*)(s32, void *))func_8012BE98)(arg0, &D_80190DA4) < 0x401; - } - - -void func_8018365C(void *a0) { - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 0xFC) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183668); - -s32 func_80183738(s32 *a0) { - return *(s16 *)((s32)a0 + 0xFC) > 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183744); - -extern void func_80029124(s32 arg0, s32 arg1); -extern void func_800D0CA0(s32 arg0); - -void func_80183774(void) { - func_80029124(0x138, 1); - func_800D0CA0(1); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801837A0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801837C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183864); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801838FC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801839A4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183A70); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183B14); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183B9C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183BC8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183C08); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183C4C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183CC4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183D18); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183DD4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183E3C); - -void func_80183EE0(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183EF0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80183FC8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184034); - -void func_801840B8(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - *(short *)((char *)a0 + 0xfe) = 0; - *(unsigned short *)((char *)a0 + 0x5c) = 0xaa10; - *(short *)((char *)a0 + 0x102) = 1; - } - - -void func_801840D8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801840E0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018415C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801841E4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184300); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184380); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018450C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801846D0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184800); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184860); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801848E4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801849A0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184A94); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184B30); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184B90); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184BF0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184C4C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184C9C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184CE8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184D98); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184DC8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80184FDC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185030); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801850D8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185120); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801851F4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185254); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801852C8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185304); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185344); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801853B4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018549C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185658); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801856A0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018584C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018594C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801859E4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185BD4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185D20); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185E8C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185EFC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80185F5C); - - -extern void (*D_801C5B6C[])(void); - -void func_80186034(void *a0) { - D_801C5B6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186070); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186140); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801861D8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186334); - - -extern void (*D_801C5BD4[])(void); - -void func_80186484(void *a0) { - D_801C5BD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801864C0(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 1; - *(s32 *)((char *)a0 + 0x1c) = 2; - *(s8 *)((char *)a0 + 0xfc) = 1; - *(s8 *)((char *)a0 + 0xfe) = 2; - *(s8 *)((char *)a0 + 0xfd) = 0; - *(s8 *)((char *)a0 + 0xff) = 4; - *(s16 *)((char *)a0 + 0xdc) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801864F4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018654C); - - -extern void (*D_801C5C08[])(void); - -void func_801865E8(void *a0) { - D_801C5C08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186624); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186710); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801867A4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801868AC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801869CC); - - -extern void (*D_801C5C58[])(void); - -void func_80186D18(void *a0) { - D_801C5C58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186D54); - - -extern void (*D_801C9794[])(void); - -void func_80186DD4(void *a0) { - D_801C9794[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186E10); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186EE4); - -void func_80186F0C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80186F14); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187060); - -extern void func_8012C218(void *a0); - void func_80187180(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801871AC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801871BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801871CC); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018720C(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -extern s16 func_80174764(void); - s32 func_80187240(void) { - return ((u32)((s32 (*)(void))func_80174764)() == 1); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187264); - - -extern void (*D_801C97BC[])(void); - -void func_801872C8(void *a0) { - D_801C97BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187304); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018738C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018744C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801874BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801875B4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187628); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801876E4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187778); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801877D8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187914); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801879C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187A9C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187C94); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187CFC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187E24); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80187EF0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018803C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188080); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801880A8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188134); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188410); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188528); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801886C0); - -extern void func_8013240C(s32 a0); -extern s32 D_801F7730; - -void func_80188710(void) { - ((void (*)(void *))func_8013240C)(&D_801F7730); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188738); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018876C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801887B0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801888A8); - - -extern s32 rand(void); - void func_8018893C(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0x1; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188978); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188A2C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188A94); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188AF4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188C18); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188C90); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188D1C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188DA0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188DD0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188EA0); - -extern s32 func_8012BEE8(s32 arg); - void func_80188F14(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188F48); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80188FB0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801890C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189194); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801891DC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189304); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801893BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018944C); - -extern s32 func_80189CD4(void); - void func_80189478(void) { - func_80189CD4(); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189498); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801894B0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801894DC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189554); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018960C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801896EC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189744); - -void func_801897E8(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801897F8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801898E0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018993C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_801899B4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189A84); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189B3C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189C68); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189CD4); - -extern s32 rand(void); - void func_80189DE0(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189E1C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_80189E88); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A05C); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018A100(void) { - func_8002D4C8(0x6AA, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A124); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A168); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A1B4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A2F8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A384); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A3D4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A484); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A4B4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A538); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A598); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A5C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A624); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A698); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A6F4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A86C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A928); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018A96C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AA60); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AAE4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AC10); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AC60); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018ACD0); - -extern void func_8012C098(void); - void func_8018AD7C(void) { - func_8012C098(); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AD9C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AE08); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AE90); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AED4); - - -void func_8018AF78(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018AF88); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801E7D24; - -void func_8018B034(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801E7D24)) { - func_8012A828(arg0, &D_801E7D24); - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B07C); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801E81AC; - -void func_8018B0C4(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801E81AC); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018B1B4 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_8018B1B4(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801E8104; - -s32 func_8018B104(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_8018B1B4(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801E8104); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801E7EC4; - -void func_8018B1B4(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801E7EC4); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_8018B210(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B224); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B280); - - -extern void (*D_801E01A8[])(void); - -void func_8018B304(void *a0) { - D_801E01A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E01F0[])(void); - -void func_8018B340(void *a0) { - D_801E01F0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern int func_8001CA88(int, void *); -extern void func_80143994(s32 a0, s32 a1); -extern int D_801E01B0; - -void func_8018B37C(int param_1) -{ - int iVar1; - - iVar1 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = iVar1; - if (iVar1 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - *(short *)(param_1 + 2) = 1; - func_8001CA88(*(int *)(param_1 + 0x20), &D_801E01B0); - func_80143994(param_1, 0x1000); - } -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B3E0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B438); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B4A4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B5E0); - -extern s32 func_8012BEE8(s32 arg); - extern void func_8018B224(s32 arg); - void func_8018B64C(void *a0) { - if (func_8012BEE8((s32)a0)) { - ((void (*)(s32))func_8018B224)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B684); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B6E8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B740); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B7F8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018B868); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8018B9F8(void) { - func_80029124(0xF0, 1); - } - - -extern void (*D_801F1714[])(void); - -void func_8018BA1C(void *a0) { - D_801F1714[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018BA58); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018BB54); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018BDE4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018BF78); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018BFD0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C04C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C090); - -extern void func_80174684(void *); - extern s32 func_8018C118; - void func_8018C0F0(void) { - func_80174684(&func_8018C118); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C118); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C154); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C1C4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C240); - -void func_8018C29C(void) { -} - -extern void func_80174684(void *); - extern s32 func_8018C2CC; - void func_8018C2A4(void) { - func_80174684(&func_8018C2CC); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C2CC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C308); - -void func_8018C374(void) { -} - -extern void func_80174684(void *); - extern s32 func_8018C3A4(s32); - void func_8018C37C(void) { - func_80174684((void *)func_8018C3A4); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C3A4); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C3E0); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C43C); - -void func_8018C48C(void) { -} - -extern void func_80174684(void *); - extern s32 func_8018C4BC(s32); - void func_8018C494(void) { - func_80174684((void *)func_8018C4BC); - } - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C4BC); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C4F8); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_801734BC", func_8018C548); - -void func_8018C58C(void) { -} - diff --git a/src/ov_SC03_006/ov_SC03_006_jr_80178D40.c b/src/ov_SC03_006/ov_SC03_006_jr_80178D40.c new file mode 100644 index 000000000..8f0695257 --- /dev/null +++ b/src/ov_SC03_006/ov_SC03_006_jr_80178D40.c @@ -0,0 +1,5527 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018F7C8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801F6648; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018F7BC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018F800[]; +extern unsigned short D_8018F808[]; +extern unsigned short D_8018F810[]; +extern unsigned char D_801F6650[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801F6648; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018F818[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F6784; +extern M2C_UNK D_801F6788; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F6710; +extern void (*D_8018F848[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801F678C[]; +extern u8 D_801F6794[]; +extern u8 D_801F6744[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018F850[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018F86C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018F874[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018F8DC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018F880; +extern u8 D_8018F88C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018F910[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018F918[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018F96C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018F9A0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018F990[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018F9BC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018FA34[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018FA3C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018FA44[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018FA4C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018FA54[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018FA5C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018FA68[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018FA74[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018FA80[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018FA90[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018FAA0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018FAA8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018FAB0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018FAB8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018FAC0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018FAC8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018FAD0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018FAD8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018FAE0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018FAE8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018FAF0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018FAF8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018FB00[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018FB08[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018FB10[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018FB18[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018FB20[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018FB28[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018FB30[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018FB38[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018FB40[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018FB48[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018FB50[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018FB94[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018FB58; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018FBC4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018FC00[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018FC58[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018FC68[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018FC70[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018FDD8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018FDE4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801F5C78; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801F7840; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801F6EC8; +extern short D_801F78B4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801F78B4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801F78B4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801F6EC8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801F78B4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801F7810 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801F7810 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801F78B4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801F78B4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801F7324[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801F6ECC; + extern s32 D_801F72E0; + extern s16 D_801F72E4; + extern s16 D_801F72E8; + extern s16 D_801F72EC; + extern s16 D_801F72F0; + extern s32 D_801F72F8; + extern s32 D_801F72FC; + extern s32 D_801F730C; + extern s16 D_801F7310; + extern s16 D_801F7314; + extern s32 D_801F7318; + extern s32 D_801F7320; + extern s32 D_801F7324[10]; + extern s32 D_801F7758; + extern s16 D_801F7810; + extern s32 D_801F783C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801F7810; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801F72E0); + D_801F72E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F72EC, D_801F72F0 ? 0x48 : 0x40); + (*(s16*)&D_801F78B4) = 2; + break; + case 0: + func_80179B28(D_801F72E0); + D_801F72E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F72E4, D_801F72E8 ? 0x48 : 0x40); + (*(s16*)&D_801F78B4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801F7758 != 0) { + func_80179B28(D_801F72E0); + D_801F72E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801F72E4, D_801F72E8 ? 0x48 : 0x40); + (*(s16*)&D_801F78B4) = 1; + } else { + (*(s16*)&D_801F78B4) = 3; + } + break; + case 0x32: + func_80179B28(D_801F72E0); + D_801F72E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801F72E4, + D_801F72E8 ? 0x48 : 0x40); + (*(s16*)&D_801F78B4) = 1; + break; + case 2: + func_80179B28(D_801F72E0); + if (D_801F72F8 != 0) { + D_801F6EC8 = D_801F72F8; + D_801F72F8 = 0; + (*(s16*)&D_801F78B4) = 3; + return; + } + (*(s16*)&D_801F78B4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801F78B4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801F78B4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F78B4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801F78B4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F78B4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x1B: + D_801F7318 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801F78B4) = 4; + D_801F6ECC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801F78B4) = 5; + D_801F730C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801F730C = (s32)func_8017A3B0; + (*(s16*)&D_801F78B4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x24: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F78B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F78B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801F78B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F78B4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F78B4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F78B4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F78B4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F78B4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801F78B4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F72FC); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F72FC); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F72FC); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F72FC); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x4E: + D_801F7320 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x2B: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801F78B4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801F783C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x34: + (*(s16*)&D_801F78B4) = 3; + D_801F6EC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801F72F8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801F78B4) = 3; + D_801F6EC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801F78B4) = 3; + D_801F6EC8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801F6EC8 = *(s32 *)(D_801F6EC8 + 4); + return; + case 0x37: + (*(s16*)&D_801F78B4) = 3; + D_801F72E4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F72E8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801F78B4) = 3; + D_801F72EC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F72F0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801F78B4) = 3; + D_801F72E4 = w1; + D_801F72E8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801F78B4) = 3; + D_801F72EC = w2; + D_801F72F0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x43: + D_801F730C = (s32)func_8017A3D8; + D_801F7314 = 0; + (*(s16*)&D_801F78B4) = 5; + D_801F7310 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F78B4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F78B4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801F7324; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801F78B4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801F7324; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801F78B4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801F7324[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801F78B4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801F7324; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801F78B4) = 3; + break; + default: + break; + } +Lend: + D_801F6EC8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F72F4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801F72F4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F72F4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801F72F4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801F731C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801F731C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801F72D8; + +s32 func_8017A3B0(void) { + switch (D_801F72D8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801F7354; + extern s16 D_801F7356; + extern s16 D_801F7358; + extern s16 D_801F734C; + extern s16 D_801F734E; + extern s16 D_801F7350; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F7354, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F7356, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F7358, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F734C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F734E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F7350, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801F72DC; +extern u16 D_801F735C; +extern u16 D_801F735E; +extern u16 D_801F7360; +extern s16 D_801F7840; + +void func_8017B1D8(void) { + func_8012A418(); + D_801F7840 = 0; + D_801F72DC = 0; + D_801F735C = D_80126B5E; + D_801F735E = D_80126B62; + D_801F7360 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018FF20[]; + extern s16 D_801F7354; + extern s16 D_801F734C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018FF20[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018FF20[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F7354; + s16 *p78C = &D_801F734C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801F7840 = 1; + D_801F72DC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801F72FC; + extern SV4_8017B368 D_801F7304; + extern s16 D_801F7354; + extern s16 D_801F734C; + extern u16 D_8018FF20; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801F72FC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801F7304; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018FF20)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018FF20)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801F7354) = loc0; + (*(SV4_8017B368 *)&D_801F734C) = loc1; + D_801F7840 = 1; + D_801F72DC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018FF20[]; + extern s16 D_801F7354; + extern s16 D_801F7356; + extern s16 D_801F7358; + extern s16 D_801F734C; + extern s16 D_801F734E; + extern s16 D_801F7350; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018FF20[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018FF20[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F7354; + s16 *p78C = &D_801F734C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801F7356; + v798 = D_801F7358; + v78C = *p78C; + v78E = D_801F734E; + v790 = D_801F7350; + __asm__ __volatile__(""); + D_801F7840 = 1; + D_801F72DC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F72DC; +extern s16 D_801F7354; +extern s16 D_801F7356; +extern s16 D_801F7358; +extern s16 D_801F734C; +extern s16 D_801F734E; +extern s16 D_801F7350; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801F72DC = 0; + D_801F7354 = (s16) D_80114F30; + D_801F7356 = (s16) D_80114F34; + D_801F7358 = (s16) D_80114F38; + D_801F734C = (s16) D_80114F24; + D_801F734E = (s16) D_80114F28; + D_801F7350 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801F736C; +extern s16 D_801F736E; +extern s16 D_801F7370; +extern s16 D_801F7374; +extern s16 D_801F7376; +extern s16 D_801F7378; + +void func_8017B824(void) { + D_801F736C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801F736E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801F7370 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801F7374 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801F7376 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801F7378 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801F736C; +extern s16 D_801F736E; +extern s16 D_801F7370; +extern s16 D_801F7374; +extern s16 D_801F7376; +extern s16 D_801F7378; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801F736C; + D_80114F34 = D_801F736E; + D_80114F38 = D_801F7370; + D_80114F24 = D_801F7374; + D_80114F28 = D_801F7376; + D_80114F2C = D_801F7378; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801F7354), src[8..15] -> (*(S8_8017B8E8 *)&D_801F734C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801F7354) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801F734C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801F735C; +extern u16 D_801F735E; +extern u16 D_801F7360; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F72DC; +extern short D_801F7364; +extern short D_801F7366; +extern short D_801F7368; +extern s16 D_801F7354; +extern s16 D_801F7356; +extern s16 D_801F7358; +extern s16 D_801F734C; +extern s16 D_801F734E; +extern s16 D_801F7350; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F735C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F735E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F7360); + (*(s16 *)&D_801F7364) = buf[0]; + (*(s16 *)&D_801F7366) = buf[1]; + (*(s16 *)&D_801F7368) = buf[2]; + D_801F7354 = D_80114F30 + buf[0]; + D_801F72DC = 0; + D_801F7356 = D_80114F34 + buf[1]; + D_801F7358 = D_80114F38 + buf[2]; + D_801F734C = D_80114F24 + buf[0]; + D_801F734E = D_80114F28 + buf[1]; + D_801F7350 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801F72FC; +extern SV4 D_801F7304; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F7304) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801F72FC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801F7304 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F7304)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801F72FC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801F7304) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801F7324[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801F7324; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801F72DC; +extern s16 D_801F7840; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801F72DC = D_801F72DC + 1; + if (D_801F72DC >= 0x1F) { + D_801F7840 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801F72DC; +extern s16 D_801F7840; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F72DC = D_801F72DC + 1; + if (0x18 < D_801F72DC) { + func_8012A4BC(); + D_801F7840 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801F72DC; +extern void (*D_801F7320)(void); +extern short D_801F7364; +extern short D_801F7366; +extern short D_801F7368; +extern s16 D_801F7840; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F72DC = D_801F72DC + 1; + if (D_801F72DC >= 0x19) { + if (D_801F7320 != 0) { + (*D_801F7320)(); + } else { + D_80114F30 = D_80114F30 + D_801F7364; + D_80114F34 = D_80114F34 + D_801F7366; + D_80114F38 = D_80114F38 + D_801F7368; + D_80114F24 = D_80114F24 + D_801F7364; + D_80114F28 = D_80114F28 + D_801F7366; + D_80114F2C = D_80114F2C + D_801F7368; + func_8012A4BC(); + } + D_801F7840 = 0; + } +} + + + +extern void (*D_8018FFC0[])(void); + +void func_8017BE60(void *a0) { + D_8018FFC0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_8018FFE4[])(void); + +void func_8017BEBC(void *a0) { + D_8018FFE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_8018FFEC[])(void); + +void func_8017C150(void *a0) { + D_8018FFEC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018FFD8; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018FFD8, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017C3C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017C750); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017C9C8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CB10); + + +extern void (*D_80190104[])(void); + +void func_8017CC90(void *a0) { + D_80190104[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CCCC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CD18); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CE0C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CE8C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017CFAC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D038); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D058); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D0AC); + + +extern void (*D_8019015C[])(void); + +void func_8017D0E8(void *a0) { + D_8019015C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D124); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D1D0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D3BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D408); + + +extern void (*D_80190170[])(void); + +void func_8017D714(void *a0) { + D_80190170[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D750); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D790); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D800); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D88C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D960); + + +extern void (*D_80190184[])(void); + +void func_8017D9B4(void *a0) { + D_80190184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017D9F0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017DAA4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017DC70); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017DE0C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E010); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E404); + +extern void (*D_80190460[])(void); + +void func_8017E584(void *a0) { + D_80190460[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E5C0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E634); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E710); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E924); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017E9F8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EAC8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EB20); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EC18); + + +extern void (*D_80190534[])(void); + +void func_8017EC58(void *a0) { + D_80190534[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EC94); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017ECD4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017ED50); + +void func_8017EDB0(void) { +} + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8019052C; + void func_8017EDB8(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019052C, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EDE0); + +extern s16 D_80126B0C; + s32 func_8017EDFC(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EE0C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EE6C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017EF38); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F104); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F160); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F1BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F220); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F2D0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F394); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F454); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F498); + +extern void func_8017F510(s32 arg0, s32 arg1, s32 arg2); + void func_8017F4EC(s32 arg0) { + func_8017F510(arg0, *(s32 *)(arg0 + 0x8), arg0 + 0x10); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8017F510); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80180CAC); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_80180CF0(void) { + func_80029124(0x142, 0); + } + + + +extern void (*D_801907B8[])(void); + +void func_80180D14(void *a0) { + D_801907B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80180D50); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180D94(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801907C0[])(void); + +void func_80180DB8(void *a0) { + D_801907C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80180DF4); + + +extern void (*D_801907C8[])(void); + +void func_80180E38(void *a0) { + D_801907C8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80180E74); + + +extern void (*D_801907D4[])(void); + +void func_80180EC8(void *a0) { + D_801907D4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80180F04); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180F44(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_80180FC0(void) { + func_800D1EBC(); + } + + + +extern void (*D_801907E0[])(void); + +void func_80180FE0(void *a0) { + D_801907E0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018101C); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801907EC; + +void func_801810B4(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801907EC, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801907F8; + +void func_801810DC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801907F8, 0x1000000); +} + + +extern s32 D_801907FC; +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + +void func_80181104(void) { + ((void (*)(s32, s32))func_8016EE40)((s32)&D_801907FC, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018112C); + +extern void (*D_80190810[])(void); + +void func_801811CC(u8 *param_1) +{ + D_80190810[param_1[0x4]](); +} + + +extern s32 func_80181228(); + void func_80181208(void) { + func_80181228(); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181228); + +extern void (*D_80190824[])(void); + +void func_80181418(void *a0) { + D_80190824[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181454); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801814DC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801815A8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018163C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181694); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018185C); + + +extern void (*D_80190844[])(void); + +void func_8018189C(void *a0) { + D_80190844[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801818D8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181A14); + +extern void (*D_801908B4[])(void); + +void func_80181ACC(void *a0) { + D_801908B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181B08); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181B50); + +void func_80181C48(void) { +} + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_801908EC[])(); + +void func_80181C50(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_801908EC[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181C9C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181D38); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181F74); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80181FC4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182080); + + +extern void (*D_80190C34[])(void); + +void func_80182290(void *a0) { + D_80190C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801822CC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801823B8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801826EC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182794); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801827E8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801828B0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801829FC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182A44); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801F76A8; +extern u16 D_80190C5C[]; +extern u16 D_801F76AC[]; +extern s32 D_80190C7C; + +extern void func_800183E0(s32 a0); + +void func_80182C8C(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80190C5C; + base = D_801F76A8 >> 8; + p = D_801F76AC; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80190C7C); + D_801F76A8 = D_801F76A8 + 0x100; +} + + + +extern void (*D_80190D34[])(void); + +void func_80182D18(void *a0) { + D_80190D34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182D54); + +void func_80182DB8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182DC0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182E0C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182E4C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182EA8); + + +extern void (*D_80190D44[])(void); + +void func_80182F10(void *a0) { + D_80190D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80182F4C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183090); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801830D0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183118); + + +extern void (*D_80190F70[])(void); + +void func_8018316C(void *a0) { + D_80190F70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801831A8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801833E4); + + +extern void (*D_801910DC[])(void); + +void func_801834B4(void *a0) { + D_801910DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801834F0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183564); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801835FC); + + +extern void func_8012BE98(s32 a0, u16 *a1); + extern s32 D_80190D9C; + s32 func_8018360C(s32 arg0) { + return ((s32 (*)(s32, void *))func_8012BE98)(arg0, &D_80190D9C) < 0x401; + } + + +extern void func_8012BE98(s32 a0, u16 *a1); + extern s32 D_80190DA4; + s32 func_80183634(s32 arg0) { + return ((s32 (*)(s32, void *))func_8012BE98)(arg0, &D_80190DA4) < 0x401; + } + + +void func_8018365C(void *a0) { + *(s32 *)((s32)a0 + 0x1C) = 0; + *(s16 *)((s32)a0 + 0xFC) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183668); + +s32 func_80183738(s32 *a0) { + return *(s16 *)((s32)a0 + 0xFC) > 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183744); + +extern void func_80029124(s32 arg0, s32 arg1); +extern void func_800D0CA0(s32 arg0); + +void func_80183774(void) { + func_80029124(0x138, 1); + func_800D0CA0(1); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801837A0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801837C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183864); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801838FC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801839A4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183A70); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183B14); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183B9C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183BC8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183C08); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183C4C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183CC4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183D18); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183DD4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183E3C); + +void func_80183EE0(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183EF0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80183FC8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184034); + +void func_801840B8(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + *(short *)((char *)a0 + 0xfe) = 0; + *(unsigned short *)((char *)a0 + 0x5c) = 0xaa10; + *(short *)((char *)a0 + 0x102) = 1; + } + + +void func_801840D8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801840E0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018415C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801841E4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184300); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184380); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018450C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801846D0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184800); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184860); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801848E4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801849A0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184A94); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184B30); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184B90); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184BF0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184C4C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184C9C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184CE8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184D98); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184DC8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80184FDC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185030); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801850D8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185120); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801851F4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185254); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801852C8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185304); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185344); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801853B4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018549C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185658); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801856A0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018584C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018594C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801859E4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185BD4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185D20); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185E8C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185EFC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80185F5C); + + +extern void (*D_801C5B6C[])(void); + +void func_80186034(void *a0) { + D_801C5B6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186070); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186140); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801861D8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186334); + + +extern void (*D_801C5BD4[])(void); + +void func_80186484(void *a0) { + D_801C5BD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801864C0(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 1; + *(s32 *)((char *)a0 + 0x1c) = 2; + *(s8 *)((char *)a0 + 0xfc) = 1; + *(s8 *)((char *)a0 + 0xfe) = 2; + *(s8 *)((char *)a0 + 0xfd) = 0; + *(s8 *)((char *)a0 + 0xff) = 4; + *(s16 *)((char *)a0 + 0xdc) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801864F4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018654C); + + +extern void (*D_801C5C08[])(void); + +void func_801865E8(void *a0) { + D_801C5C08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186624); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186710); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801867A4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801868AC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801869CC); + + +extern void (*D_801C5C58[])(void); + +void func_80186D18(void *a0) { + D_801C5C58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186D54); + + +extern void (*D_801C9794[])(void); + +void func_80186DD4(void *a0) { + D_801C9794[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186E10); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186EE4); + +void func_80186F0C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80186F14); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187060); + +extern void func_8012C218(void *a0); + void func_80187180(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801871AC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801871BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801871CC); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018720C(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +extern s16 func_80174764(void); + s32 func_80187240(void) { + return ((u32)((s32 (*)(void))func_80174764)() == 1); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187264); + + +extern void (*D_801C97BC[])(void); + +void func_801872C8(void *a0) { + D_801C97BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187304); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018738C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018744C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801874BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801875B4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187628); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801876E4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187778); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801877D8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187914); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801879C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187A9C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187C94); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187CFC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187E24); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80187EF0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018803C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188080); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801880A8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188134); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188410); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188528); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801886C0); + +extern void func_8013240C(s32 a0); +extern s32 D_801F7730; + +void func_80188710(void) { + ((void (*)(void *))func_8013240C)(&D_801F7730); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188738); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018876C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801887B0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801888A8); + + +extern s32 rand(void); + void func_8018893C(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0x1; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188978); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188A2C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188A94); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188AF4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188C18); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188C90); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188D1C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188DA0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188DD0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188EA0); + +extern s32 func_8012BEE8(s32 arg); + void func_80188F14(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188F48); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80188FB0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801890C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189194); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801891DC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189304); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801893BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018944C); + +extern s32 func_80189CD4(void); + void func_80189478(void) { + func_80189CD4(); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189498); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801894B0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801894DC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189554); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018960C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801896EC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189744); + +void func_801897E8(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801897F8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801898E0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018993C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_801899B4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189A84); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189B3C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189C68); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189CD4); + +extern s32 rand(void); + void func_80189DE0(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189E1C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_80189E88); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A05C); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018A100(void) { + func_8002D4C8(0x6AA, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A124); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A168); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A1B4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A2F8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A384); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A3D4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A484); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A4B4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A538); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A598); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A5C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A624); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A698); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A6F4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A86C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A928); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018A96C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AA60); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AAE4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AC10); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AC60); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018ACD0); + +extern void func_8012C098(void); + void func_8018AD7C(void) { + func_8012C098(); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AD9C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AE08); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AE90); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AED4); + + +void func_8018AF78(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018AF88); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801E7D24; + +void func_8018B034(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801E7D24)) { + func_8012A828(arg0, &D_801E7D24); + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B07C); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801E81AC; + +void func_8018B0C4(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801E81AC); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018B1B4 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_8018B1B4(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801E8104; + +s32 func_8018B104(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_8018B1B4(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801E8104); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801E7EC4; + +void func_8018B1B4(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801E7EC4); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_8018B210(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B224); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B280); + + +extern void (*D_801E01A8[])(void); + +void func_8018B304(void *a0) { + D_801E01A8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E01F0[])(void); + +void func_8018B340(void *a0) { + D_801E01F0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (clean if/else, sh into delay slot of func_8001CA88 call) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern int func_8001CA88(int, void *); +extern void func_80143994(s32 a0, s32 a1); +extern int D_801E01B0; + +void func_8018B37C(int param_1) +{ + int iVar1; + + iVar1 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = iVar1; + if (iVar1 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + *(short *)(param_1 + 2) = 1; + func_8001CA88(*(int *)(param_1 + 0x20), &D_801E01B0); + func_80143994(param_1, 0x1000); + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B3E0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B438); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B4A4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B5E0); + +extern s32 func_8012BEE8(s32 arg); + extern void func_8018B224(s32 arg); + void func_8018B64C(void *a0) { + if (func_8012BEE8((s32)a0)) { + ((void (*)(s32))func_8018B224)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B684); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B6E8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B740); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B7F8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018B868); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8018B9F8(void) { + func_80029124(0xF0, 1); + } + + +extern void (*D_801F1714[])(void); + +void func_8018BA1C(void *a0) { + D_801F1714[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018BA58); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018BB54); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018BDE4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018BF78); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018BFD0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C04C); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C090); + +extern void func_80174684(void *); + extern s32 func_8018C118; + void func_8018C0F0(void) { + func_80174684(&func_8018C118); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C118); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C154); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C1C4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C240); + +void func_8018C29C(void) { +} + +extern void func_80174684(void *); + extern s32 func_8018C2CC; + void func_8018C2A4(void) { + func_80174684(&func_8018C2CC); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C2CC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C308); + +void func_8018C374(void) { +} + +extern void func_80174684(void *); + extern s32 func_8018C3A4(s32); + void func_8018C37C(void) { + func_80174684((void *)func_8018C3A4); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C3A4); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C3E0); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C43C); + +void func_8018C48C(void) { +} + +extern void func_80174684(void *); + extern s32 func_8018C4BC(s32); + void func_8018C494(void) { + func_80174684((void *)func_8018C4BC); + } + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C4BC); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C4F8); + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_80178D40", func_8018C548); + +void func_8018C58C(void) { +} + + diff --git a/src/ov_SC03_007/ov_SC03_007_jr_801734BC.c b/src/ov_SC03_007/ov_SC03_007_jr_801734BC.c index c1a5581da..663f200c0 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_801734BC.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_801734BC.c @@ -3105,1792 +3105,3 @@ void func_80178D18(void) { D_801EB2C4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E9C4C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E9C4C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E9C4C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E9C4C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E9C74; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E9C74 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E9C30; - -s32 func_8017A3B0(void) { - switch (D_801E9C30) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E9C6C; -extern short D_801E9C68; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E9C6C) { - case 0: - func_800D0CA0(1); - D_801E9C6C = D_801E9C6C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E9C68; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E9C6C = D_801E9C6C + 1; - if (D_801E9C6C < 0x1E) { - return 0; - } - D_801E9C6C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E9CAC; - extern s16 D_801E9CAE; - extern s16 D_801E9CB0; - extern s16 D_801E9CA4; - extern s16 D_801E9CA6; - extern s16 D_801E9CA8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E9CAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E9CAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E9CB0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E9CA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E9CA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E9CA8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E9C34; -extern u16 D_801E9CB4; -extern u16 D_801E9CB6; -extern u16 D_801E9CB8; -extern s16 D_801EB250; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EB250 = 0; - D_801E9C34 = 0; - D_801E9CB4 = D_80126B5E; - D_801E9CB6 = D_80126B62; - D_801E9CB8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018AD18[]; - extern s16 D_801E9CAC; - extern s16 D_801E9CA4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018AD18[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018AD18[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E9CAC; - s16 *p78C = &D_801E9CA4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EB250 = 1; - D_801E9C34 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E9C54; - extern SV4_8017B368 D_801E9C5C; - extern s16 D_801E9CAC; - extern s16 D_801E9CA4; - extern u16 D_8018AD18; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E9C54; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E9C5C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018AD18)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018AD18)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E9CAC) = loc0; - (*(SV4_8017B368 *)&D_801E9CA4) = loc1; - D_801EB250 = 1; - D_801E9C34 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018AD18[]; - extern s16 D_801E9CAC; - extern s16 D_801E9CAE; - extern s16 D_801E9CB0; - extern s16 D_801E9CA4; - extern s16 D_801E9CA6; - extern s16 D_801E9CA8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018AD18[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018AD18[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E9CAC; - s16 *p78C = &D_801E9CA4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E9CAE; - v798 = D_801E9CB0; - v78C = *p78C; - v78E = D_801E9CA6; - v790 = D_801E9CA8; - __asm__ __volatile__(""); - D_801EB250 = 1; - D_801E9C34 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E9C34; -extern s16 D_801E9CAC; -extern s16 D_801E9CAE; -extern s16 D_801E9CB0; -extern s16 D_801E9CA4; -extern s16 D_801E9CA6; -extern s16 D_801E9CA8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E9C34 = 0; - D_801E9CAC = (s16) D_80114F30; - D_801E9CAE = (s16) D_80114F34; - D_801E9CB0 = (s16) D_80114F38; - D_801E9CA4 = (s16) D_80114F24; - D_801E9CA6 = (s16) D_80114F28; - D_801E9CA8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E9CC4; -extern s16 D_801E9CC6; -extern s16 D_801E9CC8; -extern s16 D_801E9CCC; -extern s16 D_801E9CCE; -extern s16 D_801E9CD0; - -void func_8017B824(void) { - D_801E9CC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E9CC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E9CC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E9CCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E9CCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E9CD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E9CC4; -extern s16 D_801E9CC6; -extern s16 D_801E9CC8; -extern s16 D_801E9CCC; -extern s16 D_801E9CCE; -extern s16 D_801E9CD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E9CC4; - D_80114F34 = D_801E9CC6; - D_80114F38 = D_801E9CC8; - D_80114F24 = D_801E9CCC; - D_80114F28 = D_801E9CCE; - D_80114F2C = D_801E9CD0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E9CAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E9CA4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E9CAC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E9CA4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E9CB4; -extern u16 D_801E9CB6; -extern u16 D_801E9CB8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E9C34; -extern short D_801E9CBC; -extern short D_801E9CBE; -extern short D_801E9CC0; -extern s16 D_801E9CAC; -extern s16 D_801E9CAE; -extern s16 D_801E9CB0; -extern s16 D_801E9CA4; -extern s16 D_801E9CA6; -extern s16 D_801E9CA8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E9CB4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E9CB6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E9CB8); - (*(s16 *)&D_801E9CBC) = buf[0]; - (*(s16 *)&D_801E9CBE) = buf[1]; - (*(s16 *)&D_801E9CC0) = buf[2]; - D_801E9CAC = D_80114F30 + buf[0]; - D_801E9C34 = 0; - D_801E9CAE = D_80114F34 + buf[1]; - D_801E9CB0 = D_80114F38 + buf[2]; - D_801E9CA4 = D_80114F24 + buf[0]; - D_801E9CA6 = D_80114F28 + buf[1]; - D_801E9CA8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E9C54; -extern SV4 D_801E9C5C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E9C5C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E9C54 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E9C5C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E9C5C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E9C54) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E9C5C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E9C7C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E9C7C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E9C34; -extern s16 D_801EB250; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E9C34 = D_801E9C34 + 1; - if (D_801E9C34 >= 0x1F) { - D_801EB250 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E9C34; -extern s16 D_801EB250; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E9C34 = D_801E9C34 + 1; - if (0x18 < D_801E9C34) { - func_8012A4BC(); - D_801EB250 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E9C34; -extern void (*D_801E9C78)(void); -extern short D_801E9CBC; -extern short D_801E9CBE; -extern short D_801E9CC0; -extern s16 D_801EB250; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E9C34 = D_801E9C34 + 1; - if (D_801E9C34 >= 0x19) { - if (D_801E9C78 != 0) { - (*D_801E9C78)(); - } else { - D_80114F30 = D_80114F30 + D_801E9CBC; - D_80114F34 = D_80114F34 + D_801E9CBE; - D_80114F38 = D_80114F38 + D_801E9CC0; - D_80114F24 = D_80114F24 + D_801E9CBC; - D_80114F28 = D_80114F28 + D_801E9CBE; - D_80114F2C = D_80114F2C + D_801E9CC0; - func_8012A4BC(); - } - D_801EB250 = 0; - } -} - - - -extern void (*D_8018ADB8[])(void); - -void func_8017BE60(void *a0) { - D_8018ADB8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017C338); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017C530); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017C59C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017D468); - - -extern s32 D_8018CE04; - extern u8 *D_801274C8; - extern s32 D_8018CE90; - extern void *D_801274CC; - void func_8017D4C4(void) { - D_801274C8 = &D_8018CE04; - D_801274CC = &D_8018CE90; - } - - -extern s32 D_8018CEA4; - extern u8 *D_801274C8; - extern s32 D_8018CF1C; - extern void *D_801274CC; - void func_8017D4EC(void) { - D_801274C8 = &D_8018CEA4; - D_801274CC = &D_8018CF1C; - } - - - -extern s32 D_8018CF30; - extern u8 *D_801274C8; - extern s32 D_8018CF94; - extern void *D_801274CC; - void func_8017D514(void) { - D_801274C8 = &D_8018CF30; - D_801274CC = &D_8018CF94; - } - - -extern s32 D_8018CFA8; - extern u8 *D_801274C8; - extern s32 D_8018D034; - extern void *D_801274CC; - void func_8017D53C(void) { - D_801274C8 = &D_8018CFA8; - D_801274CC = &D_8018D034; - } - - - -extern s32 D_8018D048; - extern u8 *D_801274C8; - extern s32 D_8018D0AC; - extern void *D_801274CC; - void func_8017D564(void) { - D_801274C8 = &D_8018D048; - D_801274CC = &D_8018D0AC; - } - - - -extern s32 D_8018D0C0; - extern u8 *D_801274C8; - extern s32 D_8018D14C; - extern void *D_801274CC; - void func_8017D58C(void) { - D_801274C8 = &D_8018D0C0; - D_801274CC = &D_8018D14C; - } - - - -extern s32 D_8018D160; - extern u8 *D_801274C8; - extern s32 D_8018D1EC; - extern void *D_801274CC; - void func_8017D5B4(void) { - D_801274C8 = &D_8018D160; - D_801274CC = &D_8018D1EC; - } - - - -extern s32 D_8018D200; - extern u8 *D_801274C8; - extern s32 D_8018D2A0; - extern void *D_801274CC; - void func_8017D5DC(void) { - D_801274C8 = &D_8018D200; - D_801274CC = &D_8018D2A0; - } - - - -extern s32 D_8018D2B4; - extern u8 *D_801274C8; - extern s32 D_8018D32C; - extern void *D_801274CC; - void func_8017D604(void) { - D_801274C8 = &D_8018D2B4; - D_801274CC = &D_8018D32C; - } - - - -extern s32 D_8018D340; - extern u8 *D_801274C8; - extern s32 D_8018D3B8; - extern void *D_801274CC; - void func_8017D62C(void) { - D_801274C8 = &D_8018D340; - D_801274CC = &D_8018D3B8; - } - - - -extern s32 D_8018D3CC; - extern u8 *D_801274C8; - extern s32 D_8018D46C; - extern void *D_801274CC; - void func_8017D654(void) { - D_801274C8 = &D_8018D3CC; - D_801274CC = &D_8018D46C; - } - - - -extern s32 D_8018D480; - extern u8 *D_801274C8; - extern s32 D_8018D4F8; - extern void *D_801274CC; - void func_8017D67C(void) { - D_801274C8 = &D_8018D480; - D_801274CC = &D_8018D4F8; - } - - - -extern s32 D_8018D50C; - extern u8 *D_801274C8; - extern s32 D_8018D584; - extern void *D_801274CC; - void func_8017D6A4(void) { - D_801274C8 = &D_8018D50C; - D_801274CC = &D_8018D584; - } - - - -extern s32 D_8018D598; - extern u8 *D_801274C8; - extern s32 D_8018D610; - extern void *D_801274CC; - void func_8017D6CC(void) { - D_801274C8 = &D_8018D598; - D_801274CC = &D_8018D610; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017D6F4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017D740); - -void func_8017D7E4(void) { -} - -extern s32 D_8018CAA8; - extern u8 *D_801274C8; - extern s32 D_8018CDC8; - extern void *D_801274CC; - void func_8017D7EC(void) { - D_801274C8 = &D_8018CAA8; - D_801274CC = &D_8018CDC8; - } - - -extern s32 D_8018CB84; - extern u8 *D_801274C8; - extern s32 D_8018CDDC; - extern void *D_801274CC; - void func_8017D814(void) { - D_801274C8 = &D_8018CB84; - D_801274CC = &D_8018CDDC; - } - - -extern s32 D_8018CCC4; - extern u8 *D_801274C8; - extern s32 D_8018CDF0; - extern void *D_801274CC; - void func_8017D83C(void) { - D_801274C8 = &D_8018CCC4; - D_801274CC = &D_8018CDF0; - } - - - -extern void (*D_8018BBCC[])(void); - -void func_8017D864(void *a0) { - D_8018BBCC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017D8A0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D8E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018BBD4[])(void); - -void func_8017D908(void *a0) { - D_8018BBD4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017D944); - - -extern void (*D_8018BBE0[])(void); - -void func_8017D9D0(void *a0) { - D_8018BBE0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DA0C); - - -extern void (*D_8018BBEC[])(void); - -void func_8017DA9C(void *a0) { - D_8018BBEC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DAD8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DB18(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DB94(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DBB4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DBDC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DC04); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DC54); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DCA4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DCF4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DD44); - - -extern void (*D_8018BC38[])(void); - -void func_8017DDE4(void *a0) { - D_8018BC38[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void func_8017DE40(void); - void func_8017DE20(void) { - func_8017DE40(); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017DE40); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E0B4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E124); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E218); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E294); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E2C0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E2FC); - - -extern s32 func_8012BEE8(s32 arg); - void func_8017E33C(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((u8 *)a0 + 0x2) = 0x6; - } - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E370); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E3C0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E47C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E4C8); - -void func_8017E56C(s32 *a0) { - *(s32 *)((s32)a0 + 0x1c) = 6; - *(s16 *)((s32)a0 + 0x5c) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E57C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E654); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E6C0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E730); - -void func_8017E748(void) { -} - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E750); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E7B4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017E83C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EA04); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EA48); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EC90); - -extern void func_8002A04C(s32 a0); -extern void func_8012C098(void); - -void func_8017EE20(s32 arg0) { - ((void (*)(void))func_8002A04C)(); - ((s32 (*)(s32))func_8012C098)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EE50); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EEA4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EF1C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EF68); - - -extern void (*D_8018BEF0[])(void); - -void func_8017EF98(void *a0) { - D_8018BEF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017EFD4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F0C8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F164); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F1F8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F258); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F2B4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F334); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F37C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F414); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F444); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F658); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F6A8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F750); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F794); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F850); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F8AC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F920); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F95C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017F99C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FA84); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FB40); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FBA0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FC6C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FD6C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8017FE04); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180064); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018022C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801802A4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018033C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180388); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801803DC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180454); - - -extern void (*D_8018BF50[])(void); - -void func_801804A0(void *a0) { - D_8018BF50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801804DC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180598); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180838); - - -extern void (*D_8018BFC8[])(void); - -void func_80180990(void *a0) { - D_8018BFC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801809CC(void *a0) { - *(short *)((char *)a0 + 0x2) = 1; - *(int *)((char *)a0 + 0x1c) = 2; - *(unsigned char *)((char *)a0 + 0xfc) = 1; - *(unsigned char *)((char *)a0 + 0xfe) = 2; - *(unsigned char *)((char *)a0 + 0xfd) = 0; - *(unsigned char *)((char *)a0 + 0xff) = 4; - *(short *)((char *)a0 + 0xdc) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180A00); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180A58); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180AF4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180B24); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180BF8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180C48); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180C74); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180E3C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80180F4C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801810E4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801813D0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181544); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181668); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801816EC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018178C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181954); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181A44); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181B04); - - -extern void (*D_8018C0EC[])(void); - -void func_80181BE8(void *a0) { - D_8018C0EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181C24); - -void func_80181CB4(void) { -} - - -extern void (*D_8018C150[])(void); - -void func_80181CBC(void *a0) { - D_8018C150[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181CF8); - -void func_80181DB0(void) { -} - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_8018C138; - void func_80181DB8(int param_1) { - int iVar1; - iVar1 = param_1; - ((void (*)(int, int))func_80178CBC)(iVar1, &D_8018C138); - *(short *)(iVar1 + 2) = 0x3; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181DF0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181E30); - - -extern void (*D_8018C230[])(void); - -void func_80181E8C(void *a0) { - D_8018C230[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181EC8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80181F94); - -extern void func_8002A04C(s32 a0); - extern void func_8012C098(void); - void func_801820AC(s32 param_1) { - ((void (*)(void))func_8002A04C)(); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801820DC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182148); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801821D0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182214); - - -void func_801822B8(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801822C8); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801CAB58; - -void func_80182374(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801CAB58)) { - func_8012A828(arg0, &D_801CAB58); - } -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801823BC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182420); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801CAFE0; - -void func_80182468(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801CAFE0); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801824A8); - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801CACF8; - -void func_801824FC(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801CACF8); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_80182558(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - *(s32 *)((s32)a0 + 0x1C) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018256C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801827CC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018283C); - - -extern void (*D_8018C37C[])(void); - -void func_801829DC(void *a0) { - D_8018C37C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182A18); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182A80); - -extern s32 func_8012BEE8(s32 arg); - extern s32 func_801824A8(void); - void func_80182AC4(s32 param_1) { - if (((s32 (*)(void))func_8012BEE8)() != 0) { - ((void (*)(s32))func_801824A8)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182AFC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182BA4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182BFC); - - -// @class: struct -// @stuck: none — MATCH expected (folded %lo via extern array decay; a0 carries iVar2 into func_8001C214) - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_8018C36C[]; - -void func_80182D04(int param_1) -{ - int iVar2; - short uVar1; - - iVar2 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = iVar2; - if (iVar2 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - func_8001C214(iVar2, D_8018C36C[*(short *)(param_1 + 0x70)]); - uVar1 = *(short *)(*(int *)(param_1 + 100) + 0x36); - *(short *)(param_1 + 2) = 1; - *(short *)(param_1 + 0xfe) = 0x7fff; - *(short *)(param_1 + 0xfc) = uVar1; - } - return; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182D88); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80182F00(void) { - func_8002D4C8(0x6AA, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182F24); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182F74); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80182FB8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183004); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801830C0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183284); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801832B4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018335C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183670); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801836B8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183894); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183B58); - - -extern void (*D_8018C534[])(void); - -void func_80183C94(void *a0) { - D_8018C534[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183CD0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183D14); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183E18); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183E9C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183F7C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80183FB4); - -extern void func_8013CB84(void); - void func_80183FCC(void) { - func_8013CB84(); - } - - - -extern void (*D_8018C574[])(void); - -void func_80183FEC(void *a0) { - D_8018C574[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184170); - - -extern void (*D_8018C57C[])(void); - -void func_8018423C(void *a0) { - D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184278); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184410); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184500); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184560); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801846EC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018471C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801848BC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184AFC); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80184E8C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801850B4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185230); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801854A4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185620); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018574C); - - -extern void (*D_8018C830[])(void); - -void func_80185898(void *a0) { - D_8018C830[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801858D4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185948); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185A24); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185B20); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185B48); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185D3C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185DD8); - -void func_80185E30(void *a0) { - *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0xf8); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185E3C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185E68); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185EF8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185F84); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80185FE0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186074); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018611C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186200); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186310); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186408); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801864D8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186584); - -extern s32 func_80185230(void); - void func_8018667C(void) { - func_80185230(); - } - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018669C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018676C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186818); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801868C8); - - -extern void (*D_801E4D70[])(void); - -void func_80186984(void *a0) { - D_801E4D70[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801E4D50[]; - -void func_801869C0(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801E4D50[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801E4D50)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801E4D50[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801E4D84[])(void); - -void func_80186A84(void *a0) { - D_801E4D84[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_801869C0(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_80186AC0(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_801869C0(param_1, -0x80); - func_801869C0(param_1, -0x30); - func_801869C0(param_1, 0x20); - func_801869C0(param_1, 0x70); - func_801869C0(param_1, 0xc0); - } - if (1 < uVar1) { - func_801869C0(param_1, -0x58); - func_801869C0(param_1, -0x8); - func_801869C0(param_1, 0x48); - func_801869C0(param_1, 0x98); - func_801869C0(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_801869C0(s32, s32); - -void func_80186BA8(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_801869C0(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801E4D78; - -void func_80186BE8(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801E4D78, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_80186C70(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - - -extern void (*D_801E4DD8[])(void); - -void func_80186CB8(void *a0) { - D_801E4DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186CF4); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80186DF0); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80187080); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_80187214); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018726C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_801872E8); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_801734BC", func_8018732C); - diff --git a/src/ov_SC03_007/ov_SC03_007_jr_80178D40.c b/src/ov_SC03_007/ov_SC03_007_jr_80178D40.c new file mode 100644 index 000000000..97a74c4cc --- /dev/null +++ b/src/ov_SC03_007/ov_SC03_007_jr_80178D40.c @@ -0,0 +1,5259 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018A5C0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E8FA0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018A5B4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018A5F8[]; +extern unsigned short D_8018A600[]; +extern unsigned short D_8018A608[]; +extern unsigned char D_801E8FA8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E8FA0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018A610[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E90DC; +extern M2C_UNK D_801E90E0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9068; +extern void (*D_8018A640[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E90E4[]; +extern u8 D_801E90EC[]; +extern u8 D_801E909C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018A648[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018A664[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018A66C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018A6D4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018A678; +extern u8 D_8018A684; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018A708[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018A710[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018A764[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018A798[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018A788[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018A7B4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018A82C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018A834[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018A83C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018A844[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018A84C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018A854[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018A860[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018A86C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018A878[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018A888[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018A898[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018A8A0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018A8A8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018A8B0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018A8B8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018A8C0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018A8C8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018A8D0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018A8D8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018A8E0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018A8E8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018A8F0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018A8F8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018A900[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018A908[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018A910[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018A918[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018A920[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018A928[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018A930[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018A938[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018A940[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018A948[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018A98C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018A950; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018A9BC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018A9F8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018AA50[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018AA60[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018AA68[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018ABD0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018ABDC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E8600; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EB250; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E9820; +extern short D_801EB2C4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EB2C4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EB2C4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E9820 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EB2C4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EB220 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EB220 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EB2C4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EB2C4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E9C7C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E9824; + extern s32 D_801E9C38; + extern s16 D_801E9C3C; + extern s16 D_801E9C40; + extern s16 D_801E9C44; + extern s16 D_801E9C48; + extern s32 D_801E9C50; + extern s32 D_801E9C54; + extern s32 D_801E9C64; + extern s16 D_801E9C68; + extern s16 D_801E9C6C; + extern s32 D_801E9C70; + extern s32 D_801E9C78; + extern s32 D_801E9C7C[10]; + extern s32 D_801EB168; + extern s16 D_801EB220; + extern s32 D_801EB24C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EB220; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E9C38); + D_801E9C38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E9C44, D_801E9C48 ? 0x48 : 0x40); + (*(s16*)&D_801EB2C4) = 2; + break; + case 0: + func_80179B28(D_801E9C38); + D_801E9C38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E9C3C, D_801E9C40 ? 0x48 : 0x40); + (*(s16*)&D_801EB2C4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EB168 != 0) { + func_80179B28(D_801E9C38); + D_801E9C38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E9C3C, D_801E9C40 ? 0x48 : 0x40); + (*(s16*)&D_801EB2C4) = 1; + } else { + (*(s16*)&D_801EB2C4) = 3; + } + break; + case 0x32: + func_80179B28(D_801E9C38); + D_801E9C38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E9C3C, + D_801E9C40 ? 0x48 : 0x40); + (*(s16*)&D_801EB2C4) = 1; + break; + case 2: + func_80179B28(D_801E9C38); + if (D_801E9C50 != 0) { + D_801E9820 = D_801E9C50; + D_801E9C50 = 0; + (*(s16*)&D_801EB2C4) = 3; + return; + } + (*(s16*)&D_801EB2C4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EB2C4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB2C4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB2C4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x1B: + D_801E9C70 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EB2C4) = 4; + D_801E9824 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EB2C4) = 5; + D_801E9C64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E9C64 = (s32)func_8017A3B0; + (*(s16*)&D_801EB2C4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x24: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB2C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB2C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EB2C4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB2C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB2C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB2C4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EB2C4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E9C54); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E9C54); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E9C54); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E9C54); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x4E: + D_801E9C78 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x2B: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EB2C4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EB24C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x34: + (*(s16*)&D_801EB2C4) = 3; + D_801E9820 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E9C50 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EB2C4) = 3; + D_801E9820 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EB2C4) = 3; + D_801E9820 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E9820 = *(s32 *)(D_801E9820 + 4); + return; + case 0x37: + (*(s16*)&D_801EB2C4) = 3; + D_801E9C3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E9C40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EB2C4) = 3; + D_801E9C44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E9C48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EB2C4) = 3; + D_801E9C3C = w1; + D_801E9C40 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EB2C4) = 3; + D_801E9C44 = w2; + D_801E9C48 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x43: + D_801E9C64 = (s32)func_8017A3D8; + D_801E9C6C = 0; + (*(s16*)&D_801EB2C4) = 5; + D_801E9C68 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB2C4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB2C4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E9C7C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EB2C4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E9C7C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EB2C4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E9C7C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EB2C4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E9C7C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EB2C4) = 3; + break; + default: + break; + } +Lend: + D_801E9820 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E9C4C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E9C4C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E9C4C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E9C4C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E9C74; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E9C74 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E9C30; + +s32 func_8017A3B0(void) { + switch (D_801E9C30) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E9C6C; +extern short D_801E9C68; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E9C6C) { + case 0: + func_800D0CA0(1); + D_801E9C6C = D_801E9C6C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E9C68; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E9C6C = D_801E9C6C + 1; + if (D_801E9C6C < 0x1E) { + return 0; + } + D_801E9C6C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E9CAC; + extern s16 D_801E9CAE; + extern s16 D_801E9CB0; + extern s16 D_801E9CA4; + extern s16 D_801E9CA6; + extern s16 D_801E9CA8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E9CAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E9CAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E9CB0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E9CA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E9CA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E9CA8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E9C34; +extern u16 D_801E9CB4; +extern u16 D_801E9CB6; +extern u16 D_801E9CB8; +extern s16 D_801EB250; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EB250 = 0; + D_801E9C34 = 0; + D_801E9CB4 = D_80126B5E; + D_801E9CB6 = D_80126B62; + D_801E9CB8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018AD18[]; + extern s16 D_801E9CAC; + extern s16 D_801E9CA4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018AD18[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018AD18[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E9CAC; + s16 *p78C = &D_801E9CA4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EB250 = 1; + D_801E9C34 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E9C54; + extern SV4_8017B368 D_801E9C5C; + extern s16 D_801E9CAC; + extern s16 D_801E9CA4; + extern u16 D_8018AD18; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E9C54; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E9C5C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018AD18)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018AD18)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E9CAC) = loc0; + (*(SV4_8017B368 *)&D_801E9CA4) = loc1; + D_801EB250 = 1; + D_801E9C34 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018AD18[]; + extern s16 D_801E9CAC; + extern s16 D_801E9CAE; + extern s16 D_801E9CB0; + extern s16 D_801E9CA4; + extern s16 D_801E9CA6; + extern s16 D_801E9CA8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018AD18[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018AD18[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E9CAC; + s16 *p78C = &D_801E9CA4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E9CAE; + v798 = D_801E9CB0; + v78C = *p78C; + v78E = D_801E9CA6; + v790 = D_801E9CA8; + __asm__ __volatile__(""); + D_801EB250 = 1; + D_801E9C34 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E9C34; +extern s16 D_801E9CAC; +extern s16 D_801E9CAE; +extern s16 D_801E9CB0; +extern s16 D_801E9CA4; +extern s16 D_801E9CA6; +extern s16 D_801E9CA8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E9C34 = 0; + D_801E9CAC = (s16) D_80114F30; + D_801E9CAE = (s16) D_80114F34; + D_801E9CB0 = (s16) D_80114F38; + D_801E9CA4 = (s16) D_80114F24; + D_801E9CA6 = (s16) D_80114F28; + D_801E9CA8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E9CC4; +extern s16 D_801E9CC6; +extern s16 D_801E9CC8; +extern s16 D_801E9CCC; +extern s16 D_801E9CCE; +extern s16 D_801E9CD0; + +void func_8017B824(void) { + D_801E9CC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E9CC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E9CC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E9CCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E9CCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E9CD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E9CC4; +extern s16 D_801E9CC6; +extern s16 D_801E9CC8; +extern s16 D_801E9CCC; +extern s16 D_801E9CCE; +extern s16 D_801E9CD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E9CC4; + D_80114F34 = D_801E9CC6; + D_80114F38 = D_801E9CC8; + D_80114F24 = D_801E9CCC; + D_80114F28 = D_801E9CCE; + D_80114F2C = D_801E9CD0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E9CAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E9CA4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E9CAC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E9CA4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E9CB4; +extern u16 D_801E9CB6; +extern u16 D_801E9CB8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E9C34; +extern short D_801E9CBC; +extern short D_801E9CBE; +extern short D_801E9CC0; +extern s16 D_801E9CAC; +extern s16 D_801E9CAE; +extern s16 D_801E9CB0; +extern s16 D_801E9CA4; +extern s16 D_801E9CA6; +extern s16 D_801E9CA8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E9CB4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E9CB6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E9CB8); + (*(s16 *)&D_801E9CBC) = buf[0]; + (*(s16 *)&D_801E9CBE) = buf[1]; + (*(s16 *)&D_801E9CC0) = buf[2]; + D_801E9CAC = D_80114F30 + buf[0]; + D_801E9C34 = 0; + D_801E9CAE = D_80114F34 + buf[1]; + D_801E9CB0 = D_80114F38 + buf[2]; + D_801E9CA4 = D_80114F24 + buf[0]; + D_801E9CA6 = D_80114F28 + buf[1]; + D_801E9CA8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E9C54; +extern SV4 D_801E9C5C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E9C5C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E9C54 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E9C5C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E9C5C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E9C54) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E9C5C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E9C7C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E9C7C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E9C34; +extern s16 D_801EB250; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E9C34 = D_801E9C34 + 1; + if (D_801E9C34 >= 0x1F) { + D_801EB250 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E9C34; +extern s16 D_801EB250; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E9C34 = D_801E9C34 + 1; + if (0x18 < D_801E9C34) { + func_8012A4BC(); + D_801EB250 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E9C34; +extern void (*D_801E9C78)(void); +extern short D_801E9CBC; +extern short D_801E9CBE; +extern short D_801E9CC0; +extern s16 D_801EB250; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E9C34 = D_801E9C34 + 1; + if (D_801E9C34 >= 0x19) { + if (D_801E9C78 != 0) { + (*D_801E9C78)(); + } else { + D_80114F30 = D_80114F30 + D_801E9CBC; + D_80114F34 = D_80114F34 + D_801E9CBE; + D_80114F38 = D_80114F38 + D_801E9CC0; + D_80114F24 = D_80114F24 + D_801E9CBC; + D_80114F28 = D_80114F28 + D_801E9CBE; + D_80114F2C = D_80114F2C + D_801E9CC0; + func_8012A4BC(); + } + D_801EB250 = 0; + } +} + + + +extern void (*D_8018ADB8[])(void); + +void func_8017BE60(void *a0) { + D_8018ADB8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017C338); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017C530); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017C59C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017D468); + + +extern s32 D_8018CE04; + extern u8 *D_801274C8; + extern s32 D_8018CE90; + extern void *D_801274CC; + void func_8017D4C4(void) { + D_801274C8 = &D_8018CE04; + D_801274CC = &D_8018CE90; + } + + +extern s32 D_8018CEA4; + extern u8 *D_801274C8; + extern s32 D_8018CF1C; + extern void *D_801274CC; + void func_8017D4EC(void) { + D_801274C8 = &D_8018CEA4; + D_801274CC = &D_8018CF1C; + } + + + +extern s32 D_8018CF30; + extern u8 *D_801274C8; + extern s32 D_8018CF94; + extern void *D_801274CC; + void func_8017D514(void) { + D_801274C8 = &D_8018CF30; + D_801274CC = &D_8018CF94; + } + + +extern s32 D_8018CFA8; + extern u8 *D_801274C8; + extern s32 D_8018D034; + extern void *D_801274CC; + void func_8017D53C(void) { + D_801274C8 = &D_8018CFA8; + D_801274CC = &D_8018D034; + } + + + +extern s32 D_8018D048; + extern u8 *D_801274C8; + extern s32 D_8018D0AC; + extern void *D_801274CC; + void func_8017D564(void) { + D_801274C8 = &D_8018D048; + D_801274CC = &D_8018D0AC; + } + + + +extern s32 D_8018D0C0; + extern u8 *D_801274C8; + extern s32 D_8018D14C; + extern void *D_801274CC; + void func_8017D58C(void) { + D_801274C8 = &D_8018D0C0; + D_801274CC = &D_8018D14C; + } + + + +extern s32 D_8018D160; + extern u8 *D_801274C8; + extern s32 D_8018D1EC; + extern void *D_801274CC; + void func_8017D5B4(void) { + D_801274C8 = &D_8018D160; + D_801274CC = &D_8018D1EC; + } + + + +extern s32 D_8018D200; + extern u8 *D_801274C8; + extern s32 D_8018D2A0; + extern void *D_801274CC; + void func_8017D5DC(void) { + D_801274C8 = &D_8018D200; + D_801274CC = &D_8018D2A0; + } + + + +extern s32 D_8018D2B4; + extern u8 *D_801274C8; + extern s32 D_8018D32C; + extern void *D_801274CC; + void func_8017D604(void) { + D_801274C8 = &D_8018D2B4; + D_801274CC = &D_8018D32C; + } + + + +extern s32 D_8018D340; + extern u8 *D_801274C8; + extern s32 D_8018D3B8; + extern void *D_801274CC; + void func_8017D62C(void) { + D_801274C8 = &D_8018D340; + D_801274CC = &D_8018D3B8; + } + + + +extern s32 D_8018D3CC; + extern u8 *D_801274C8; + extern s32 D_8018D46C; + extern void *D_801274CC; + void func_8017D654(void) { + D_801274C8 = &D_8018D3CC; + D_801274CC = &D_8018D46C; + } + + + +extern s32 D_8018D480; + extern u8 *D_801274C8; + extern s32 D_8018D4F8; + extern void *D_801274CC; + void func_8017D67C(void) { + D_801274C8 = &D_8018D480; + D_801274CC = &D_8018D4F8; + } + + + +extern s32 D_8018D50C; + extern u8 *D_801274C8; + extern s32 D_8018D584; + extern void *D_801274CC; + void func_8017D6A4(void) { + D_801274C8 = &D_8018D50C; + D_801274CC = &D_8018D584; + } + + + +extern s32 D_8018D598; + extern u8 *D_801274C8; + extern s32 D_8018D610; + extern void *D_801274CC; + void func_8017D6CC(void) { + D_801274C8 = &D_8018D598; + D_801274CC = &D_8018D610; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017D6F4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017D740); + +void func_8017D7E4(void) { +} + +extern s32 D_8018CAA8; + extern u8 *D_801274C8; + extern s32 D_8018CDC8; + extern void *D_801274CC; + void func_8017D7EC(void) { + D_801274C8 = &D_8018CAA8; + D_801274CC = &D_8018CDC8; + } + + +extern s32 D_8018CB84; + extern u8 *D_801274C8; + extern s32 D_8018CDDC; + extern void *D_801274CC; + void func_8017D814(void) { + D_801274C8 = &D_8018CB84; + D_801274CC = &D_8018CDDC; + } + + +extern s32 D_8018CCC4; + extern u8 *D_801274C8; + extern s32 D_8018CDF0; + extern void *D_801274CC; + void func_8017D83C(void) { + D_801274C8 = &D_8018CCC4; + D_801274CC = &D_8018CDF0; + } + + + +extern void (*D_8018BBCC[])(void); + +void func_8017D864(void *a0) { + D_8018BBCC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017D8A0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D8E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018BBD4[])(void); + +void func_8017D908(void *a0) { + D_8018BBD4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017D944); + + +extern void (*D_8018BBE0[])(void); + +void func_8017D9D0(void *a0) { + D_8018BBE0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DA0C); + + +extern void (*D_8018BBEC[])(void); + +void func_8017DA9C(void *a0) { + D_8018BBEC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DAD8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DB18(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DB94(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DBB4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DBDC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DC04); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DC54); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DCA4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DCF4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DD44); + + +extern void (*D_8018BC38[])(void); + +void func_8017DDE4(void *a0) { + D_8018BC38[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void func_8017DE40(void); + void func_8017DE20(void) { + func_8017DE40(); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017DE40); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E0B4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E124); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E218); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E294); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E2C0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E2FC); + + +extern s32 func_8012BEE8(s32 arg); + void func_8017E33C(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((u8 *)a0 + 0x2) = 0x6; + } + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E370); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E3C0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E47C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E4C8); + +void func_8017E56C(s32 *a0) { + *(s32 *)((s32)a0 + 0x1c) = 6; + *(s16 *)((s32)a0 + 0x5c) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E57C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E654); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E6C0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E730); + +void func_8017E748(void) { +} + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E750); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E7B4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017E83C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EA04); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EA48); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EC90); + +extern void func_8002A04C(s32 a0); +extern void func_8012C098(void); + +void func_8017EE20(s32 arg0) { + ((void (*)(void))func_8002A04C)(); + ((s32 (*)(s32))func_8012C098)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EE50); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EEA4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EF1C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EF68); + + +extern void (*D_8018BEF0[])(void); + +void func_8017EF98(void *a0) { + D_8018BEF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017EFD4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F0C8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F164); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F1F8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F258); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F2B4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F334); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F37C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F414); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F444); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F658); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F6A8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F750); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F794); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F850); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F8AC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F920); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F95C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017F99C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FA84); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FB40); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FBA0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FC6C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FD6C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8017FE04); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180064); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018022C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801802A4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018033C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180388); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801803DC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180454); + + +extern void (*D_8018BF50[])(void); + +void func_801804A0(void *a0) { + D_8018BF50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801804DC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180598); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180838); + + +extern void (*D_8018BFC8[])(void); + +void func_80180990(void *a0) { + D_8018BFC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801809CC(void *a0) { + *(short *)((char *)a0 + 0x2) = 1; + *(int *)((char *)a0 + 0x1c) = 2; + *(unsigned char *)((char *)a0 + 0xfc) = 1; + *(unsigned char *)((char *)a0 + 0xfe) = 2; + *(unsigned char *)((char *)a0 + 0xfd) = 0; + *(unsigned char *)((char *)a0 + 0xff) = 4; + *(short *)((char *)a0 + 0xdc) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180A00); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180A58); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180AF4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180B24); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180BF8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180C48); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180C74); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180E3C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80180F4C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801810E4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801813D0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181544); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181668); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801816EC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018178C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181954); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181A44); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181B04); + + +extern void (*D_8018C0EC[])(void); + +void func_80181BE8(void *a0) { + D_8018C0EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181C24); + +void func_80181CB4(void) { +} + + +extern void (*D_8018C150[])(void); + +void func_80181CBC(void *a0) { + D_8018C150[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181CF8); + +void func_80181DB0(void) { +} + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_8018C138; + void func_80181DB8(int param_1) { + int iVar1; + iVar1 = param_1; + ((void (*)(int, int))func_80178CBC)(iVar1, &D_8018C138); + *(short *)(iVar1 + 2) = 0x3; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181DF0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181E30); + + +extern void (*D_8018C230[])(void); + +void func_80181E8C(void *a0) { + D_8018C230[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181EC8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80181F94); + +extern void func_8002A04C(s32 a0); + extern void func_8012C098(void); + void func_801820AC(s32 param_1) { + ((void (*)(void))func_8002A04C)(); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801820DC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182148); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801821D0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182214); + + +void func_801822B8(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801822C8); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801CAB58; + +void func_80182374(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801CAB58)) { + func_8012A828(arg0, &D_801CAB58); + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801823BC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182420); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801CAFE0; + +void func_80182468(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801CAFE0); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801824A8); + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801CACF8; + +void func_801824FC(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801CACF8); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_80182558(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + *(s32 *)((s32)a0 + 0x1C) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018256C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801827CC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018283C); + + +extern void (*D_8018C37C[])(void); + +void func_801829DC(void *a0) { + D_8018C37C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182A18); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182A80); + +extern s32 func_8012BEE8(s32 arg); + extern s32 func_801824A8(void); + void func_80182AC4(s32 param_1) { + if (((s32 (*)(void))func_8012BEE8)() != 0) { + ((void (*)(s32))func_801824A8)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182AFC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182BA4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182BFC); + + +// @class: struct +// @stuck: none — MATCH expected (folded %lo via extern array decay; a0 carries iVar2 into func_8001C214) + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_8018C36C[]; + +void func_80182D04(int param_1) +{ + int iVar2; + short uVar1; + + iVar2 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = iVar2; + if (iVar2 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + func_8001C214(iVar2, D_8018C36C[*(short *)(param_1 + 0x70)]); + uVar1 = *(short *)(*(int *)(param_1 + 100) + 0x36); + *(short *)(param_1 + 2) = 1; + *(short *)(param_1 + 0xfe) = 0x7fff; + *(short *)(param_1 + 0xfc) = uVar1; + } + return; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182D88); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80182F00(void) { + func_8002D4C8(0x6AA, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182F24); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182F74); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80182FB8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183004); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801830C0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183284); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801832B4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018335C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183670); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801836B8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183894); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183B58); + + +extern void (*D_8018C534[])(void); + +void func_80183C94(void *a0) { + D_8018C534[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183CD0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183D14); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183E18); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183E9C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183F7C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80183FB4); + +extern void func_8013CB84(void); + void func_80183FCC(void) { + func_8013CB84(); + } + + + +extern void (*D_8018C574[])(void); + +void func_80183FEC(void *a0) { + D_8018C574[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184170); + + +extern void (*D_8018C57C[])(void); + +void func_8018423C(void *a0) { + D_8018C57C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184278); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184410); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184500); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184560); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801846EC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018471C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801848BC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184AFC); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80184E8C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801850B4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185230); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801854A4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185620); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018574C); + + +extern void (*D_8018C830[])(void); + +void func_80185898(void *a0) { + D_8018C830[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801858D4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185948); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185A24); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185B20); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185B48); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185D3C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185DD8); + +void func_80185E30(void *a0) { + *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0xf8); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185E3C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185E68); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185EF8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185F84); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80185FE0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186074); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018611C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186200); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186310); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186408); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801864D8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186584); + +extern s32 func_80185230(void); + void func_8018667C(void) { + func_80185230(); + } + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018669C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018676C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186818); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801868C8); + + +extern void (*D_801E4D70[])(void); + +void func_80186984(void *a0) { + D_801E4D70[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801E4D50[]; + +void func_801869C0(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801E4D50[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801E4D50)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801E4D50[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801E4D84[])(void); + +void func_80186A84(void *a0) { + D_801E4D84[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_801869C0(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_80186AC0(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_801869C0(param_1, -0x80); + func_801869C0(param_1, -0x30); + func_801869C0(param_1, 0x20); + func_801869C0(param_1, 0x70); + func_801869C0(param_1, 0xc0); + } + if (1 < uVar1) { + func_801869C0(param_1, -0x58); + func_801869C0(param_1, -0x8); + func_801869C0(param_1, 0x48); + func_801869C0(param_1, 0x98); + func_801869C0(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_801869C0(s32, s32); + +void func_80186BA8(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_801869C0(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801E4D78; + +void func_80186BE8(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801E4D78, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_80186C70(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + + +extern void (*D_801E4DD8[])(void); + +void func_80186CB8(void *a0) { + D_801E4DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186CF4); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80186DF0); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80187080); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_80187214); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018726C); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_801872E8); + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80178D40", func_8018732C); + + diff --git a/src/ov_SC03_010/ov_SC03_010_jr_801734BC.c b/src/ov_SC03_010/ov_SC03_010_jr_801734BC.c index 68e535224..1a2bd7c69 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_801734BC.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_801734BC.c @@ -3105,1077 +3105,3 @@ void func_80178D18(void) { D_801A01CC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019FEAC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019FEAC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019FEAC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019FEAC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019FED4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019FED4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019FE90; - -s32 func_8017A3B0(void) { - switch (D_8019FE90) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019FECC; -extern short D_8019FEC8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019FECC) { - case 0: - func_800D0CA0(1); - D_8019FECC = D_8019FECC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019FEC8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019FECC = D_8019FECC + 1; - if (D_8019FECC < 0x1E) { - return 0; - } - D_8019FECC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019FF0C; - extern s16 D_8019FF0E; - extern s16 D_8019FF10; - extern s16 D_8019FF04; - extern s16 D_8019FF06; - extern s16 D_8019FF08; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019FF0C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019FF0E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019FF10, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019FF04, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019FF06, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019FF08, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019FE94; -extern u16 D_8019FF14; -extern u16 D_8019FF16; -extern u16 D_8019FF18; -extern s16 D_801A0158; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A0158 = 0; - D_8019FE94 = 0; - D_8019FF14 = D_80126B5E; - D_8019FF16 = D_80126B62; - D_8019FF18 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183838[]; - extern s16 D_8019FF0C; - extern s16 D_8019FF04; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183838[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183838[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019FF0C; - s16 *p78C = &D_8019FF04; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A0158 = 1; - D_8019FE94 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019FEB4; - extern SV4_8017B368 D_8019FEBC; - extern s16 D_8019FF0C; - extern s16 D_8019FF04; - extern u16 D_80183838; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019FEB4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019FEBC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183838)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183838)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019FF0C) = loc0; - (*(SV4_8017B368 *)&D_8019FF04) = loc1; - D_801A0158 = 1; - D_8019FE94 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183838[]; - extern s16 D_8019FF0C; - extern s16 D_8019FF0E; - extern s16 D_8019FF10; - extern s16 D_8019FF04; - extern s16 D_8019FF06; - extern s16 D_8019FF08; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183838[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183838[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019FF0C; - s16 *p78C = &D_8019FF04; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019FF0E; - v798 = D_8019FF10; - v78C = *p78C; - v78E = D_8019FF06; - v790 = D_8019FF08; - __asm__ __volatile__(""); - D_801A0158 = 1; - D_8019FE94 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019FE94; -extern s16 D_8019FF0C; -extern s16 D_8019FF0E; -extern s16 D_8019FF10; -extern s16 D_8019FF04; -extern s16 D_8019FF06; -extern s16 D_8019FF08; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019FE94 = 0; - D_8019FF0C = (s16) D_80114F30; - D_8019FF0E = (s16) D_80114F34; - D_8019FF10 = (s16) D_80114F38; - D_8019FF04 = (s16) D_80114F24; - D_8019FF06 = (s16) D_80114F28; - D_8019FF08 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019FF24; -extern s16 D_8019FF26; -extern s16 D_8019FF28; -extern s16 D_8019FF2C; -extern s16 D_8019FF2E; -extern s16 D_8019FF30; - -void func_8017B824(void) { - D_8019FF24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019FF26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019FF28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019FF2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019FF2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019FF30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019FF24; -extern s16 D_8019FF26; -extern s16 D_8019FF28; -extern s16 D_8019FF2C; -extern s16 D_8019FF2E; -extern s16 D_8019FF30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019FF24; - D_80114F34 = D_8019FF26; - D_80114F38 = D_8019FF28; - D_80114F24 = D_8019FF2C; - D_80114F28 = D_8019FF2E; - D_80114F2C = D_8019FF30; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019FF0C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019FF04) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019FF0C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019FF04) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019FF14; -extern u16 D_8019FF16; -extern u16 D_8019FF18; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019FE94; -extern short D_8019FF1C; -extern short D_8019FF1E; -extern short D_8019FF20; -extern s16 D_8019FF0C; -extern s16 D_8019FF0E; -extern s16 D_8019FF10; -extern s16 D_8019FF04; -extern s16 D_8019FF06; -extern s16 D_8019FF08; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019FF14); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019FF16); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019FF18); - (*(s16 *)&D_8019FF1C) = buf[0]; - (*(s16 *)&D_8019FF1E) = buf[1]; - (*(s16 *)&D_8019FF20) = buf[2]; - D_8019FF0C = D_80114F30 + buf[0]; - D_8019FE94 = 0; - D_8019FF0E = D_80114F34 + buf[1]; - D_8019FF10 = D_80114F38 + buf[2]; - D_8019FF04 = D_80114F24 + buf[0]; - D_8019FF06 = D_80114F28 + buf[1]; - D_8019FF08 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019FEB4; -extern SV4 D_8019FEBC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019FEBC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019FEB4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019FEBC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019FEBC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019FEB4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019FEBC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019FEDC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019FEDC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019FE94; -extern s16 D_801A0158; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019FE94 = D_8019FE94 + 1; - if (D_8019FE94 >= 0x1F) { - D_801A0158 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019FE94; -extern s16 D_801A0158; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019FE94 = D_8019FE94 + 1; - if (0x18 < D_8019FE94) { - func_8012A4BC(); - D_801A0158 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019FE94; -extern void (*D_8019FED8)(void); -extern short D_8019FF1C; -extern short D_8019FF1E; -extern short D_8019FF20; -extern s16 D_801A0158; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019FE94 = D_8019FE94 + 1; - if (D_8019FE94 >= 0x19) { - if (D_8019FED8 != 0) { - (*D_8019FED8)(); - } else { - D_80114F30 = D_80114F30 + D_8019FF1C; - D_80114F34 = D_80114F34 + D_8019FF1E; - D_80114F38 = D_80114F38 + D_8019FF20; - D_80114F24 = D_80114F24 + D_8019FF1C; - D_80114F28 = D_80114F28 + D_8019FF1E; - D_80114F2C = D_80114F2C + D_8019FF20; - func_8012A4BC(); - } - D_801A0158 = 0; - } -} - - - -extern void (*D_801838D8[])(void); - -void func_8017BE60(void *a0) { - D_801838D8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017BEE8); - - -extern void (*D_80183A08[])(void); - -void func_8017BFC8(void *a0) { - D_80183A08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C004); - -extern void func_8017C234(void); - void func_8017C214(void) { - func_8017C234(); - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C404); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C454); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C4C4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C528); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C5D8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C628); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C670); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C6B8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017C730); - - -extern void (*D_80183A88[])(void); - -void func_8017D7C4(void *a0) { - D_80183A88[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017D800); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D844(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80183A90[])(void); - -void func_8017D868(void *a0) { - D_80183A90[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017D8A4); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D8E4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D960(void) { - func_800D1EBC(); - } - - - -extern void (*D_80183A9C[])(void); - -void func_8017D980(void *a0) { - D_80183A9C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017D9BC); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DA10); - -extern void func_800D1EBC(void); - void func_8017DA64(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DA84); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DAAC); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DAD4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DB20); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DB84); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DC20); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DC7C); - - -extern void (*D_80183BD0[])(void); - -void func_8017DCD8(void *a0) { - D_80183BD0[*(u8 *)((s32)a0 + 0x216)](); -} - - -extern s32 func_80171990(u8 *a0); -extern s32 func_8017DD44(s32); - -void func_8017DD14(s32 *a0) { - ((void (*)(s32 *))func_80171990)(a0); - func_8017DD44((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DD44); - -extern void func_8017DE84(s32 arg0); - void func_8017DD84(void) { - func_8017DE84(0); - } - - -extern void func_8017DE84(s32 arg); - void func_8017DDA4(void) { - func_8017DE84(0x1); - } - - -extern void func_8017DE84(s32 arg0); - void func_8017DDC4(void) { - func_8017DE84(0x2); - } - - -extern void func_8017DE84(s32 arg0); - void func_8017DDE4(void) { - func_8017DE84(0x3); - } - - -extern void func_8017DE84(s32 arg0); - void func_8017DE04(void) { - func_8017DE84(4); - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DE44); - -extern void func_8017DE84(s32 arg0); - void func_8017DE64(void) { - ((s32 (*)(s32))func_8017DE84)(0x7); - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DE84); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DEB0); - - -extern void (*D_80183C00[])(void); - -void func_8017DED8(void *a0) { - D_80183C00[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DF14); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DF54); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DF8C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017DFB4); - - -extern void (*D_80183C08[])(void); - -void func_8017E04C(void *a0) { - D_80183C08[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E088); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E1EC); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E3B8); - - -extern void (*D_80183C88[])(void); - -void func_8017E660(void *a0) { - D_80183C88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E69C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E744); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E848); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E8B0); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017E934); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EA58); - - -extern void (*D_80183CE8[])(void); - -void func_8017EB14(void *a0) { - D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017EB50(s32 *a0) { - *(s16*)((s32)a0 + 0xFC) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EB58); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017ECE8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EDA8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EDD8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EE30); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EE98); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EEFC); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017EF7C); - -extern s32 func_8012BF10(s32 arg0, s32 arg1); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017EFE0(void *a0) { - if (func_8012BF10((s32)a0, 0x40)) { - ((void (*)(void *, s32))func_8012AD44)(a0, 1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F01C); - - -extern void (*D_80183D58[])(void); - -void func_8017F054(void *a0) { - D_80183D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F090); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F100); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F14C); - - -s32 func_8017F1A8(void) { - return 31; -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F1B0); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F214); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F374); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F558); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F614); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F6C0); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F7E0); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017F920); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FA5C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FAD4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FB4C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FBC4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FC3C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FCB4); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FD28); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FDC8); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FE14); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_801734BC", func_8017FE88); - diff --git a/src/ov_SC03_010/ov_SC03_010_jr_80178D40.c b/src/ov_SC03_010/ov_SC03_010_jr_80178D40.c new file mode 100644 index 000000000..9d47e9dcb --- /dev/null +++ b/src/ov_SC03_010/ov_SC03_010_jr_80178D40.c @@ -0,0 +1,4544 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801830E0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019F200; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801830D4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183118[]; +extern unsigned short D_80183120[]; +extern unsigned short D_80183128[]; +extern unsigned char D_8019F208[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019F200; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183130[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019F33C; +extern M2C_UNK D_8019F340; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019F2C8; +extern void (*D_80183160[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019F344[]; +extern u8 D_8019F34C[]; +extern u8 D_8019F2FC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80183168[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183184[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018318C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801831F4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183198; +extern u8 D_801831A4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183228[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183230[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80183284[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801832B8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801832A8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801832D4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018334C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183354[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018335C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183364[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018336C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183374[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80183380[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018338C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80183398[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801833A8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801833B8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801833C0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801833C8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801833D0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801833D8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801833E0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801833E8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801833F0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801833F8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183400[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183408[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183410[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183418[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183420[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183428[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183430[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183438[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183440[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183448[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183450[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183458[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183460[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183468[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801834AC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183470; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801834DC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80183518[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183570[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183580[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183588[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801836F0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801836FC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019E8DC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A0158; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019FA80; +extern short D_801A01CC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A01CC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A01CC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019FA80 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A01CC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A0128 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A0128 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A01CC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A01CC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019FEDC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019FA84; + extern s32 D_8019FE98; + extern s16 D_8019FE9C; + extern s16 D_8019FEA0; + extern s16 D_8019FEA4; + extern s16 D_8019FEA8; + extern s32 D_8019FEB0; + extern s32 D_8019FEB4; + extern s32 D_8019FEC4; + extern s16 D_8019FEC8; + extern s16 D_8019FECC; + extern s32 D_8019FED0; + extern s32 D_8019FED8; + extern s32 D_8019FEDC[10]; + extern s32 D_801A0070; + extern s16 D_801A0128; + extern s32 D_801A0154; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A0128; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019FE98); + D_8019FE98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019FEA4, D_8019FEA8 ? 0x48 : 0x40); + (*(s16*)&D_801A01CC) = 2; + break; + case 0: + func_80179B28(D_8019FE98); + D_8019FE98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019FE9C, D_8019FEA0 ? 0x48 : 0x40); + (*(s16*)&D_801A01CC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A0070 != 0) { + func_80179B28(D_8019FE98); + D_8019FE98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019FE9C, D_8019FEA0 ? 0x48 : 0x40); + (*(s16*)&D_801A01CC) = 1; + } else { + (*(s16*)&D_801A01CC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019FE98); + D_8019FE98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019FE9C, + D_8019FEA0 ? 0x48 : 0x40); + (*(s16*)&D_801A01CC) = 1; + break; + case 2: + func_80179B28(D_8019FE98); + if (D_8019FEB0 != 0) { + D_8019FA80 = D_8019FEB0; + D_8019FEB0 = 0; + (*(s16*)&D_801A01CC) = 3; + return; + } + (*(s16*)&D_801A01CC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A01CC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A01CC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A01CC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A01CC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A01CC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x1B: + D_8019FED0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A01CC) = 4; + D_8019FA84 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A01CC) = 5; + D_8019FEC4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019FEC4 = (s32)func_8017A3B0; + (*(s16*)&D_801A01CC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x24: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A01CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A01CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A01CC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A01CC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A01CC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A01CC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A01CC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A01CC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A01CC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019FEB4); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019FEB4); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019FEB4); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019FEB4); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x4E: + D_8019FED8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x2B: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A01CC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A0154 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x34: + (*(s16*)&D_801A01CC) = 3; + D_8019FA80 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019FEB0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A01CC) = 3; + D_8019FA80 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A01CC) = 3; + D_8019FA80 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019FA80 = *(s32 *)(D_8019FA80 + 4); + return; + case 0x37: + (*(s16*)&D_801A01CC) = 3; + D_8019FE9C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019FEA0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A01CC) = 3; + D_8019FEA4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019FEA8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A01CC) = 3; + D_8019FE9C = w1; + D_8019FEA0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A01CC) = 3; + D_8019FEA4 = w2; + D_8019FEA8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x43: + D_8019FEC4 = (s32)func_8017A3D8; + D_8019FECC = 0; + (*(s16*)&D_801A01CC) = 5; + D_8019FEC8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A01CC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A01CC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019FEDC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A01CC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019FEDC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A01CC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019FEDC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A01CC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019FEDC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A01CC) = 3; + break; + default: + break; + } +Lend: + D_8019FA80 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019FEAC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019FEAC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019FEAC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019FEAC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019FED4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019FED4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019FE90; + +s32 func_8017A3B0(void) { + switch (D_8019FE90) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019FECC; +extern short D_8019FEC8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019FECC) { + case 0: + func_800D0CA0(1); + D_8019FECC = D_8019FECC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019FEC8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019FECC = D_8019FECC + 1; + if (D_8019FECC < 0x1E) { + return 0; + } + D_8019FECC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019FF0C; + extern s16 D_8019FF0E; + extern s16 D_8019FF10; + extern s16 D_8019FF04; + extern s16 D_8019FF06; + extern s16 D_8019FF08; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019FF0C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019FF0E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019FF10, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019FF04, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019FF06, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019FF08, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019FE94; +extern u16 D_8019FF14; +extern u16 D_8019FF16; +extern u16 D_8019FF18; +extern s16 D_801A0158; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A0158 = 0; + D_8019FE94 = 0; + D_8019FF14 = D_80126B5E; + D_8019FF16 = D_80126B62; + D_8019FF18 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183838[]; + extern s16 D_8019FF0C; + extern s16 D_8019FF04; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183838[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183838[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019FF0C; + s16 *p78C = &D_8019FF04; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A0158 = 1; + D_8019FE94 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019FEB4; + extern SV4_8017B368 D_8019FEBC; + extern s16 D_8019FF0C; + extern s16 D_8019FF04; + extern u16 D_80183838; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019FEB4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019FEBC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183838)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183838)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019FF0C) = loc0; + (*(SV4_8017B368 *)&D_8019FF04) = loc1; + D_801A0158 = 1; + D_8019FE94 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183838[]; + extern s16 D_8019FF0C; + extern s16 D_8019FF0E; + extern s16 D_8019FF10; + extern s16 D_8019FF04; + extern s16 D_8019FF06; + extern s16 D_8019FF08; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183838[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183838[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019FF0C; + s16 *p78C = &D_8019FF04; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019FF0E; + v798 = D_8019FF10; + v78C = *p78C; + v78E = D_8019FF06; + v790 = D_8019FF08; + __asm__ __volatile__(""); + D_801A0158 = 1; + D_8019FE94 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019FE94; +extern s16 D_8019FF0C; +extern s16 D_8019FF0E; +extern s16 D_8019FF10; +extern s16 D_8019FF04; +extern s16 D_8019FF06; +extern s16 D_8019FF08; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019FE94 = 0; + D_8019FF0C = (s16) D_80114F30; + D_8019FF0E = (s16) D_80114F34; + D_8019FF10 = (s16) D_80114F38; + D_8019FF04 = (s16) D_80114F24; + D_8019FF06 = (s16) D_80114F28; + D_8019FF08 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019FF24; +extern s16 D_8019FF26; +extern s16 D_8019FF28; +extern s16 D_8019FF2C; +extern s16 D_8019FF2E; +extern s16 D_8019FF30; + +void func_8017B824(void) { + D_8019FF24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019FF26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019FF28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019FF2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019FF2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019FF30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019FF24; +extern s16 D_8019FF26; +extern s16 D_8019FF28; +extern s16 D_8019FF2C; +extern s16 D_8019FF2E; +extern s16 D_8019FF30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019FF24; + D_80114F34 = D_8019FF26; + D_80114F38 = D_8019FF28; + D_80114F24 = D_8019FF2C; + D_80114F28 = D_8019FF2E; + D_80114F2C = D_8019FF30; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019FF0C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019FF04) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019FF0C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019FF04) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019FF14; +extern u16 D_8019FF16; +extern u16 D_8019FF18; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019FE94; +extern short D_8019FF1C; +extern short D_8019FF1E; +extern short D_8019FF20; +extern s16 D_8019FF0C; +extern s16 D_8019FF0E; +extern s16 D_8019FF10; +extern s16 D_8019FF04; +extern s16 D_8019FF06; +extern s16 D_8019FF08; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019FF14); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019FF16); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019FF18); + (*(s16 *)&D_8019FF1C) = buf[0]; + (*(s16 *)&D_8019FF1E) = buf[1]; + (*(s16 *)&D_8019FF20) = buf[2]; + D_8019FF0C = D_80114F30 + buf[0]; + D_8019FE94 = 0; + D_8019FF0E = D_80114F34 + buf[1]; + D_8019FF10 = D_80114F38 + buf[2]; + D_8019FF04 = D_80114F24 + buf[0]; + D_8019FF06 = D_80114F28 + buf[1]; + D_8019FF08 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019FEB4; +extern SV4 D_8019FEBC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019FEBC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019FEB4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019FEBC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019FEBC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019FEB4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019FEBC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019FEDC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019FEDC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019FE94; +extern s16 D_801A0158; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019FE94 = D_8019FE94 + 1; + if (D_8019FE94 >= 0x1F) { + D_801A0158 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019FE94; +extern s16 D_801A0158; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019FE94 = D_8019FE94 + 1; + if (0x18 < D_8019FE94) { + func_8012A4BC(); + D_801A0158 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019FE94; +extern void (*D_8019FED8)(void); +extern short D_8019FF1C; +extern short D_8019FF1E; +extern short D_8019FF20; +extern s16 D_801A0158; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019FE94 = D_8019FE94 + 1; + if (D_8019FE94 >= 0x19) { + if (D_8019FED8 != 0) { + (*D_8019FED8)(); + } else { + D_80114F30 = D_80114F30 + D_8019FF1C; + D_80114F34 = D_80114F34 + D_8019FF1E; + D_80114F38 = D_80114F38 + D_8019FF20; + D_80114F24 = D_80114F24 + D_8019FF1C; + D_80114F28 = D_80114F28 + D_8019FF1E; + D_80114F2C = D_80114F2C + D_8019FF20; + func_8012A4BC(); + } + D_801A0158 = 0; + } +} + + + +extern void (*D_801838D8[])(void); + +void func_8017BE60(void *a0) { + D_801838D8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017BEE8); + + +extern void (*D_80183A08[])(void); + +void func_8017BFC8(void *a0) { + D_80183A08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C004); + +extern void func_8017C234(void); + void func_8017C214(void) { + func_8017C234(); + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C404); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C454); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C4C4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C528); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C5D8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C628); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C670); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C6B8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017C730); + + +extern void (*D_80183A88[])(void); + +void func_8017D7C4(void *a0) { + D_80183A88[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017D800); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D844(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80183A90[])(void); + +void func_8017D868(void *a0) { + D_80183A90[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017D8A4); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D8E4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D960(void) { + func_800D1EBC(); + } + + + +extern void (*D_80183A9C[])(void); + +void func_8017D980(void *a0) { + D_80183A9C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017D9BC); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DA10); + +extern void func_800D1EBC(void); + void func_8017DA64(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DA84); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DAAC); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DAD4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DB20); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DB84); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DC20); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DC7C); + + +extern void (*D_80183BD0[])(void); + +void func_8017DCD8(void *a0) { + D_80183BD0[*(u8 *)((s32)a0 + 0x216)](); +} + + +extern s32 func_80171990(u8 *a0); +extern s32 func_8017DD44(s32); + +void func_8017DD14(s32 *a0) { + ((void (*)(s32 *))func_80171990)(a0); + func_8017DD44((s32)a0); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DD44); + +extern void func_8017DE84(s32 arg0); + void func_8017DD84(void) { + func_8017DE84(0); + } + + +extern void func_8017DE84(s32 arg); + void func_8017DDA4(void) { + func_8017DE84(0x1); + } + + +extern void func_8017DE84(s32 arg0); + void func_8017DDC4(void) { + func_8017DE84(0x2); + } + + +extern void func_8017DE84(s32 arg0); + void func_8017DDE4(void) { + func_8017DE84(0x3); + } + + +extern void func_8017DE84(s32 arg0); + void func_8017DE04(void) { + func_8017DE84(4); + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DE44); + +extern void func_8017DE84(s32 arg0); + void func_8017DE64(void) { + ((s32 (*)(s32))func_8017DE84)(0x7); + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DE84); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DEB0); + + +extern void (*D_80183C00[])(void); + +void func_8017DED8(void *a0) { + D_80183C00[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DF14); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DF54); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DF8C); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017DFB4); + + +extern void (*D_80183C08[])(void); + +void func_8017E04C(void *a0) { + D_80183C08[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E088); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E1EC); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E3B8); + + +extern void (*D_80183C88[])(void); + +void func_8017E660(void *a0) { + D_80183C88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E69C); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E744); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E848); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E8B0); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017E934); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EA58); + + +extern void (*D_80183CE8[])(void); + +void func_8017EB14(void *a0) { + D_80183CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017EB50(s32 *a0) { + *(s16*)((s32)a0 + 0xFC) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EB58); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017ECE8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EDA8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EDD8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EE30); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EE98); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EEFC); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017EF7C); + +extern s32 func_8012BF10(s32 arg0, s32 arg1); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017EFE0(void *a0) { + if (func_8012BF10((s32)a0, 0x40)) { + ((void (*)(void *, s32))func_8012AD44)(a0, 1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F01C); + + +extern void (*D_80183D58[])(void); + +void func_8017F054(void *a0) { + D_80183D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F090); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F100); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F14C); + + +s32 func_8017F1A8(void) { + return 31; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F1B0); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F214); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F374); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F558); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F614); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F6C0); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F7E0); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017F920); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FA5C); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FAD4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FB4C); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FBC4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FC3C); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FCB4); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FD28); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FDC8); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FE14); + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_80178D40", func_8017FE88); + + diff --git a/src/ov_SC03_011/ov_SC03_011_jr_801734BC.c b/src/ov_SC03_011/ov_SC03_011_jr_801734BC.c index 2762bde45..5e77cfc79 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_801734BC.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_801734BC.c @@ -3105,1241 +3105,3 @@ void func_80178D18(void) { D_801A2400 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A2144; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A2144 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A2144; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A2144 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A216C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A216C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A2128; - -s32 func_8017A3B0(void) { - switch (D_801A2128) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A2164; -extern short D_801A2160; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A2164) { - case 0: - func_800D0CA0(1); - D_801A2164 = D_801A2164 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A2160; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A2164 = D_801A2164 + 1; - if (D_801A2164 < 0x1E) { - return 0; - } - D_801A2164 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A21A4; - extern s16 D_801A21A6; - extern s16 D_801A21A8; - extern s16 D_801A219C; - extern s16 D_801A219E; - extern s16 D_801A21A0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A21A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A21A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A21A8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A219C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A219E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A21A0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A212C; -extern u16 D_801A21AC; -extern u16 D_801A21AE; -extern u16 D_801A21B0; -extern s16 D_801A2388; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A2388 = 0; - D_801A212C = 0; - D_801A21AC = D_80126B5E; - D_801A21AE = D_80126B62; - D_801A21B0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184BA8[]; - extern s16 D_801A21A4; - extern s16 D_801A219C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184BA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184BA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A21A4; - s16 *p78C = &D_801A219C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A2388 = 1; - D_801A212C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A214C; - extern SV4_8017B368 D_801A2154; - extern s16 D_801A21A4; - extern s16 D_801A219C; - extern u16 D_80184BA8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A214C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A2154; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80184BA8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80184BA8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A21A4) = loc0; - (*(SV4_8017B368 *)&D_801A219C) = loc1; - D_801A2388 = 1; - D_801A212C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184BA8[]; - extern s16 D_801A21A4; - extern s16 D_801A21A6; - extern s16 D_801A21A8; - extern s16 D_801A219C; - extern s16 D_801A219E; - extern s16 D_801A21A0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184BA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184BA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A21A4; - s16 *p78C = &D_801A219C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A21A6; - v798 = D_801A21A8; - v78C = *p78C; - v78E = D_801A219E; - v790 = D_801A21A0; - __asm__ __volatile__(""); - D_801A2388 = 1; - D_801A212C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A212C; -extern s16 D_801A21A4; -extern s16 D_801A21A6; -extern s16 D_801A21A8; -extern s16 D_801A219C; -extern s16 D_801A219E; -extern s16 D_801A21A0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A212C = 0; - D_801A21A4 = (s16) D_80114F30; - D_801A21A6 = (s16) D_80114F34; - D_801A21A8 = (s16) D_80114F38; - D_801A219C = (s16) D_80114F24; - D_801A219E = (s16) D_80114F28; - D_801A21A0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A21BC; -extern s16 D_801A21BE; -extern s16 D_801A21C0; -extern s16 D_801A21C4; -extern s16 D_801A21C6; -extern s16 D_801A21C8; - -void func_8017B824(void) { - D_801A21BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A21BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A21C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A21C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A21C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A21C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A21BC; -extern s16 D_801A21BE; -extern s16 D_801A21C0; -extern s16 D_801A21C4; -extern s16 D_801A21C6; -extern s16 D_801A21C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A21BC; - D_80114F34 = D_801A21BE; - D_80114F38 = D_801A21C0; - D_80114F24 = D_801A21C4; - D_80114F28 = D_801A21C6; - D_80114F2C = D_801A21C8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A21A4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A219C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A21A4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A219C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A21AC; -extern u16 D_801A21AE; -extern u16 D_801A21B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A212C; -extern short D_801A21B4; -extern short D_801A21B6; -extern short D_801A21B8; -extern s16 D_801A21A4; -extern s16 D_801A21A6; -extern s16 D_801A21A8; -extern s16 D_801A219C; -extern s16 D_801A219E; -extern s16 D_801A21A0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A21AC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A21AE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A21B0); - (*(s16 *)&D_801A21B4) = buf[0]; - (*(s16 *)&D_801A21B6) = buf[1]; - (*(s16 *)&D_801A21B8) = buf[2]; - D_801A21A4 = D_80114F30 + buf[0]; - D_801A212C = 0; - D_801A21A6 = D_80114F34 + buf[1]; - D_801A21A8 = D_80114F38 + buf[2]; - D_801A219C = D_80114F24 + buf[0]; - D_801A219E = D_80114F28 + buf[1]; - D_801A21A0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A214C; -extern SV4 D_801A2154; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A2154) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A214C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A2154 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A2154)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A214C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A2154) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A2174[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A2174; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A212C; -extern s16 D_801A2388; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A212C = D_801A212C + 1; - if (D_801A212C >= 0x1F) { - D_801A2388 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A212C; -extern s16 D_801A2388; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A212C = D_801A212C + 1; - if (0x18 < D_801A212C) { - func_8012A4BC(); - D_801A2388 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A212C; -extern void (*D_801A2170)(void); -extern short D_801A21B4; -extern short D_801A21B6; -extern short D_801A21B8; -extern s16 D_801A2388; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A212C = D_801A212C + 1; - if (D_801A212C >= 0x19) { - if (D_801A2170 != 0) { - (*D_801A2170)(); - } else { - D_80114F30 = D_80114F30 + D_801A21B4; - D_80114F34 = D_80114F34 + D_801A21B6; - D_80114F38 = D_80114F38 + D_801A21B8; - D_80114F24 = D_80114F24 + D_801A21B4; - D_80114F28 = D_80114F28 + D_801A21B6; - D_80114F2C = D_80114F2C + D_801A21B8; - func_8012A4BC(); - } - D_801A2388 = 0; - } -} - - - -extern void (*D_80184C48[])(void); - -void func_8017BE60(void *a0) { - D_80184C48[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017BEE8); - - -extern void (*D_80184D78[])(void); - -void func_8017BFC8(void *a0) { - D_80184D78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C214); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C404); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C454); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C4C4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C528); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C5D8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C628); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C670); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C6B8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017C730); - - -extern void (*D_80184EB0[])(void); - -void func_8017D610(void *a0) { - D_80184EB0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D64C); - - -extern void (*D_80184EB8[])(void); - -void func_8017D690(void *a0) { - D_80184EB8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D718); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D76C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80184EC4[])(void); - -void func_8017D790(void *a0) { - D_80184EC4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D7CC); - - -extern void (*D_80184ED0[])(void); - -void func_8017D80C(void *a0) { - D_80184ED0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D848); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D888); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D910); - - -extern void (*D_80184EDC[])(void); - -void func_8017D930(void *a0) { - D_80184EDC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017D96C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DA1C); - - -extern void (*D_80184F10[])(void); - -void func_8017DA54(void *a0) { - D_80184F10[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DA90); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DAC8); - -void func_8017DB20(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DB28); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DB78); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DBB0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DBD8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DC08); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DC74); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DCA0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DCC8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DD30); - -extern void func_8017FB78(s32); - extern void func_80171928(void *a0); - void func_8017DD68(s32 arg0) { - func_8017FB78(arg0); - ((s32 (*)(s32))func_80171928)(arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DD98); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DDE4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DE14); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DE6C); - - -extern void (*D_801851E0[])(void); - -void func_8017DE98(void *a0) { - D_801851E0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DED4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DF14); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017DFE4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E08C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E0EC); - -extern void func_800D0F4C(s32 arg); - extern void func_80171928(void *a0); - void func_8017E13C(void *a0) { - func_800D0F4C(0x67); - ((void (*)(void *))func_80171928)(a0); - } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E170); - -extern s32 D_80197608; -extern s32 D_80126950; -extern void func_80174E9C(s32); - -void func_8017E214(void) { - D_80126950 = 0x1F4; - func_80174E9C((s32)&D_80197608); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E248); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E2F0); - -extern s32 D_80197608; -extern s32 D_80126950; -extern void func_80174EF0(s32 a0, s16 a1); - -void func_8017E328(void) { - D_80126950 = 0x1F4; - ((void (*)(s32, s32))func_80174EF0)((s32)&D_80197608, 0xC7); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E35C); - - -extern void (*D_801851FC[])(void); - -void func_8017E394(void *a0) { - D_801851FC[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern s32 func_8017E3F0(void); - void func_8017E3D0(void) { - func_8017E3F0(); - } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E3F0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E5B8); - - -extern void (*D_80185280[])(void); - -void func_8017E620(void *a0) { - D_80185280[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E65C); - -void func_8017E7C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E7D0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E884); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E918); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017E92C); - - -extern void (*D_80185290[])(void); - -void func_8017EA24(void *a0) { - D_80185290[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EA60); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EAE0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EB24); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EB38); - - -extern void (*D_80185434[])(void); - -void func_8017EB4C(void *a0) { - D_80185434[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EB88); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017ECD4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017EF28); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F0D0); - - -extern void (*D_80185458[])(void); - -void func_8017F110(void *a0) { - D_80185458[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F14C); - - -extern void (*D_80185460[])(void); - -void func_8017F240(void *a0) { - D_80185460[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F27C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F370); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F3F0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F54C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F584); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F64C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F6B8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F718); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F790); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F84C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F910); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F950); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017F9CC); - - -extern void (*D_801854B0[])(void); - -void func_8017FB3C(void *a0) { - D_801854B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FB78); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FBFC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FC44); - -void func_8017FD28(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FD30); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FE30); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8018550C[]; - -extern s32 func_801800F8(s32 a0); - -void func_8017FEF8(int param_1) -{ - D_8018550C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_801800F8)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FF48); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8017FFF0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8018009C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801800F8); - - -extern void (*D_80185568[])(void); - -void func_801801A4(void *a0) { - D_80185568[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801801E0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180228); - -void func_80180324(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8018032C); - -void func_80180358(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - } - - - -extern void (*D_80185804[])(void); - -void func_80180364(void *a0) { - D_80185804[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801803A0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801803B0); - -void func_80180414(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8018041C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180470); - -void func_801804B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801804C0); - -s32 func_80180598(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801805A0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180604); - - -extern void (*D_801859A8[])(void); - -void func_80180658(void *a0) { - D_801859A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180694); - -extern void func_80162120(void); - void func_801806B4(void) { - ((s32 (*)(void))func_80162120)(); - } - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801806D4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180734); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180774); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180830); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8018094C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801809CC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180A10); - - -extern void (*D_80185DC4[])(void); - -void func_80180B2C(void *a0) { - D_80185DC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180B68); - - -extern void (*D_80185DE4[])(void); - -void func_80180D38(void *a0) { - D_80185DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180D74); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180DBC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180E04); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180E4C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180EA8); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180EE0); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180EF4); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180F08); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180F18); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80180F90); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_8018107C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_801810EC); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_801734BC", func_80181194); - diff --git a/src/ov_SC03_011/ov_SC03_011_jr_80178D40.c b/src/ov_SC03_011/ov_SC03_011_jr_80178D40.c new file mode 100644 index 000000000..c17627654 --- /dev/null +++ b/src/ov_SC03_011/ov_SC03_011_jr_80178D40.c @@ -0,0 +1,4708 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184450[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A1498; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184444[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80184488[]; +extern unsigned short D_80184490[]; +extern unsigned short D_80184498[]; +extern unsigned char D_801A14A0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A1498; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801844A0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A15D4; +extern M2C_UNK D_801A15D8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A1560; +extern void (*D_801844D0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A15DC[]; +extern u8 D_801A15E4[]; +extern u8 D_801A1594[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801844D8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801844F4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801844FC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184564[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80184508; +extern u8 D_80184514; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80184598[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801845A0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801845F4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80184628[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80184618[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80184644; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801846BC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801846C4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801846CC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801846D4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801846DC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801846E4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801846F0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801846FC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80184708[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80184718[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80184728[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80184730[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80184738[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80184740[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184748[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80184750[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184758[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80184760[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80184768[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80184770[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80184778[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80184780[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80184788[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80184790[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80184798[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801847A0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801847A8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801847B0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801847B8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801847C0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801847C8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801847D0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801847D8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018481C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801847E0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018484C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80184888[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801848E0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801848F0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801848F8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184A60[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184A6C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A0B4C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A2388; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A1D18; +extern short D_801A2400; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A2400) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A2400)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A1D18 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A2400) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A2358 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A2358 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A2400) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A2400) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A2174[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A1D1C; + extern s32 D_801A2130; + extern s16 D_801A2134; + extern s16 D_801A2138; + extern s16 D_801A213C; + extern s16 D_801A2140; + extern s32 D_801A2148; + extern s32 D_801A214C; + extern s32 D_801A215C; + extern s16 D_801A2160; + extern s16 D_801A2164; + extern s32 D_801A2168; + extern s32 D_801A2170; + extern s32 D_801A2174[10]; + extern s32 D_801A22A0; + extern s16 D_801A2358; + extern s32 D_801A2384; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A2358; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A2130); + D_801A2130 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A213C, D_801A2140 ? 0x48 : 0x40); + (*(s16*)&D_801A2400) = 2; + break; + case 0: + func_80179B28(D_801A2130); + D_801A2130 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A2134, D_801A2138 ? 0x48 : 0x40); + (*(s16*)&D_801A2400) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A22A0 != 0) { + func_80179B28(D_801A2130); + D_801A2130 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A2134, D_801A2138 ? 0x48 : 0x40); + (*(s16*)&D_801A2400) = 1; + } else { + (*(s16*)&D_801A2400) = 3; + } + break; + case 0x32: + func_80179B28(D_801A2130); + D_801A2130 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A2134, + D_801A2138 ? 0x48 : 0x40); + (*(s16*)&D_801A2400) = 1; + break; + case 2: + func_80179B28(D_801A2130); + if (D_801A2148 != 0) { + D_801A1D18 = D_801A2148; + D_801A2148 = 0; + (*(s16*)&D_801A2400) = 3; + return; + } + (*(s16*)&D_801A2400) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A2400) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A2400) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A2400) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A2400) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A2400) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A2400) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A2400) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A2400) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A2400) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A2400) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A2400) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x1B: + D_801A2168 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A2400) = 4; + D_801A1D1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A2400) = 5; + D_801A215C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A215C = (s32)func_8017A3B0; + (*(s16*)&D_801A2400) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x24: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A2400) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A2400) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A2400) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A2400) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A2400) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A2400) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A2400) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A2400) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A2400) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A214C); + (*(s16*)&D_801A2400) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A214C); + (*(s16*)&D_801A2400) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A214C); + (*(s16*)&D_801A2400) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A214C); + (*(s16*)&D_801A2400) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + break; + case 0x4E: + D_801A2170 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x2B: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A2400) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A2384 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A2400) = 3; + break; + case 0x34: + (*(s16*)&D_801A2400) = 3; + D_801A1D18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A2148 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A2400) = 3; + D_801A1D18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A2400) = 3; + D_801A1D18 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A1D18 = *(s32 *)(D_801A1D18 + 4); + return; + case 0x37: + (*(s16*)&D_801A2400) = 3; + D_801A2134 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A2138 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A2400) = 3; + D_801A213C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A2140 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A2400) = 3; + D_801A2134 = w1; + D_801A2138 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A2400) = 3; + D_801A213C = w2; + D_801A2140 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + case 0x43: + D_801A215C = (s32)func_8017A3D8; + D_801A2164 = 0; + (*(s16*)&D_801A2400) = 5; + D_801A2160 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A2400) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A2400) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A2400) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A2174; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A2400) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A2174; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A2400) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A2174[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A2400) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A2174; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A2400) = 3; + break; + default: + break; + } +Lend: + D_801A1D18 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A2144; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A2144 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A2144; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A2144 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A216C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A216C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A2128; + +s32 func_8017A3B0(void) { + switch (D_801A2128) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A2164; +extern short D_801A2160; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A2164) { + case 0: + func_800D0CA0(1); + D_801A2164 = D_801A2164 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A2160; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A2164 = D_801A2164 + 1; + if (D_801A2164 < 0x1E) { + return 0; + } + D_801A2164 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A21A4; + extern s16 D_801A21A6; + extern s16 D_801A21A8; + extern s16 D_801A219C; + extern s16 D_801A219E; + extern s16 D_801A21A0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A21A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A21A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A21A8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A219C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A219E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A21A0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A212C; +extern u16 D_801A21AC; +extern u16 D_801A21AE; +extern u16 D_801A21B0; +extern s16 D_801A2388; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A2388 = 0; + D_801A212C = 0; + D_801A21AC = D_80126B5E; + D_801A21AE = D_80126B62; + D_801A21B0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184BA8[]; + extern s16 D_801A21A4; + extern s16 D_801A219C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184BA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184BA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A21A4; + s16 *p78C = &D_801A219C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A2388 = 1; + D_801A212C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A214C; + extern SV4_8017B368 D_801A2154; + extern s16 D_801A21A4; + extern s16 D_801A219C; + extern u16 D_80184BA8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A214C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A2154; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80184BA8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80184BA8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A21A4) = loc0; + (*(SV4_8017B368 *)&D_801A219C) = loc1; + D_801A2388 = 1; + D_801A212C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184BA8[]; + extern s16 D_801A21A4; + extern s16 D_801A21A6; + extern s16 D_801A21A8; + extern s16 D_801A219C; + extern s16 D_801A219E; + extern s16 D_801A21A0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184BA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184BA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A21A4; + s16 *p78C = &D_801A219C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A21A6; + v798 = D_801A21A8; + v78C = *p78C; + v78E = D_801A219E; + v790 = D_801A21A0; + __asm__ __volatile__(""); + D_801A2388 = 1; + D_801A212C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A212C; +extern s16 D_801A21A4; +extern s16 D_801A21A6; +extern s16 D_801A21A8; +extern s16 D_801A219C; +extern s16 D_801A219E; +extern s16 D_801A21A0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A212C = 0; + D_801A21A4 = (s16) D_80114F30; + D_801A21A6 = (s16) D_80114F34; + D_801A21A8 = (s16) D_80114F38; + D_801A219C = (s16) D_80114F24; + D_801A219E = (s16) D_80114F28; + D_801A21A0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A21BC; +extern s16 D_801A21BE; +extern s16 D_801A21C0; +extern s16 D_801A21C4; +extern s16 D_801A21C6; +extern s16 D_801A21C8; + +void func_8017B824(void) { + D_801A21BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A21BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A21C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A21C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A21C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A21C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A21BC; +extern s16 D_801A21BE; +extern s16 D_801A21C0; +extern s16 D_801A21C4; +extern s16 D_801A21C6; +extern s16 D_801A21C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A21BC; + D_80114F34 = D_801A21BE; + D_80114F38 = D_801A21C0; + D_80114F24 = D_801A21C4; + D_80114F28 = D_801A21C6; + D_80114F2C = D_801A21C8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A21A4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A219C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A21A4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A219C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A21AC; +extern u16 D_801A21AE; +extern u16 D_801A21B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A212C; +extern short D_801A21B4; +extern short D_801A21B6; +extern short D_801A21B8; +extern s16 D_801A21A4; +extern s16 D_801A21A6; +extern s16 D_801A21A8; +extern s16 D_801A219C; +extern s16 D_801A219E; +extern s16 D_801A21A0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A21AC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A21AE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A21B0); + (*(s16 *)&D_801A21B4) = buf[0]; + (*(s16 *)&D_801A21B6) = buf[1]; + (*(s16 *)&D_801A21B8) = buf[2]; + D_801A21A4 = D_80114F30 + buf[0]; + D_801A212C = 0; + D_801A21A6 = D_80114F34 + buf[1]; + D_801A21A8 = D_80114F38 + buf[2]; + D_801A219C = D_80114F24 + buf[0]; + D_801A219E = D_80114F28 + buf[1]; + D_801A21A0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A214C; +extern SV4 D_801A2154; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A2154) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A214C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A2154 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A2154)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A214C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A2154) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A2174[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A2174; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A212C; +extern s16 D_801A2388; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A212C = D_801A212C + 1; + if (D_801A212C >= 0x1F) { + D_801A2388 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A212C; +extern s16 D_801A2388; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A212C = D_801A212C + 1; + if (0x18 < D_801A212C) { + func_8012A4BC(); + D_801A2388 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A212C; +extern void (*D_801A2170)(void); +extern short D_801A21B4; +extern short D_801A21B6; +extern short D_801A21B8; +extern s16 D_801A2388; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A212C = D_801A212C + 1; + if (D_801A212C >= 0x19) { + if (D_801A2170 != 0) { + (*D_801A2170)(); + } else { + D_80114F30 = D_80114F30 + D_801A21B4; + D_80114F34 = D_80114F34 + D_801A21B6; + D_80114F38 = D_80114F38 + D_801A21B8; + D_80114F24 = D_80114F24 + D_801A21B4; + D_80114F28 = D_80114F28 + D_801A21B6; + D_80114F2C = D_80114F2C + D_801A21B8; + func_8012A4BC(); + } + D_801A2388 = 0; + } +} + + + +extern void (*D_80184C48[])(void); + +void func_8017BE60(void *a0) { + D_80184C48[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017BEE8); + + +extern void (*D_80184D78[])(void); + +void func_8017BFC8(void *a0) { + D_80184D78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C214); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C404); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C454); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C4C4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C528); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C5D8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C628); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C670); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C6B8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017C730); + + +extern void (*D_80184EB0[])(void); + +void func_8017D610(void *a0) { + D_80184EB0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D64C); + + +extern void (*D_80184EB8[])(void); + +void func_8017D690(void *a0) { + D_80184EB8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D718); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D76C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80184EC4[])(void); + +void func_8017D790(void *a0) { + D_80184EC4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D7CC); + + +extern void (*D_80184ED0[])(void); + +void func_8017D80C(void *a0) { + D_80184ED0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D848); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D888); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D910); + + +extern void (*D_80184EDC[])(void); + +void func_8017D930(void *a0) { + D_80184EDC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017D96C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DA1C); + + +extern void (*D_80184F10[])(void); + +void func_8017DA54(void *a0) { + D_80184F10[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DA90); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DAC8); + +void func_8017DB20(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DB28); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DB78); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DBB0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DBD8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DC08); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DC74); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DCA0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DCC8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DD30); + +extern void func_8017FB78(s32); + extern void func_80171928(void *a0); + void func_8017DD68(s32 arg0) { + func_8017FB78(arg0); + ((s32 (*)(s32))func_80171928)(arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DD98); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DDE4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DE14); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DE6C); + + +extern void (*D_801851E0[])(void); + +void func_8017DE98(void *a0) { + D_801851E0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DED4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DF14); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017DFE4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E08C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E0EC); + +extern void func_800D0F4C(s32 arg); + extern void func_80171928(void *a0); + void func_8017E13C(void *a0) { + func_800D0F4C(0x67); + ((void (*)(void *))func_80171928)(a0); + } + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E170); + +extern s32 D_80197608; +extern s32 D_80126950; +extern void func_80174E9C(s32); + +void func_8017E214(void) { + D_80126950 = 0x1F4; + func_80174E9C((s32)&D_80197608); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E248); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E2F0); + +extern s32 D_80197608; +extern s32 D_80126950; +extern void func_80174EF0(s32 a0, s16 a1); + +void func_8017E328(void) { + D_80126950 = 0x1F4; + ((void (*)(s32, s32))func_80174EF0)((s32)&D_80197608, 0xC7); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E35C); + + +extern void (*D_801851FC[])(void); + +void func_8017E394(void *a0) { + D_801851FC[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern s32 func_8017E3F0(void); + void func_8017E3D0(void) { + func_8017E3F0(); + } + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E3F0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E5B8); + + +extern void (*D_80185280[])(void); + +void func_8017E620(void *a0) { + D_80185280[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E65C); + +void func_8017E7C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E7D0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E884); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E918); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017E92C); + + +extern void (*D_80185290[])(void); + +void func_8017EA24(void *a0) { + D_80185290[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EA60); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EAE0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EB24); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EB38); + + +extern void (*D_80185434[])(void); + +void func_8017EB4C(void *a0) { + D_80185434[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EB88); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017ECD4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017EF28); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F0D0); + + +extern void (*D_80185458[])(void); + +void func_8017F110(void *a0) { + D_80185458[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F14C); + + +extern void (*D_80185460[])(void); + +void func_8017F240(void *a0) { + D_80185460[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F27C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F370); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F3F0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F54C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F584); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F64C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F6B8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F718); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F790); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F84C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F910); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F950); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017F9CC); + + +extern void (*D_801854B0[])(void); + +void func_8017FB3C(void *a0) { + D_801854B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FB78); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FBFC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FC44); + +void func_8017FD28(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FD30); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FE30); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8018550C[]; + +extern s32 func_801800F8(s32 a0); + +void func_8017FEF8(int param_1) +{ + D_8018550C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_801800F8)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FF48); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8017FFF0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8018009C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801800F8); + + +extern void (*D_80185568[])(void); + +void func_801801A4(void *a0) { + D_80185568[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801801E0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180228); + +void func_80180324(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8018032C); + +void func_80180358(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + } + + + +extern void (*D_80185804[])(void); + +void func_80180364(void *a0) { + D_80185804[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801803A0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801803B0); + +void func_80180414(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8018041C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180470); + +void func_801804B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801804C0); + +s32 func_80180598(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801805A0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180604); + + +extern void (*D_801859A8[])(void); + +void func_80180658(void *a0) { + D_801859A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180694); + +extern void func_80162120(void); + void func_801806B4(void) { + ((s32 (*)(void))func_80162120)(); + } + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801806D4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180734); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180774); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180830); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8018094C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801809CC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180A10); + + +extern void (*D_80185DC4[])(void); + +void func_80180B2C(void *a0) { + D_80185DC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180B68); + + +extern void (*D_80185DE4[])(void); + +void func_80180D38(void *a0) { + D_80185DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180D74); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180DBC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180E04); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180E4C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180EA8); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180EE0); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180EF4); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180F08); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180F18); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80180F90); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_8018107C); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_801810EC); + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_80178D40", func_80181194); + + diff --git a/src/ov_SC03_012/ov_SC03_012_jr_801734BC.c b/src/ov_SC03_012/ov_SC03_012_jr_801734BC.c index 6f01396a7..988609f4e 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_801734BC.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_801734BC.c @@ -3105,857 +3105,3 @@ void func_80178D18(void) { D_8019515C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80194F64; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80194F64 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80194F64; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80194F64 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80194F8C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80194F8C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80194F48; - -s32 func_8017A3B0(void) { - switch (D_80194F48) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80194F84; -extern short D_80194F80; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80194F84) { - case 0: - func_800D0CA0(1); - D_80194F84 = D_80194F84 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80194F80; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80194F84 = D_80194F84 + 1; - if (D_80194F84 < 0x1E) { - return 0; - } - D_80194F84 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80194FC4; - extern s16 D_80194FC6; - extern s16 D_80194FC8; - extern s16 D_80194FBC; - extern s16 D_80194FBE; - extern s16 D_80194FC0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194FC4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194FC6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194FC8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80194FBC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80194FBE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194FC0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80194F4C; -extern u16 D_80194FCC; -extern u16 D_80194FCE; -extern u16 D_80194FD0; -extern s16 D_801950E8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801950E8 = 0; - D_80194F4C = 0; - D_80194FCC = D_80126B5E; - D_80194FCE = D_80126B62; - D_80194FD0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181A88[]; - extern s16 D_80194FC4; - extern s16 D_80194FBC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181A88[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181A88[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194FC4; - s16 *p78C = &D_80194FBC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801950E8 = 1; - D_80194F4C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80194F6C; - extern SV4_8017B368 D_80194F74; - extern s16 D_80194FC4; - extern s16 D_80194FBC; - extern u16 D_80181A88; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80194F6C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80194F74; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181A88)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181A88)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80194FC4) = loc0; - (*(SV4_8017B368 *)&D_80194FBC) = loc1; - D_801950E8 = 1; - D_80194F4C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181A88[]; - extern s16 D_80194FC4; - extern s16 D_80194FC6; - extern s16 D_80194FC8; - extern s16 D_80194FBC; - extern s16 D_80194FBE; - extern s16 D_80194FC0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181A88[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181A88[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194FC4; - s16 *p78C = &D_80194FBC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80194FC6; - v798 = D_80194FC8; - v78C = *p78C; - v78E = D_80194FBE; - v790 = D_80194FC0; - __asm__ __volatile__(""); - D_801950E8 = 1; - D_80194F4C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80194F4C; -extern s16 D_80194FC4; -extern s16 D_80194FC6; -extern s16 D_80194FC8; -extern s16 D_80194FBC; -extern s16 D_80194FBE; -extern s16 D_80194FC0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80194F4C = 0; - D_80194FC4 = (s16) D_80114F30; - D_80194FC6 = (s16) D_80114F34; - D_80194FC8 = (s16) D_80114F38; - D_80194FBC = (s16) D_80114F24; - D_80194FBE = (s16) D_80114F28; - D_80194FC0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80194FDC; -extern s16 D_80194FDE; -extern s16 D_80194FE0; -extern s16 D_80194FE4; -extern s16 D_80194FE6; -extern s16 D_80194FE8; - -void func_8017B824(void) { - D_80194FDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80194FDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80194FE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80194FE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80194FE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80194FE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80194FDC; -extern s16 D_80194FDE; -extern s16 D_80194FE0; -extern s16 D_80194FE4; -extern s16 D_80194FE6; -extern s16 D_80194FE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80194FDC; - D_80114F34 = D_80194FDE; - D_80114F38 = D_80194FE0; - D_80114F24 = D_80194FE4; - D_80114F28 = D_80194FE6; - D_80114F2C = D_80194FE8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80194FC4), src[8..15] -> (*(S8_8017B8E8 *)&D_80194FBC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80194FC4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80194FBC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80194FCC; -extern u16 D_80194FCE; -extern u16 D_80194FD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80194F4C; -extern short D_80194FD4; -extern short D_80194FD6; -extern short D_80194FD8; -extern s16 D_80194FC4; -extern s16 D_80194FC6; -extern s16 D_80194FC8; -extern s16 D_80194FBC; -extern s16 D_80194FBE; -extern s16 D_80194FC0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80194FCC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80194FCE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194FD0); - (*(s16 *)&D_80194FD4) = buf[0]; - (*(s16 *)&D_80194FD6) = buf[1]; - (*(s16 *)&D_80194FD8) = buf[2]; - D_80194FC4 = D_80114F30 + buf[0]; - D_80194F4C = 0; - D_80194FC6 = D_80114F34 + buf[1]; - D_80194FC8 = D_80114F38 + buf[2]; - D_80194FBC = D_80114F24 + buf[0]; - D_80194FBE = D_80114F28 + buf[1]; - D_80194FC0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80194F6C; -extern SV4 D_80194F74; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80194F74) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80194F6C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80194F74 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80194F74)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80194F6C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80194F74) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80194F94[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80194F94; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80194F4C; -extern s16 D_801950E8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80194F4C = D_80194F4C + 1; - if (D_80194F4C >= 0x1F) { - D_801950E8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80194F4C; -extern s16 D_801950E8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80194F4C = D_80194F4C + 1; - if (0x18 < D_80194F4C) { - func_8012A4BC(); - D_801950E8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80194F4C; -extern void (*D_80194F90)(void); -extern short D_80194FD4; -extern short D_80194FD6; -extern short D_80194FD8; -extern s16 D_801950E8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80194F4C = D_80194F4C + 1; - if (D_80194F4C >= 0x19) { - if (D_80194F90 != 0) { - (*D_80194F90)(); - } else { - D_80114F30 = D_80114F30 + D_80194FD4; - D_80114F34 = D_80114F34 + D_80194FD6; - D_80114F38 = D_80114F38 + D_80194FD8; - D_80114F24 = D_80114F24 + D_80194FD4; - D_80114F28 = D_80114F28 + D_80194FD6; - D_80114F2C = D_80114F2C + D_80194FD8; - func_8012A4BC(); - } - D_801950E8 = 0; - } -} - - - -extern void (*D_80181B28[])(void); - -void func_8017BE60(void *a0) { - D_80181B28[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017C338); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017C530); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017C59C); - - -extern void (*D_80181B84[])(void); - -void func_8017D468(void *a0) { - D_80181B84[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D4A4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D4E8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181B8C[])(void); - -void func_8017D50C(void *a0) { - D_80181B8C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D548); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D5D0); - -extern s32 func_800D1EBC(void); - void func_8017D644(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D664); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D68C); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D6B4); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D780); - - -extern void (*D_80181BB8[])(void); - -void func_8017D84C(void *a0) { - D_80181BB8[*(u8 *)((s32)a0 + 0x4)](); -} - - -void func_8017D888(void) { -} - - -extern void (*D_80181BBC[])(void); - -void func_8017D890(void *a0) { - D_80181BBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017D8CC); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DA80); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DB28); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DBE4); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DCB4); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DE18); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DE90); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DEB0); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DEF0); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017DFBC); - - -extern void (*D_80181BE0[])(void); - -void func_8017DFCC(void *a0) { - D_80181BE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017E008); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_801734BC", func_8017E090); - -extern s32 func_8013CB84(void); - void func_8017E0D4(void) { - func_8013CB84(); - } - - -extern s32 func_8017E0F4(void); - s32 func_8017E0F4(void) { - return 0x23; - } - diff --git a/src/ov_SC03_012/ov_SC03_012_jr_80178D40.c b/src/ov_SC03_012/ov_SC03_012_jr_80178D40.c new file mode 100644 index 000000000..8f9df6b94 --- /dev/null +++ b/src/ov_SC03_012/ov_SC03_012_jr_80178D40.c @@ -0,0 +1,4324 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181330[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801942B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181324[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181368[]; +extern unsigned short D_80181370[]; +extern unsigned short D_80181378[]; +extern unsigned char D_801942C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801942B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181380[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801943F4; +extern M2C_UNK D_801943F8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80194380; +extern void (*D_801813B0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801943FC[]; +extern u8 D_80194404[]; +extern u8 D_801943B4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801813B8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801813D4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801813DC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181444[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801813E8; +extern u8 D_801813F4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181478[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181480[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801814D4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181508[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801814F8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181524; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018159C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801815A4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801815AC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801815B4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801815BC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801815C4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801815D0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801815DC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801815E8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801815F8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181608[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181610[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181618[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181620[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181628[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181630[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181638[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181640[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181648[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181650[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181658[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181660[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181668[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181670[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181678[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181680[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181688[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181690[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181698[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801816A0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801816A8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801816B0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801816B8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801816FC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801816C0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018172C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80181768[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801817C0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801817D0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801817D8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181940[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018194C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801939A8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801950E8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80194B38; +extern short D_8019515C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019515C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019515C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80194B38 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019515C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801950B8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801950B8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019515C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019515C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80194F94[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80194B3C; + extern s32 D_80194F50; + extern s16 D_80194F54; + extern s16 D_80194F58; + extern s16 D_80194F5C; + extern s16 D_80194F60; + extern s32 D_80194F68; + extern s32 D_80194F6C; + extern s32 D_80194F7C; + extern s16 D_80194F80; + extern s16 D_80194F84; + extern s32 D_80194F88; + extern s32 D_80194F90; + extern s32 D_80194F94[10]; + extern s32 D_80195000; + extern s16 D_801950B8; + extern s32 D_801950E4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801950B8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80194F50); + D_80194F50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80194F5C, D_80194F60 ? 0x48 : 0x40); + (*(s16*)&D_8019515C) = 2; + break; + case 0: + func_80179B28(D_80194F50); + D_80194F50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80194F54, D_80194F58 ? 0x48 : 0x40); + (*(s16*)&D_8019515C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80195000 != 0) { + func_80179B28(D_80194F50); + D_80194F50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80194F54, D_80194F58 ? 0x48 : 0x40); + (*(s16*)&D_8019515C) = 1; + } else { + (*(s16*)&D_8019515C) = 3; + } + break; + case 0x32: + func_80179B28(D_80194F50); + D_80194F50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80194F54, + D_80194F58 ? 0x48 : 0x40); + (*(s16*)&D_8019515C) = 1; + break; + case 2: + func_80179B28(D_80194F50); + if (D_80194F68 != 0) { + D_80194B38 = D_80194F68; + D_80194F68 = 0; + (*(s16*)&D_8019515C) = 3; + return; + } + (*(s16*)&D_8019515C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019515C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019515C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019515C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019515C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019515C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019515C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019515C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019515C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019515C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019515C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019515C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x1B: + D_80194F88 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019515C) = 4; + D_80194B3C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019515C) = 5; + D_80194F7C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80194F7C = (s32)func_8017A3B0; + (*(s16*)&D_8019515C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x24: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019515C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019515C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019515C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019515C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019515C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019515C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019515C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019515C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019515C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80194F6C); + (*(s16*)&D_8019515C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80194F6C); + (*(s16*)&D_8019515C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80194F6C); + (*(s16*)&D_8019515C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80194F6C); + (*(s16*)&D_8019515C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + break; + case 0x4E: + D_80194F90 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019515C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801950E4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019515C) = 3; + break; + case 0x34: + (*(s16*)&D_8019515C) = 3; + D_80194B38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80194F68 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019515C) = 3; + D_80194B38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019515C) = 3; + D_80194B38 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80194B38 = *(s32 *)(D_80194B38 + 4); + return; + case 0x37: + (*(s16*)&D_8019515C) = 3; + D_80194F54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80194F58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019515C) = 3; + D_80194F5C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80194F60 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019515C) = 3; + D_80194F54 = w1; + D_80194F58 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019515C) = 3; + D_80194F5C = w2; + D_80194F60 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + case 0x43: + D_80194F7C = (s32)func_8017A3D8; + D_80194F84 = 0; + (*(s16*)&D_8019515C) = 5; + D_80194F80 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019515C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019515C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019515C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80194F94; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019515C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80194F94; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019515C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80194F94[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019515C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80194F94; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019515C) = 3; + break; + default: + break; + } +Lend: + D_80194B38 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80194F64; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80194F64 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80194F64; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80194F64 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80194F8C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80194F8C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80194F48; + +s32 func_8017A3B0(void) { + switch (D_80194F48) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80194F84; +extern short D_80194F80; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80194F84) { + case 0: + func_800D0CA0(1); + D_80194F84 = D_80194F84 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80194F80; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80194F84 = D_80194F84 + 1; + if (D_80194F84 < 0x1E) { + return 0; + } + D_80194F84 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80194FC4; + extern s16 D_80194FC6; + extern s16 D_80194FC8; + extern s16 D_80194FBC; + extern s16 D_80194FBE; + extern s16 D_80194FC0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194FC4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194FC6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194FC8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80194FBC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80194FBE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194FC0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80194F4C; +extern u16 D_80194FCC; +extern u16 D_80194FCE; +extern u16 D_80194FD0; +extern s16 D_801950E8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801950E8 = 0; + D_80194F4C = 0; + D_80194FCC = D_80126B5E; + D_80194FCE = D_80126B62; + D_80194FD0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181A88[]; + extern s16 D_80194FC4; + extern s16 D_80194FBC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181A88[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181A88[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194FC4; + s16 *p78C = &D_80194FBC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801950E8 = 1; + D_80194F4C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80194F6C; + extern SV4_8017B368 D_80194F74; + extern s16 D_80194FC4; + extern s16 D_80194FBC; + extern u16 D_80181A88; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80194F6C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80194F74; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181A88)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181A88)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80194FC4) = loc0; + (*(SV4_8017B368 *)&D_80194FBC) = loc1; + D_801950E8 = 1; + D_80194F4C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181A88[]; + extern s16 D_80194FC4; + extern s16 D_80194FC6; + extern s16 D_80194FC8; + extern s16 D_80194FBC; + extern s16 D_80194FBE; + extern s16 D_80194FC0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181A88[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181A88[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194FC4; + s16 *p78C = &D_80194FBC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80194FC6; + v798 = D_80194FC8; + v78C = *p78C; + v78E = D_80194FBE; + v790 = D_80194FC0; + __asm__ __volatile__(""); + D_801950E8 = 1; + D_80194F4C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80194F4C; +extern s16 D_80194FC4; +extern s16 D_80194FC6; +extern s16 D_80194FC8; +extern s16 D_80194FBC; +extern s16 D_80194FBE; +extern s16 D_80194FC0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80194F4C = 0; + D_80194FC4 = (s16) D_80114F30; + D_80194FC6 = (s16) D_80114F34; + D_80194FC8 = (s16) D_80114F38; + D_80194FBC = (s16) D_80114F24; + D_80194FBE = (s16) D_80114F28; + D_80194FC0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80194FDC; +extern s16 D_80194FDE; +extern s16 D_80194FE0; +extern s16 D_80194FE4; +extern s16 D_80194FE6; +extern s16 D_80194FE8; + +void func_8017B824(void) { + D_80194FDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80194FDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80194FE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80194FE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80194FE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80194FE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80194FDC; +extern s16 D_80194FDE; +extern s16 D_80194FE0; +extern s16 D_80194FE4; +extern s16 D_80194FE6; +extern s16 D_80194FE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80194FDC; + D_80114F34 = D_80194FDE; + D_80114F38 = D_80194FE0; + D_80114F24 = D_80194FE4; + D_80114F28 = D_80194FE6; + D_80114F2C = D_80194FE8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80194FC4), src[8..15] -> (*(S8_8017B8E8 *)&D_80194FBC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80194FC4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80194FBC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80194FCC; +extern u16 D_80194FCE; +extern u16 D_80194FD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80194F4C; +extern short D_80194FD4; +extern short D_80194FD6; +extern short D_80194FD8; +extern s16 D_80194FC4; +extern s16 D_80194FC6; +extern s16 D_80194FC8; +extern s16 D_80194FBC; +extern s16 D_80194FBE; +extern s16 D_80194FC0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80194FCC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80194FCE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194FD0); + (*(s16 *)&D_80194FD4) = buf[0]; + (*(s16 *)&D_80194FD6) = buf[1]; + (*(s16 *)&D_80194FD8) = buf[2]; + D_80194FC4 = D_80114F30 + buf[0]; + D_80194F4C = 0; + D_80194FC6 = D_80114F34 + buf[1]; + D_80194FC8 = D_80114F38 + buf[2]; + D_80194FBC = D_80114F24 + buf[0]; + D_80194FBE = D_80114F28 + buf[1]; + D_80194FC0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80194F6C; +extern SV4 D_80194F74; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80194F74) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80194F6C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80194F74 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80194F74)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80194F6C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80194F74) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80194F94[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80194F94; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80194F4C; +extern s16 D_801950E8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80194F4C = D_80194F4C + 1; + if (D_80194F4C >= 0x1F) { + D_801950E8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80194F4C; +extern s16 D_801950E8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80194F4C = D_80194F4C + 1; + if (0x18 < D_80194F4C) { + func_8012A4BC(); + D_801950E8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80194F4C; +extern void (*D_80194F90)(void); +extern short D_80194FD4; +extern short D_80194FD6; +extern short D_80194FD8; +extern s16 D_801950E8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80194F4C = D_80194F4C + 1; + if (D_80194F4C >= 0x19) { + if (D_80194F90 != 0) { + (*D_80194F90)(); + } else { + D_80114F30 = D_80114F30 + D_80194FD4; + D_80114F34 = D_80114F34 + D_80194FD6; + D_80114F38 = D_80114F38 + D_80194FD8; + D_80114F24 = D_80114F24 + D_80194FD4; + D_80114F28 = D_80114F28 + D_80194FD6; + D_80114F2C = D_80114F2C + D_80194FD8; + func_8012A4BC(); + } + D_801950E8 = 0; + } +} + + + +extern void (*D_80181B28[])(void); + +void func_8017BE60(void *a0) { + D_80181B28[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017C338); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017C530); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017C59C); + + +extern void (*D_80181B84[])(void); + +void func_8017D468(void *a0) { + D_80181B84[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D4A4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D4E8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181B8C[])(void); + +void func_8017D50C(void *a0) { + D_80181B8C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D548); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D5D0); + +extern s32 func_800D1EBC(void); + void func_8017D644(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D664); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D68C); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D6B4); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D780); + + +extern void (*D_80181BB8[])(void); + +void func_8017D84C(void *a0) { + D_80181BB8[*(u8 *)((s32)a0 + 0x4)](); +} + + +void func_8017D888(void) { +} + + +extern void (*D_80181BBC[])(void); + +void func_8017D890(void *a0) { + D_80181BBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017D8CC); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DA80); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DB28); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DBE4); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DCB4); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DE18); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DE90); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DEB0); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DEF0); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017DFBC); + + +extern void (*D_80181BE0[])(void); + +void func_8017DFCC(void *a0) { + D_80181BE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017E008); + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_80178D40", func_8017E090); + +extern s32 func_8013CB84(void); + void func_8017E0D4(void) { + func_8013CB84(); + } + + +extern s32 func_8017E0F4(void); + s32 func_8017E0F4(void) { + return 0x23; + } + + diff --git a/src/ov_SC03_013/ov_SC03_013_jr_801734BC.c b/src/ov_SC03_013/ov_SC03_013_jr_801734BC.c index d45912c78..e19572f7d 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_801734BC.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_801734BC.c @@ -3105,1132 +3105,3 @@ void func_80178D18(void) { D_801AD554 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AD234; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AD234 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AD234; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AD234 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AD25C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AD25C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AD218; - -s32 func_8017A3B0(void) { - switch (D_801AD218) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AD254; -extern short D_801AD250; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AD254) { - case 0: - func_800D0CA0(1); - D_801AD254 = D_801AD254 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AD250; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AD254 = D_801AD254 + 1; - if (D_801AD254 < 0x1E) { - return 0; - } - D_801AD254 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AD294; - extern s16 D_801AD296; - extern s16 D_801AD298; - extern s16 D_801AD28C; - extern s16 D_801AD28E; - extern s16 D_801AD290; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AD294, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AD296, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AD298, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AD28C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AD28E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AD290, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AD21C; -extern u16 D_801AD29C; -extern u16 D_801AD29E; -extern u16 D_801AD2A0; -extern s16 D_801AD4E0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AD4E0 = 0; - D_801AD21C = 0; - D_801AD29C = D_80126B5E; - D_801AD29E = D_80126B62; - D_801AD2A0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184870[]; - extern s16 D_801AD294; - extern s16 D_801AD28C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184870[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184870[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AD294; - s16 *p78C = &D_801AD28C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AD4E0 = 1; - D_801AD21C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AD23C; - extern SV4_8017B368 D_801AD244; - extern s16 D_801AD294; - extern s16 D_801AD28C; - extern u16 D_80184870; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AD23C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AD244; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80184870)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80184870)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AD294) = loc0; - (*(SV4_8017B368 *)&D_801AD28C) = loc1; - D_801AD4E0 = 1; - D_801AD21C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184870[]; - extern s16 D_801AD294; - extern s16 D_801AD296; - extern s16 D_801AD298; - extern s16 D_801AD28C; - extern s16 D_801AD28E; - extern s16 D_801AD290; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184870[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184870[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AD294; - s16 *p78C = &D_801AD28C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AD296; - v798 = D_801AD298; - v78C = *p78C; - v78E = D_801AD28E; - v790 = D_801AD290; - __asm__ __volatile__(""); - D_801AD4E0 = 1; - D_801AD21C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AD21C; -extern s16 D_801AD294; -extern s16 D_801AD296; -extern s16 D_801AD298; -extern s16 D_801AD28C; -extern s16 D_801AD28E; -extern s16 D_801AD290; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AD21C = 0; - D_801AD294 = (s16) D_80114F30; - D_801AD296 = (s16) D_80114F34; - D_801AD298 = (s16) D_80114F38; - D_801AD28C = (s16) D_80114F24; - D_801AD28E = (s16) D_80114F28; - D_801AD290 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AD2AC; -extern s16 D_801AD2AE; -extern s16 D_801AD2B0; -extern s16 D_801AD2B4; -extern s16 D_801AD2B6; -extern s16 D_801AD2B8; - -void func_8017B824(void) { - D_801AD2AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AD2AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AD2B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AD2B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AD2B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AD2B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AD2AC; -extern s16 D_801AD2AE; -extern s16 D_801AD2B0; -extern s16 D_801AD2B4; -extern s16 D_801AD2B6; -extern s16 D_801AD2B8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AD2AC; - D_80114F34 = D_801AD2AE; - D_80114F38 = D_801AD2B0; - D_80114F24 = D_801AD2B4; - D_80114F28 = D_801AD2B6; - D_80114F2C = D_801AD2B8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AD294), src[8..15] -> (*(S8_8017B8E8 *)&D_801AD28C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AD294) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AD28C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AD29C; -extern u16 D_801AD29E; -extern u16 D_801AD2A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AD21C; -extern short D_801AD2A4; -extern short D_801AD2A6; -extern short D_801AD2A8; -extern s16 D_801AD294; -extern s16 D_801AD296; -extern s16 D_801AD298; -extern s16 D_801AD28C; -extern s16 D_801AD28E; -extern s16 D_801AD290; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AD29C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AD29E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AD2A0); - (*(s16 *)&D_801AD2A4) = buf[0]; - (*(s16 *)&D_801AD2A6) = buf[1]; - (*(s16 *)&D_801AD2A8) = buf[2]; - D_801AD294 = D_80114F30 + buf[0]; - D_801AD21C = 0; - D_801AD296 = D_80114F34 + buf[1]; - D_801AD298 = D_80114F38 + buf[2]; - D_801AD28C = D_80114F24 + buf[0]; - D_801AD28E = D_80114F28 + buf[1]; - D_801AD290 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AD23C; -extern SV4 D_801AD244; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AD244) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AD23C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AD244 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AD244)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AD23C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AD244) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AD264[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AD264; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AD21C; -extern s16 D_801AD4E0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AD21C = D_801AD21C + 1; - if (D_801AD21C >= 0x1F) { - D_801AD4E0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AD21C; -extern s16 D_801AD4E0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AD21C = D_801AD21C + 1; - if (0x18 < D_801AD21C) { - func_8012A4BC(); - D_801AD4E0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AD21C; -extern void (*D_801AD260)(void); -extern short D_801AD2A4; -extern short D_801AD2A6; -extern short D_801AD2A8; -extern s16 D_801AD4E0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AD21C = D_801AD21C + 1; - if (D_801AD21C >= 0x19) { - if (D_801AD260 != 0) { - (*D_801AD260)(); - } else { - D_80114F30 = D_80114F30 + D_801AD2A4; - D_80114F34 = D_80114F34 + D_801AD2A6; - D_80114F38 = D_80114F38 + D_801AD2A8; - D_80114F24 = D_80114F24 + D_801AD2A4; - D_80114F28 = D_80114F28 + D_801AD2A6; - D_80114F2C = D_80114F2C + D_801AD2A8; - func_8012A4BC(); - } - D_801AD4E0 = 0; - } -} - - - -extern void (*D_80184910[])(void); - -void func_8017BE60(void *a0) { - D_80184910[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017BEE8); - - -extern void (*D_80184A40[])(void); - -void func_8017BFC8(void *a0) { - D_80184A40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C214); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C404); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C454); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C4C4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C528); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C5D8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C628); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C670); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C6B8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017C730); - - -extern void (*D_80184AC0[])(void); - -void func_8017D7C4(void *a0) { - D_80184AC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017D800); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D844(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80184AC8[])(void); - -void func_8017D868(void *a0) { - D_80184AC8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017D8A4); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D8E4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017D960); - - -extern void (*D_80184AD4[])(void); - -void func_8017D980(void *a0) { - D_80184AD4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017D9BC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DA10); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DA64); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DA84); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DAAC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DAD4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DB20); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DB84); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DC38); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DCDC); - - -extern void (*D_80184C64[])(void); - -void func_8017DD5C(void *a0) { - D_80184C64[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DD98); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DE70); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DEC0); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DF5C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017DFB8); - - -extern void (*D_80184C6C[])(void); - -void func_8017E014(void *a0) { - D_80184C6C[*(u8 *)((s32)a0 + 0x216)](); -} - - -extern s32 func_80171990(u8 *a0); - extern s32 func_8017E080(s32); - void func_8017E050(s32 *a0) { - ((void (*)(s32 *))func_80171990)(a0); - func_8017E080((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E080); - -extern void func_8017E1C0(s32 arg); - void func_8017E0C0(void) { - ((s32 (*)(s32))func_8017E1C0)(0); - } - - -extern void func_8017E1C0(s32 arg); - void func_8017E0E0(void) { - func_8017E1C0(1); - } - - -extern void func_8017E1C0(s32 arg); - void func_8017E100(void) { - ((s32 (*)(s32))func_8017E1C0)(0x2); - } - - -extern void func_8017E1C0(s32 arg); - void func_8017E120(void) { - func_8017E1C0(0x3); - } - - -extern void func_8017E1C0(s32 arg); - void func_8017E140(void) { - func_8017E1C0(4); - } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E160); - -extern void func_8017E1C0(s32 arg); - void func_8017E180(void) { - ((s32 (*)(s32))func_8017E1C0)(0x6); - } - - -extern void func_8017E1C0(s32 arg); - void func_8017E1A0(void) { - func_8017E1C0(0x7); - } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E1C0); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E1EC); - - -extern void (*D_80184C9C[])(void); - -void func_8017E214(void *a0) { - D_80184C9C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E250); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E290); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E2C8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E2F0); - - -extern void (*D_80184CA4[])(void); - -void func_8017E388(void *a0) { - D_80184CA4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E3C4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E528); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017E6F4); - - -extern void (*D_80184D50[])(void); - -void func_8017E9CC(void *a0) { - D_80184D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EA08); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EAB0); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EBA0); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017ECD0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017ED40(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x3); - } - - - -extern void (*D_80184E98[])(void); - -void func_8017ED60(void *a0) { - D_80184E98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017ED9C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EE28); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EEA4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EF34); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017EF9C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F0A0); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F140); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F198); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F288); - - -extern void (*D_80184EC0[])(void); - -void func_8017F2E0(void *a0) { - D_80184EC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F31C(void *a0) { - *(short *)((char *)a0 + 0xfc) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F324); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F4B4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F574); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F5A4); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F5FC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F664); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F6C8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F748); - -extern s32 func_8012BF10(s32 arg0, s32 arg1); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017F7AC(void *a0) { - if (func_8012BF10((s32)a0, 0x40)) { - ((void (*)(void *, s32))func_8012AD44)(a0, 1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F7E8); - - -extern void (*D_80184F30[])(void); - -void func_8017F820(void *a0) { - D_80184F30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F85C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017F958); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FA4C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FAA8); - - -extern void (*D_801850F8[])(void); - -void func_8017FE4C(void *a0) { - D_801850F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FE88); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FF28); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FF6C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FF84); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8017FFE8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180148); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8018032C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_801803E8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180494); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180518); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_8018063C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_801806F8); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180818); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180958); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180A94); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180B0C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180B84); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180BFC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180C74); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180CEC); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180D60); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180E00); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180E4C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_801734BC", func_80180EC0); - diff --git a/src/ov_SC03_013/ov_SC03_013_jr_80178D40.c b/src/ov_SC03_013/ov_SC03_013_jr_80178D40.c new file mode 100644 index 000000000..ab8939e17 --- /dev/null +++ b/src/ov_SC03_013/ov_SC03_013_jr_80178D40.c @@ -0,0 +1,4599 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184118[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801AC588; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018410C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80184150[]; +extern unsigned short D_80184158[]; +extern unsigned short D_80184160[]; +extern unsigned char D_801AC590[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801AC588; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80184168[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AC6C4; +extern M2C_UNK D_801AC6C8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AC650; +extern void (*D_80184198[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801AC6CC[]; +extern u8 D_801AC6D4[]; +extern u8 D_801AC684[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801841A0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801841BC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801841C4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018422C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801841D0; +extern u8 D_801841DC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80184260[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80184268[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801842BC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801842F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801842E0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018430C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80184384[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018438C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80184394[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018439C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801843A4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801843AC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801843B8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801843C4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801843D0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801843E0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801843F0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801843F8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80184400[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80184408[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184410[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80184418[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184420[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80184428[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80184430[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80184438[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80184440[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80184448[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80184450[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80184458[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80184460[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80184468[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80184470[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80184478[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80184480[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80184488[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184490[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80184498[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801844A0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801844E4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801844A8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184514[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80184550[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801845A8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801845B8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801845C0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184728[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184734[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801ABC40; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AD4E0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801ACE08; +extern short D_801AD554; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AD554) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AD554)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801ACE08 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AD554) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AD4B0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AD4B0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AD554) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AD554) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AD264[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801ACE0C; + extern s32 D_801AD220; + extern s16 D_801AD224; + extern s16 D_801AD228; + extern s16 D_801AD22C; + extern s16 D_801AD230; + extern s32 D_801AD238; + extern s32 D_801AD23C; + extern s32 D_801AD24C; + extern s16 D_801AD250; + extern s16 D_801AD254; + extern s32 D_801AD258; + extern s32 D_801AD260; + extern s32 D_801AD264[10]; + extern s32 D_801AD3F8; + extern s16 D_801AD4B0; + extern s32 D_801AD4DC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AD4B0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AD220); + D_801AD220 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AD22C, D_801AD230 ? 0x48 : 0x40); + (*(s16*)&D_801AD554) = 2; + break; + case 0: + func_80179B28(D_801AD220); + D_801AD220 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AD224, D_801AD228 ? 0x48 : 0x40); + (*(s16*)&D_801AD554) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AD3F8 != 0) { + func_80179B28(D_801AD220); + D_801AD220 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AD224, D_801AD228 ? 0x48 : 0x40); + (*(s16*)&D_801AD554) = 1; + } else { + (*(s16*)&D_801AD554) = 3; + } + break; + case 0x32: + func_80179B28(D_801AD220); + D_801AD220 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AD224, + D_801AD228 ? 0x48 : 0x40); + (*(s16*)&D_801AD554) = 1; + break; + case 2: + func_80179B28(D_801AD220); + if (D_801AD238 != 0) { + D_801ACE08 = D_801AD238; + D_801AD238 = 0; + (*(s16*)&D_801AD554) = 3; + return; + } + (*(s16*)&D_801AD554) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AD554) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AD554) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AD554) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AD554) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AD554) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AD554) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AD554) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AD554) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AD554) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AD554) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AD554) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x1B: + D_801AD258 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AD554) = 4; + D_801ACE0C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AD554) = 5; + D_801AD24C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AD24C = (s32)func_8017A3B0; + (*(s16*)&D_801AD554) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x24: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AD554) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AD554) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AD554) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD554) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD554) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD554) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AD554) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AD554) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AD554) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AD23C); + (*(s16*)&D_801AD554) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AD23C); + (*(s16*)&D_801AD554) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AD23C); + (*(s16*)&D_801AD554) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AD23C); + (*(s16*)&D_801AD554) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + break; + case 0x4E: + D_801AD260 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x2B: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AD554) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AD4DC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AD554) = 3; + break; + case 0x34: + (*(s16*)&D_801AD554) = 3; + D_801ACE08 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AD238 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AD554) = 3; + D_801ACE08 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AD554) = 3; + D_801ACE08 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801ACE08 = *(s32 *)(D_801ACE08 + 4); + return; + case 0x37: + (*(s16*)&D_801AD554) = 3; + D_801AD224 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AD228 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AD554) = 3; + D_801AD22C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AD230 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AD554) = 3; + D_801AD224 = w1; + D_801AD228 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AD554) = 3; + D_801AD22C = w2; + D_801AD230 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + case 0x43: + D_801AD24C = (s32)func_8017A3D8; + D_801AD254 = 0; + (*(s16*)&D_801AD554) = 5; + D_801AD250 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD554) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD554) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD554) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AD264; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AD554) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AD264; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AD554) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AD264[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AD554) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AD264; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AD554) = 3; + break; + default: + break; + } +Lend: + D_801ACE08 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AD234; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AD234 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AD234; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AD234 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AD25C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AD25C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AD218; + +s32 func_8017A3B0(void) { + switch (D_801AD218) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AD254; +extern short D_801AD250; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AD254) { + case 0: + func_800D0CA0(1); + D_801AD254 = D_801AD254 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AD250; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AD254 = D_801AD254 + 1; + if (D_801AD254 < 0x1E) { + return 0; + } + D_801AD254 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AD294; + extern s16 D_801AD296; + extern s16 D_801AD298; + extern s16 D_801AD28C; + extern s16 D_801AD28E; + extern s16 D_801AD290; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AD294, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AD296, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AD298, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AD28C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AD28E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AD290, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AD21C; +extern u16 D_801AD29C; +extern u16 D_801AD29E; +extern u16 D_801AD2A0; +extern s16 D_801AD4E0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AD4E0 = 0; + D_801AD21C = 0; + D_801AD29C = D_80126B5E; + D_801AD29E = D_80126B62; + D_801AD2A0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184870[]; + extern s16 D_801AD294; + extern s16 D_801AD28C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184870[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184870[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AD294; + s16 *p78C = &D_801AD28C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AD4E0 = 1; + D_801AD21C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AD23C; + extern SV4_8017B368 D_801AD244; + extern s16 D_801AD294; + extern s16 D_801AD28C; + extern u16 D_80184870; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AD23C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AD244; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80184870)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80184870)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AD294) = loc0; + (*(SV4_8017B368 *)&D_801AD28C) = loc1; + D_801AD4E0 = 1; + D_801AD21C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184870[]; + extern s16 D_801AD294; + extern s16 D_801AD296; + extern s16 D_801AD298; + extern s16 D_801AD28C; + extern s16 D_801AD28E; + extern s16 D_801AD290; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184870[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184870[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AD294; + s16 *p78C = &D_801AD28C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AD296; + v798 = D_801AD298; + v78C = *p78C; + v78E = D_801AD28E; + v790 = D_801AD290; + __asm__ __volatile__(""); + D_801AD4E0 = 1; + D_801AD21C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AD21C; +extern s16 D_801AD294; +extern s16 D_801AD296; +extern s16 D_801AD298; +extern s16 D_801AD28C; +extern s16 D_801AD28E; +extern s16 D_801AD290; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AD21C = 0; + D_801AD294 = (s16) D_80114F30; + D_801AD296 = (s16) D_80114F34; + D_801AD298 = (s16) D_80114F38; + D_801AD28C = (s16) D_80114F24; + D_801AD28E = (s16) D_80114F28; + D_801AD290 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AD2AC; +extern s16 D_801AD2AE; +extern s16 D_801AD2B0; +extern s16 D_801AD2B4; +extern s16 D_801AD2B6; +extern s16 D_801AD2B8; + +void func_8017B824(void) { + D_801AD2AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AD2AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AD2B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AD2B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AD2B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AD2B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AD2AC; +extern s16 D_801AD2AE; +extern s16 D_801AD2B0; +extern s16 D_801AD2B4; +extern s16 D_801AD2B6; +extern s16 D_801AD2B8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AD2AC; + D_80114F34 = D_801AD2AE; + D_80114F38 = D_801AD2B0; + D_80114F24 = D_801AD2B4; + D_80114F28 = D_801AD2B6; + D_80114F2C = D_801AD2B8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AD294), src[8..15] -> (*(S8_8017B8E8 *)&D_801AD28C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AD294) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AD28C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AD29C; +extern u16 D_801AD29E; +extern u16 D_801AD2A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AD21C; +extern short D_801AD2A4; +extern short D_801AD2A6; +extern short D_801AD2A8; +extern s16 D_801AD294; +extern s16 D_801AD296; +extern s16 D_801AD298; +extern s16 D_801AD28C; +extern s16 D_801AD28E; +extern s16 D_801AD290; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AD29C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AD29E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AD2A0); + (*(s16 *)&D_801AD2A4) = buf[0]; + (*(s16 *)&D_801AD2A6) = buf[1]; + (*(s16 *)&D_801AD2A8) = buf[2]; + D_801AD294 = D_80114F30 + buf[0]; + D_801AD21C = 0; + D_801AD296 = D_80114F34 + buf[1]; + D_801AD298 = D_80114F38 + buf[2]; + D_801AD28C = D_80114F24 + buf[0]; + D_801AD28E = D_80114F28 + buf[1]; + D_801AD290 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AD23C; +extern SV4 D_801AD244; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AD244) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AD23C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AD244 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AD244)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AD23C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AD244) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AD264[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AD264; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AD21C; +extern s16 D_801AD4E0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AD21C = D_801AD21C + 1; + if (D_801AD21C >= 0x1F) { + D_801AD4E0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AD21C; +extern s16 D_801AD4E0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AD21C = D_801AD21C + 1; + if (0x18 < D_801AD21C) { + func_8012A4BC(); + D_801AD4E0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AD21C; +extern void (*D_801AD260)(void); +extern short D_801AD2A4; +extern short D_801AD2A6; +extern short D_801AD2A8; +extern s16 D_801AD4E0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AD21C = D_801AD21C + 1; + if (D_801AD21C >= 0x19) { + if (D_801AD260 != 0) { + (*D_801AD260)(); + } else { + D_80114F30 = D_80114F30 + D_801AD2A4; + D_80114F34 = D_80114F34 + D_801AD2A6; + D_80114F38 = D_80114F38 + D_801AD2A8; + D_80114F24 = D_80114F24 + D_801AD2A4; + D_80114F28 = D_80114F28 + D_801AD2A6; + D_80114F2C = D_80114F2C + D_801AD2A8; + func_8012A4BC(); + } + D_801AD4E0 = 0; + } +} + + + +extern void (*D_80184910[])(void); + +void func_8017BE60(void *a0) { + D_80184910[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017BEE8); + + +extern void (*D_80184A40[])(void); + +void func_8017BFC8(void *a0) { + D_80184A40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C214); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C404); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C454); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C4C4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C528); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C5D8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C628); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C670); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C6B8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017C730); + + +extern void (*D_80184AC0[])(void); + +void func_8017D7C4(void *a0) { + D_80184AC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017D800); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D844(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80184AC8[])(void); + +void func_8017D868(void *a0) { + D_80184AC8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017D8A4); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D8E4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017D960); + + +extern void (*D_80184AD4[])(void); + +void func_8017D980(void *a0) { + D_80184AD4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017D9BC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DA10); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DA64); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DA84); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DAAC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DAD4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DB20); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DB84); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DC38); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DCDC); + + +extern void (*D_80184C64[])(void); + +void func_8017DD5C(void *a0) { + D_80184C64[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DD98); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DE70); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DEC0); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DF5C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017DFB8); + + +extern void (*D_80184C6C[])(void); + +void func_8017E014(void *a0) { + D_80184C6C[*(u8 *)((s32)a0 + 0x216)](); +} + + +extern s32 func_80171990(u8 *a0); + extern s32 func_8017E080(s32); + void func_8017E050(s32 *a0) { + ((void (*)(s32 *))func_80171990)(a0); + func_8017E080((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E080); + +extern void func_8017E1C0(s32 arg); + void func_8017E0C0(void) { + ((s32 (*)(s32))func_8017E1C0)(0); + } + + +extern void func_8017E1C0(s32 arg); + void func_8017E0E0(void) { + func_8017E1C0(1); + } + + +extern void func_8017E1C0(s32 arg); + void func_8017E100(void) { + ((s32 (*)(s32))func_8017E1C0)(0x2); + } + + +extern void func_8017E1C0(s32 arg); + void func_8017E120(void) { + func_8017E1C0(0x3); + } + + +extern void func_8017E1C0(s32 arg); + void func_8017E140(void) { + func_8017E1C0(4); + } + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E160); + +extern void func_8017E1C0(s32 arg); + void func_8017E180(void) { + ((s32 (*)(s32))func_8017E1C0)(0x6); + } + + +extern void func_8017E1C0(s32 arg); + void func_8017E1A0(void) { + func_8017E1C0(0x7); + } + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E1C0); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E1EC); + + +extern void (*D_80184C9C[])(void); + +void func_8017E214(void *a0) { + D_80184C9C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E250); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E290); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E2C8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E2F0); + + +extern void (*D_80184CA4[])(void); + +void func_8017E388(void *a0) { + D_80184CA4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E3C4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E528); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017E6F4); + + +extern void (*D_80184D50[])(void); + +void func_8017E9CC(void *a0) { + D_80184D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EA08); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EAB0); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EBA0); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017ECD0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017ED40(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x3); + } + + + +extern void (*D_80184E98[])(void); + +void func_8017ED60(void *a0) { + D_80184E98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017ED9C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EE28); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EEA4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EF34); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017EF9C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F0A0); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F140); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F198); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F288); + + +extern void (*D_80184EC0[])(void); + +void func_8017F2E0(void *a0) { + D_80184EC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F31C(void *a0) { + *(short *)((char *)a0 + 0xfc) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F324); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F4B4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F574); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F5A4); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F5FC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F664); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F6C8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F748); + +extern s32 func_8012BF10(s32 arg0, s32 arg1); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F7AC(void *a0) { + if (func_8012BF10((s32)a0, 0x40)) { + ((void (*)(void *, s32))func_8012AD44)(a0, 1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F7E8); + + +extern void (*D_80184F30[])(void); + +void func_8017F820(void *a0) { + D_80184F30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F85C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017F958); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FA4C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FAA8); + + +extern void (*D_801850F8[])(void); + +void func_8017FE4C(void *a0) { + D_801850F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FE88); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FF28); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FF6C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FF84); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8017FFE8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180148); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8018032C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_801803E8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180494); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180518); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_8018063C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_801806F8); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180818); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180958); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180A94); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180B0C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180B84); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180BFC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180C74); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180CEC); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180D60); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180E00); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180E4C); + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_80178D40", func_80180EC0); + + diff --git a/src/ov_SC03_014/ov_SC03_014_jr_801734BC.c b/src/ov_SC03_014/ov_SC03_014_jr_801734BC.c index 18df8d6a1..4f76f5d12 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_801734BC.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_801734BC.c @@ -3105,1700 +3105,3 @@ void func_80178D18(void) { D_801EB03C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EA7B4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EA7B4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EA7B4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EA7B4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EA7DC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EA7DC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EA798; - -s32 func_8017A3B0(void) { - switch (D_801EA798) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EA814; - extern s16 D_801EA816; - extern s16 D_801EA818; - extern s16 D_801EA80C; - extern s16 D_801EA80E; - extern s16 D_801EA810; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EA814, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EA816, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EA818, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EA80C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EA80E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EA810, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EA79C; -extern u16 D_801EA81C; -extern u16 D_801EA81E; -extern u16 D_801EA820; -extern s16 D_801EAFC8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EAFC8 = 0; - D_801EA79C = 0; - D_801EA81C = D_80126B5E; - D_801EA81E = D_80126B62; - D_801EA820 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EEAC[]; - extern s16 D_801EA814; - extern s16 D_801EA80C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EA814; - s16 *p78C = &D_801EA80C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EAFC8 = 1; - D_801EA79C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EA7BC; - extern SV4_8017B368 D_801EA7C4; - extern s16 D_801EA814; - extern s16 D_801EA80C; - extern u16 D_8018EEAC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EA7BC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EA7C4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EA814) = loc0; - (*(SV4_8017B368 *)&D_801EA80C) = loc1; - D_801EAFC8 = 1; - D_801EA79C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EEAC[]; - extern s16 D_801EA814; - extern s16 D_801EA816; - extern s16 D_801EA818; - extern s16 D_801EA80C; - extern s16 D_801EA80E; - extern s16 D_801EA810; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EA814; - s16 *p78C = &D_801EA80C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EA816; - v798 = D_801EA818; - v78C = *p78C; - v78E = D_801EA80E; - v790 = D_801EA810; - __asm__ __volatile__(""); - D_801EAFC8 = 1; - D_801EA79C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EA79C; -extern s16 D_801EA814; -extern s16 D_801EA816; -extern s16 D_801EA818; -extern s16 D_801EA80C; -extern s16 D_801EA80E; -extern s16 D_801EA810; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EA79C = 0; - D_801EA814 = (s16) D_80114F30; - D_801EA816 = (s16) D_80114F34; - D_801EA818 = (s16) D_80114F38; - D_801EA80C = (s16) D_80114F24; - D_801EA80E = (s16) D_80114F28; - D_801EA810 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EA82C; -extern s16 D_801EA82E; -extern s16 D_801EA830; -extern s16 D_801EA834; -extern s16 D_801EA836; -extern s16 D_801EA838; - -void func_8017B824(void) { - D_801EA82C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EA82E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EA830 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EA834 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EA836 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EA838 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EA82C; -extern s16 D_801EA82E; -extern s16 D_801EA830; -extern s16 D_801EA834; -extern s16 D_801EA836; -extern s16 D_801EA838; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EA82C; - D_80114F34 = D_801EA82E; - D_80114F38 = D_801EA830; - D_80114F24 = D_801EA834; - D_80114F28 = D_801EA836; - D_80114F2C = D_801EA838; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EA814), src[8..15] -> (*(S8_8017B8E8 *)&D_801EA80C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EA814) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EA80C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EA81C; -extern u16 D_801EA81E; -extern u16 D_801EA820; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EA79C; -extern short D_801EA824; -extern short D_801EA826; -extern short D_801EA828; -extern s16 D_801EA814; -extern s16 D_801EA816; -extern s16 D_801EA818; -extern s16 D_801EA80C; -extern s16 D_801EA80E; -extern s16 D_801EA810; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EA81C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EA81E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EA820); - (*(s16 *)&D_801EA824) = buf[0]; - (*(s16 *)&D_801EA826) = buf[1]; - (*(s16 *)&D_801EA828) = buf[2]; - D_801EA814 = D_80114F30 + buf[0]; - D_801EA79C = 0; - D_801EA816 = D_80114F34 + buf[1]; - D_801EA818 = D_80114F38 + buf[2]; - D_801EA80C = D_80114F24 + buf[0]; - D_801EA80E = D_80114F28 + buf[1]; - D_801EA810 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EA7BC; -extern SV4 D_801EA7C4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EA7C4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EA7BC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EA7C4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EA7C4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EA7BC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EA7C4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EA7E4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EA7E4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EA79C; -extern s16 D_801EAFC8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EA79C = D_801EA79C + 1; - if (D_801EA79C >= 0x1F) { - D_801EAFC8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EA79C; -extern s16 D_801EAFC8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EA79C = D_801EA79C + 1; - if (0x18 < D_801EA79C) { - func_8012A4BC(); - D_801EAFC8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EA79C; -extern void (*D_801EA7E0)(void); -extern short D_801EA824; -extern short D_801EA826; -extern short D_801EA828; -extern s16 D_801EAFC8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EA79C = D_801EA79C + 1; - if (D_801EA79C >= 0x19) { - if (D_801EA7E0 != 0) { - (*D_801EA7E0)(); - } else { - D_80114F30 = D_80114F30 + D_801EA824; - D_80114F34 = D_80114F34 + D_801EA826; - D_80114F38 = D_80114F38 + D_801EA828; - D_80114F24 = D_80114F24 + D_801EA824; - D_80114F28 = D_80114F28 + D_801EA826; - D_80114F2C = D_80114F2C + D_801EA828; - func_8012A4BC(); - } - D_801EAFC8 = 0; - } -} - - - -extern void (*D_8018EF4C[])(void); - -void func_8017BE60(void *a0) { - D_8018EF4C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018EF58[])(void); - -void func_8017BEE4(void *a0) { - D_8018EF58[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017BFA0); - - -extern void (*D_8018EF64[])(void); - -void func_8017BFC8(void *a0) { - D_8018EF64[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C084); - - -extern void (*D_8018F024[])(void); - -void func_8017C0C8(void *a0) { - D_8018F024[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C104); - -extern void func_8017C154(void); - void func_8017C12C(void) { - func_8017C154(); - } - - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C624); - - -extern void (*D_8018F064[])(void); - -void func_8017C664(void *a0) { - D_8018F064[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CE10); - - -extern void (*D_8018F084[])(void); - -void func_8017CE54(void *a0) { - D_8018F084[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D098); - - -extern void (*D_8018F094[])(void); - -void func_8017D0DC(void *a0) { - D_8018F094[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018F0A0[])(void); - -void func_8017D63C(void *a0) { - D_8018F0A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DA98); - - -extern void (*D_8018F224[])(void); - -void func_8017DB00(void *a0) { - D_8018F224[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DBC4); - -extern void func_80171A1C(u8 *a0); - void func_8017DC28(s32 *param_1) { - *(s32 *)((char *)param_1 + 0x200) = 1; - ((void (*)(void))func_80171A1C)(); - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017EB7C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8017FA5C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", listCdBuffer); - - -extern void (*D_8018F500[])(void); - -void func_801805BC(void *a0) { - D_8018F500[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801805F8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180638); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801806B4); - -DEFINE_func_80180714() /* dedup: shared engine-core @0x80180714 (src/shared) */ - -DEFINE_func_8018071C() /* dedup: shared engine-core @0x8018071C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180744); - -extern s16 D_80126B0C; - s32 func_80180760(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180770); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801807D0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018089C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180A68); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180AC4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180B20); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180B84); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180C34); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180CF8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180DB8); - - -extern void (*D_8018F5B0[])(void); - -void func_80180DFC(void *a0) { - D_8018F5B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180E38); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80180FFC); - - -extern void (*D_8018F5B8[])(void); - -void func_80181090(void *a0) { - D_8018F5B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018F5A4; - -void func_801810CC(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018F5A4, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181170); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181304); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181690); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181908); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181A50); - - -extern void (*D_8018F6D0[])(void); - -void func_80181BD0(void *a0) { - D_8018F6D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181C0C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181C58); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181D4C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181DCC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181E80); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181EEC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181F78); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181F98); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80181FEC); - - -extern void (*D_8018F728[])(void); - -void func_80182028(void *a0) { - D_8018F728[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182064); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801820B4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182110); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182194); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801822FC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182348); - - -extern void (*D_8018F73C[])(void); - -void func_80182654(void *a0) { - D_8018F73C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182690); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801826D0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801827CC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801828A0); - - -extern void (*D_8018F750[])(void); - -void func_801828F4(void *a0) { - D_8018F750[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182930); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801829E4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182A40); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182BB0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182BD4); - - - -extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_80182BFC(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_80182C28)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182C28); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182CB0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182D04); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182D5C); - - -extern void (*D_8018F7AC[])(void); - -void func_80182E08(void *a0) { - D_8018F7AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80182E44); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183130); - -DEFINE_func_801835C4() /* dedup: shared engine-core @0x801835C4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183600); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80183644(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183668); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_801836A8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183724); - - -extern void (*D_8018F818[])(void); - -void func_80183744(void *a0) { - D_8018F818[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183780); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_801837C0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018383C); - -DEFINE_func_8018385C() /* dedup: shared engine-core @0x8018385C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183898); - -DEFINE_func_80183930() /* dedup: shared engine-core @0x80183930 (src/shared) */ - -DEFINE_func_80183958() /* dedup: shared engine-core @0x80183958 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183980); - - -extern void (*D_8018F850[])(void); - -void func_80183A18(void *a0) { - D_8018F850[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183A54); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183B58); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183CF0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183D50); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80183F28); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184058); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184264); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801842E0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184354); - -DEFINE_func_80184440() /* dedup: shared engine-core @0x80184440 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184474); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184538); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801846E4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018473C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184794); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801847EC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184868); - -DEFINE_func_801848E4() /* dedup: shared engine-core @0x801848E4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184920); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184A08); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184D1C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184DA4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184DF8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184E4C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80184F14); - - -extern void (*D_80190008[])(void); - -void func_80185144(void *a0) { - D_80190008[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185180); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185380); - -DEFINE_func_8018553C() /* dedup: shared engine-core @0x8018553C (src/shared) */ - - - -extern s32 D_801EAEE4; - s32 func_80185578(void) { - return 0x2 - D_801EAEE4; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018558C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801855A0); - -DEFINE_func_801856B4() /* dedup: shared engine-core @0x801856B4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801856C4); - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185744(void) { - return func_8001AAA0(0x51) != 0; - } - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185764(void) { - return func_8001AAA0(0x52) != 0; - } - - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185784(void) { - return func_8001AAA0(0x56) != 0; - } - - -extern s32 func_80184868(void); - s32 func_801857A4(void) { - return func_80184868() != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801857C4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801857E4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185858); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801858D4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018597C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801859B0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185A0C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185B44); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80185EF8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801863B8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018655C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801867F8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80186A74); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80186C4C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187090); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187300); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801874C0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187884); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187A98); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187CA8); - - -extern void (*D_80191890[])(void); - -void func_80187D80(void *a0) { - D_80191890[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187DBC); - -DEFINE_func_80187E28() /* dedup: shared engine-core @0x80187E28 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187E3C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187EA8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80187EE8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801880F8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188118); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188168); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801881CC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188290); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188350); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801883AC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188404); - -DEFINE_func_80188470() /* dedup: shared engine-core @0x80188470 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188478); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018858C); - - -extern void (*D_801918B0[])(void); - -void func_80188634(void *a0) { - D_801918B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188670); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188828); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801889B4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188A80); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188B94); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188C0C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188C60); - - -s32 func_80188CA0(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x6; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188CB4); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80188D64(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x8); - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188D84); - -extern s32 func_8013CAE8(void); - void func_80188DA4(void) { - func_8013CAE8(); - } - - - -extern void (*D_80191B84[])(void); - -void func_80188DC4(void *a0) { - D_80191B84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188E00); - -DEFINE_func_80188F18() /* dedup: shared engine-core @0x80188F18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188F28); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188F80); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80188FB4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189050); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801890B8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801890D8); - -DEFINE_func_801890F8() /* dedup: shared engine-core @0x801890F8 (src/shared) */ - -DEFINE_func_80189104() /* dedup: shared engine-core @0x80189104 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189110); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80189160(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x87C, 0); - } - - -DEFINE_func_8018918C() /* dedup: shared engine-core @0x8018918C (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_801891E8(u8 *a0); -extern void (*D_80191BD4[])(int); - -void func_8018919C(int param_1) -{ - ((void (*)(void))func_801891E8)(); - D_80191BD4[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801891E8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189238); - -DEFINE_func_801892D4() /* dedup: shared engine-core @0x801892D4 (src/shared) */ - -DEFINE_func_801892DC() /* dedup: shared engine-core @0x801892DC (src/shared) */ - -DEFINE_func_801892E4() /* dedup: shared engine-core @0x801892E4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189310); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801893BC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018942C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801894BC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018950C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801895BC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189630); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189680); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018973C); - -extern s32 func_80189110(void); - void func_801897A4(void) { - func_80189110(); - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801897C4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189824); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801898BC); - - -extern void (*D_80191C0C[])(void); - -void func_80189970(void *a0) { - D_80191C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_801899AC); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(int, int); -extern int D_80191BFC; - -void func_801899F4(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - func_8001C214(v0, 0); - *(int *)(param_1 + 0x58) = (int)&D_80191BFC; - *(short *)(param_1 + 0x5c) = 0x80; - *(unsigned short *)(param_1 + 2) += 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189A60); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189AC4); - - -extern void (*D_801E3298[])(void); - -void func_80189B3C(void *a0) { - D_801E3298[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189B78); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189C4C); - -DEFINE_func_80189C74() /* dedup: shared engine-core @0x80189C74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189C7C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189DC8); - - -extern void func_8012C218(void *a0); - s32 func_80189EE8(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189F14); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189F24); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189F34); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80189F74(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189FA8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_80189FCC); - - -extern void (*D_801E32C0[])(void); - -void func_8018A030(void *a0) { - D_801E32C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A06C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A0F4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A1B4); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A224); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A31C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A390); - - -extern void (*D_801E3A24[])(void); - -void func_8018A5B0(void *a0) { - D_801E3A24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A5EC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A680); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A6A4); - - -extern s16 D_801EADE4; - extern s16 D_801EADE6; - extern s16 D_801EADE8; - extern s16 D_801EADEA; - void func_8018A744(s32 arg0, s32 arg1, s32 arg2) { - D_801EADE4 = *(u16 *)((s32)arg0 + 0x0); - D_801EADE6 = *(u16 *)((s32)arg0 + 0x2); - D_801EADE8 = arg1; - D_801EADEA = arg2; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A774); - -extern s16 D_801EADEA; - void func_8018A7EC(s32 arg0) { - M2C_FIELD(&D_801EADEA, s16 *, 0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A808); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A860); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A934); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A970); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018A9BC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AA98); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AD5C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AD80); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018ADA8); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AE30); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AE9C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AF0C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AF84); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018AFD0); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018B0EC); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018B128); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801734BC", func_8018B23C); - diff --git a/src/ov_SC03_014/ov_SC03_014_jr_80178D40.c b/src/ov_SC03_014/ov_SC03_014_jr_80178D40.c new file mode 100644 index 000000000..ad67879c5 --- /dev/null +++ b/src/ov_SC03_014/ov_SC03_014_jr_80178D40.c @@ -0,0 +1,5167 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018E754[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E9B08; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018E748[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018E78C[]; +extern unsigned short D_8018E794[]; +extern unsigned short D_8018E79C[]; +extern unsigned char D_801E9B10[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E9B08; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018E7A4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E9C44; +extern M2C_UNK D_801E9C48; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9BD0; +extern void (*D_8018E7D4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E9C4C[]; +extern u8 D_801E9C54[]; +extern u8 D_801E9C04[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018E7DC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018E7F8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018E800[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E868[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E80C; +extern u8 D_8018E818; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018E89C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018E8A4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018E8F8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018E92C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018E91C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018E948; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E9C0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E9C8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E9D0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E9D8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E9E0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E9E8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E9F4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018EA00[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018EA0C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018EA1C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018EA2C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018EA34[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018EA3C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018EA44[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018EA4C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018EA54[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018EA5C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018EA64[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018EA6C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018EA74[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018EA7C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018EA84[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018EA8C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018EA94[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018EA9C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018EAA4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018EAAC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018EAB4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018EABC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018EAC4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018EACC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018EAD4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018EADC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018EB20[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018EAE4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018EB50[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018EB8C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018EBE4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018EBF4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018EBFC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018ED64[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018ED70[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E9014; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EAFC8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EA388; +extern short D_801EB03C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EB03C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EB03C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EA388 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EB03C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EAF98 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EAF98 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EB03C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EB03C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EA7E4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EA38C; + extern s32 D_801EA7A0; + extern s16 D_801EA7A4; + extern s16 D_801EA7A8; + extern s16 D_801EA7AC; + extern s16 D_801EA7B0; + extern s32 D_801EA7B8; + extern s32 D_801EA7BC; + extern s32 D_801EA7CC; + extern s16 D_801EA7D0; + extern s16 D_801EA7D4; + extern s32 D_801EA7D8; + extern s32 D_801EA7E0; + extern s32 D_801EA7E4[10]; + extern s32 D_801EAEE0; + extern s16 D_801EAF98; + extern s32 D_801EAFC4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EAF98; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EA7AC, D_801EA7B0 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 2; + break; + case 0: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EA7A4, D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EAEE0 != 0) { + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EA7A4, D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + } else { + (*(s16*)&D_801EB03C) = 3; + } + break; + case 0x32: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EA7A4, + D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + break; + case 2: + func_80179B28(D_801EA7A0); + if (D_801EA7B8 != 0) { + D_801EA388 = D_801EA7B8; + D_801EA7B8 = 0; + (*(s16*)&D_801EB03C) = 3; + return; + } + (*(s16*)&D_801EB03C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1B: + D_801EA7D8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EB03C) = 4; + D_801EA38C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EB03C) = 5; + D_801EA7CC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EA7CC = (s32)func_8017A3B0; + (*(s16*)&D_801EB03C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x24: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB03C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB03C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EB03C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4E: + D_801EA7E0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x2B: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EAFC4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x34: + (*(s16*)&D_801EB03C) = 3; + D_801EA388 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EA7B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EB03C) = 3; + D_801EA388 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EB03C) = 3; + D_801EA388 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EA388 = *(s32 *)(D_801EA388 + 4); + return; + case 0x37: + (*(s16*)&D_801EB03C) = 3; + D_801EA7A4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EA7A8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EB03C) = 3; + D_801EA7AC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EA7B0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EB03C) = 3; + D_801EA7A4 = w1; + D_801EA7A8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EB03C) = 3; + D_801EA7AC = w2; + D_801EA7B0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x43: + D_801EA7CC = (s32)func_8017A3D8; + D_801EA7D4 = 0; + (*(s16*)&D_801EB03C) = 5; + D_801EA7D0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EA7E4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EB03C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EA7E4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EB03C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EA7E4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EB03C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EA7E4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EB03C) = 3; + break; + default: + break; + } +Lend: + D_801EA388 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EA7B4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EA7B4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EA7B4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EA7B4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EA7DC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EA7DC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EA798; + +s32 func_8017A3B0(void) { + switch (D_801EA798) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EA814; + extern s16 D_801EA816; + extern s16 D_801EA818; + extern s16 D_801EA80C; + extern s16 D_801EA80E; + extern s16 D_801EA810; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EA814, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EA816, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EA818, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EA80C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EA80E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EA810, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EA79C; +extern u16 D_801EA81C; +extern u16 D_801EA81E; +extern u16 D_801EA820; +extern s16 D_801EAFC8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EAFC8 = 0; + D_801EA79C = 0; + D_801EA81C = D_80126B5E; + D_801EA81E = D_80126B62; + D_801EA820 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EEAC[]; + extern s16 D_801EA814; + extern s16 D_801EA80C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EA814; + s16 *p78C = &D_801EA80C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EAFC8 = 1; + D_801EA79C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EA7BC; + extern SV4_8017B368 D_801EA7C4; + extern s16 D_801EA814; + extern s16 D_801EA80C; + extern u16 D_8018EEAC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EA7BC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EA7C4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EA814) = loc0; + (*(SV4_8017B368 *)&D_801EA80C) = loc1; + D_801EAFC8 = 1; + D_801EA79C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EEAC[]; + extern s16 D_801EA814; + extern s16 D_801EA816; + extern s16 D_801EA818; + extern s16 D_801EA80C; + extern s16 D_801EA80E; + extern s16 D_801EA810; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EA814; + s16 *p78C = &D_801EA80C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EA816; + v798 = D_801EA818; + v78C = *p78C; + v78E = D_801EA80E; + v790 = D_801EA810; + __asm__ __volatile__(""); + D_801EAFC8 = 1; + D_801EA79C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EA79C; +extern s16 D_801EA814; +extern s16 D_801EA816; +extern s16 D_801EA818; +extern s16 D_801EA80C; +extern s16 D_801EA80E; +extern s16 D_801EA810; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EA79C = 0; + D_801EA814 = (s16) D_80114F30; + D_801EA816 = (s16) D_80114F34; + D_801EA818 = (s16) D_80114F38; + D_801EA80C = (s16) D_80114F24; + D_801EA80E = (s16) D_80114F28; + D_801EA810 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EA82C; +extern s16 D_801EA82E; +extern s16 D_801EA830; +extern s16 D_801EA834; +extern s16 D_801EA836; +extern s16 D_801EA838; + +void func_8017B824(void) { + D_801EA82C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EA82E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EA830 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EA834 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EA836 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EA838 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EA82C; +extern s16 D_801EA82E; +extern s16 D_801EA830; +extern s16 D_801EA834; +extern s16 D_801EA836; +extern s16 D_801EA838; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EA82C; + D_80114F34 = D_801EA82E; + D_80114F38 = D_801EA830; + D_80114F24 = D_801EA834; + D_80114F28 = D_801EA836; + D_80114F2C = D_801EA838; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EA814), src[8..15] -> (*(S8_8017B8E8 *)&D_801EA80C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EA814) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EA80C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EA81C; +extern u16 D_801EA81E; +extern u16 D_801EA820; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EA79C; +extern short D_801EA824; +extern short D_801EA826; +extern short D_801EA828; +extern s16 D_801EA814; +extern s16 D_801EA816; +extern s16 D_801EA818; +extern s16 D_801EA80C; +extern s16 D_801EA80E; +extern s16 D_801EA810; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EA81C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EA81E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EA820); + (*(s16 *)&D_801EA824) = buf[0]; + (*(s16 *)&D_801EA826) = buf[1]; + (*(s16 *)&D_801EA828) = buf[2]; + D_801EA814 = D_80114F30 + buf[0]; + D_801EA79C = 0; + D_801EA816 = D_80114F34 + buf[1]; + D_801EA818 = D_80114F38 + buf[2]; + D_801EA80C = D_80114F24 + buf[0]; + D_801EA80E = D_80114F28 + buf[1]; + D_801EA810 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EA7BC; +extern SV4 D_801EA7C4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EA7C4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EA7BC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EA7C4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EA7C4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EA7BC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EA7C4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EA7E4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EA7E4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EA79C; +extern s16 D_801EAFC8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EA79C = D_801EA79C + 1; + if (D_801EA79C >= 0x1F) { + D_801EAFC8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EA79C; +extern s16 D_801EAFC8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EA79C = D_801EA79C + 1; + if (0x18 < D_801EA79C) { + func_8012A4BC(); + D_801EAFC8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EA79C; +extern void (*D_801EA7E0)(void); +extern short D_801EA824; +extern short D_801EA826; +extern short D_801EA828; +extern s16 D_801EAFC8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EA79C = D_801EA79C + 1; + if (D_801EA79C >= 0x19) { + if (D_801EA7E0 != 0) { + (*D_801EA7E0)(); + } else { + D_80114F30 = D_80114F30 + D_801EA824; + D_80114F34 = D_80114F34 + D_801EA826; + D_80114F38 = D_80114F38 + D_801EA828; + D_80114F24 = D_80114F24 + D_801EA824; + D_80114F28 = D_80114F28 + D_801EA826; + D_80114F2C = D_80114F2C + D_801EA828; + func_8012A4BC(); + } + D_801EAFC8 = 0; + } +} + + + +extern void (*D_8018EF4C[])(void); + +void func_8017BE60(void *a0) { + D_8018EF4C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018EF58[])(void); + +void func_8017BEE4(void *a0) { + D_8018EF58[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017BFA0); + + +extern void (*D_8018EF64[])(void); + +void func_8017BFC8(void *a0) { + D_8018EF64[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C084); + + +extern void (*D_8018F024[])(void); + +void func_8017C0C8(void *a0) { + D_8018F024[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C104); + +extern void func_8017C154(void); + void func_8017C12C(void) { + func_8017C154(); + } + + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C624); + + +extern void (*D_8018F064[])(void); + +void func_8017C664(void *a0) { + D_8018F064[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CE10); + + +extern void (*D_8018F084[])(void); + +void func_8017CE54(void *a0) { + D_8018F084[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D098); + + +extern void (*D_8018F094[])(void); + +void func_8017D0DC(void *a0) { + D_8018F094[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018F0A0[])(void); + +void func_8017D63C(void *a0) { + D_8018F0A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DA98); + + +extern void (*D_8018F224[])(void); + +void func_8017DB00(void *a0) { + D_8018F224[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DBC4); + +extern void func_80171A1C(u8 *a0); + void func_8017DC28(s32 *param_1) { + *(s32 *)((char *)param_1 + 0x200) = 1; + ((void (*)(void))func_80171A1C)(); + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017EB7C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8017FA5C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", listCdBuffer); + + +extern void (*D_8018F500[])(void); + +void func_801805BC(void *a0) { + D_8018F500[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801805F8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180638); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801806B4); + +DEFINE_func_80180714() /* dedup: shared engine-core @0x80180714 (src/shared) */ + +DEFINE_func_8018071C() /* dedup: shared engine-core @0x8018071C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180744); + +extern s16 D_80126B0C; + s32 func_80180760(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180770); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801807D0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018089C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180A68); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180AC4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180B20); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180B84); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180C34); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180CF8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180DB8); + + +extern void (*D_8018F5B0[])(void); + +void func_80180DFC(void *a0) { + D_8018F5B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180E38); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80180FFC); + + +extern void (*D_8018F5B8[])(void); + +void func_80181090(void *a0) { + D_8018F5B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018F5A4; + +void func_801810CC(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018F5A4, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181170); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181304); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181690); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181908); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181A50); + + +extern void (*D_8018F6D0[])(void); + +void func_80181BD0(void *a0) { + D_8018F6D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181C0C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181C58); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181D4C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181DCC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181E80); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181EEC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181F78); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181F98); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80181FEC); + + +extern void (*D_8018F728[])(void); + +void func_80182028(void *a0) { + D_8018F728[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182064); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801820B4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182110); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182194); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801822FC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182348); + + +extern void (*D_8018F73C[])(void); + +void func_80182654(void *a0) { + D_8018F73C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182690); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801826D0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801827CC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801828A0); + + +extern void (*D_8018F750[])(void); + +void func_801828F4(void *a0) { + D_8018F750[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182930); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801829E4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182A40); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182BB0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182BD4); + + + +extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_80182BFC(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_80182C28)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182C28); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182CB0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182D04); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182D5C); + + +extern void (*D_8018F7AC[])(void); + +void func_80182E08(void *a0) { + D_8018F7AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80182E44); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183130); + +DEFINE_func_801835C4() /* dedup: shared engine-core @0x801835C4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183600); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80183644(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183668); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_801836A8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183724); + + +extern void (*D_8018F818[])(void); + +void func_80183744(void *a0) { + D_8018F818[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183780); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_801837C0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018383C); + +DEFINE_func_8018385C() /* dedup: shared engine-core @0x8018385C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183898); + +DEFINE_func_80183930() /* dedup: shared engine-core @0x80183930 (src/shared) */ + +DEFINE_func_80183958() /* dedup: shared engine-core @0x80183958 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183980); + + +extern void (*D_8018F850[])(void); + +void func_80183A18(void *a0) { + D_8018F850[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183A54); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183B58); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183CF0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183D50); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80183F28); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184058); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184264); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801842E0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184354); + +DEFINE_func_80184440() /* dedup: shared engine-core @0x80184440 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184474); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184538); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801846E4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018473C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184794); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801847EC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184868); + +DEFINE_func_801848E4() /* dedup: shared engine-core @0x801848E4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184920); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184A08); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184D1C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184DA4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184DF8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184E4C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80184F14); + + +extern void (*D_80190008[])(void); + +void func_80185144(void *a0) { + D_80190008[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185180); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185380); + +DEFINE_func_8018553C() /* dedup: shared engine-core @0x8018553C (src/shared) */ + + + +extern s32 D_801EAEE4; + s32 func_80185578(void) { + return 0x2 - D_801EAEE4; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018558C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801855A0); + +DEFINE_func_801856B4() /* dedup: shared engine-core @0x801856B4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801856C4); + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185744(void) { + return func_8001AAA0(0x51) != 0; + } + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185764(void) { + return func_8001AAA0(0x52) != 0; + } + + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185784(void) { + return func_8001AAA0(0x56) != 0; + } + + +extern s32 func_80184868(void); + s32 func_801857A4(void) { + return func_80184868() != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801857C4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801857E4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185858); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801858D4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018597C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801859B0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185A0C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185B44); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80185EF8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801863B8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018655C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801867F8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80186A74); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80186C4C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187090); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187300); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801874C0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187884); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187A98); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187CA8); + + +extern void (*D_80191890[])(void); + +void func_80187D80(void *a0) { + D_80191890[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187DBC); + +DEFINE_func_80187E28() /* dedup: shared engine-core @0x80187E28 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187E3C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187EA8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80187EE8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801880F8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188118); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188168); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801881CC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188290); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188350); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801883AC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188404); + +DEFINE_func_80188470() /* dedup: shared engine-core @0x80188470 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188478); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018858C); + + +extern void (*D_801918B0[])(void); + +void func_80188634(void *a0) { + D_801918B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188670); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188828); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801889B4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188A80); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188B94); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188C0C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188C60); + + +s32 func_80188CA0(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x6; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188CB4); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80188D64(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x8); + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188D84); + +extern s32 func_8013CAE8(void); + void func_80188DA4(void) { + func_8013CAE8(); + } + + + +extern void (*D_80191B84[])(void); + +void func_80188DC4(void *a0) { + D_80191B84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188E00); + +DEFINE_func_80188F18() /* dedup: shared engine-core @0x80188F18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188F28); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188F80); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80188FB4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189050); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801890B8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801890D8); + +DEFINE_func_801890F8() /* dedup: shared engine-core @0x801890F8 (src/shared) */ + +DEFINE_func_80189104() /* dedup: shared engine-core @0x80189104 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189110); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80189160(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x87C, 0); + } + + +DEFINE_func_8018918C() /* dedup: shared engine-core @0x8018918C (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_801891E8(u8 *a0); +extern void (*D_80191BD4[])(int); + +void func_8018919C(int param_1) +{ + ((void (*)(void))func_801891E8)(); + D_80191BD4[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801891E8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189238); + +DEFINE_func_801892D4() /* dedup: shared engine-core @0x801892D4 (src/shared) */ + +DEFINE_func_801892DC() /* dedup: shared engine-core @0x801892DC (src/shared) */ + +DEFINE_func_801892E4() /* dedup: shared engine-core @0x801892E4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189310); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801893BC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018942C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801894BC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018950C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801895BC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189630); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189680); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018973C); + +extern s32 func_80189110(void); + void func_801897A4(void) { + func_80189110(); + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801897C4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189824); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801898BC); + + +extern void (*D_80191C0C[])(void); + +void func_80189970(void *a0) { + D_80191C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_801899AC); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(int, int); +extern int D_80191BFC; + +void func_801899F4(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + func_8001C214(v0, 0); + *(int *)(param_1 + 0x58) = (int)&D_80191BFC; + *(short *)(param_1 + 0x5c) = 0x80; + *(unsigned short *)(param_1 + 2) += 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189A60); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189AC4); + + +extern void (*D_801E3298[])(void); + +void func_80189B3C(void *a0) { + D_801E3298[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189B78); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189C4C); + +DEFINE_func_80189C74() /* dedup: shared engine-core @0x80189C74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189C7C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189DC8); + + +extern void func_8012C218(void *a0); + s32 func_80189EE8(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189F14); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189F24); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189F34); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80189F74(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189FA8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_80189FCC); + + +extern void (*D_801E32C0[])(void); + +void func_8018A030(void *a0) { + D_801E32C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A06C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A0F4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A1B4); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A224); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A31C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A390); + + +extern void (*D_801E3A24[])(void); + +void func_8018A5B0(void *a0) { + D_801E3A24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A5EC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A680); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A6A4); + + +extern s16 D_801EADE4; + extern s16 D_801EADE6; + extern s16 D_801EADE8; + extern s16 D_801EADEA; + void func_8018A744(s32 arg0, s32 arg1, s32 arg2) { + D_801EADE4 = *(u16 *)((s32)arg0 + 0x0); + D_801EADE6 = *(u16 *)((s32)arg0 + 0x2); + D_801EADE8 = arg1; + D_801EADEA = arg2; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A774); + +extern s16 D_801EADEA; + void func_8018A7EC(s32 arg0) { + M2C_FIELD(&D_801EADEA, s16 *, 0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A808); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A860); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A934); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A970); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018A9BC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AA98); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AD5C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AD80); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018ADA8); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AE30); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AE9C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AF0C); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AF84); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018AFD0); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018B0EC); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018B128); + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_80178D40", func_8018B23C); + + diff --git a/src/ov_SC03_015/ov_SC03_015_jr_801734BC.c b/src/ov_SC03_015/ov_SC03_015_jr_801734BC.c index 0681cf798..e71dc6e0a 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_801734BC.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_801734BC.c @@ -3105,1704 +3105,3 @@ void func_80178D18(void) { D_801EB03C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EA7B4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EA7B4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EA7B4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EA7B4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EA7DC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EA7DC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EA798; - -s32 func_8017A3B0(void) { - switch (D_801EA798) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EA814; - extern s16 D_801EA816; - extern s16 D_801EA818; - extern s16 D_801EA80C; - extern s16 D_801EA80E; - extern s16 D_801EA810; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EA814, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EA816, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EA818, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EA80C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EA80E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EA810, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EA79C; -extern u16 D_801EA81C; -extern u16 D_801EA81E; -extern u16 D_801EA820; -extern s16 D_801EAFC8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EAFC8 = 0; - D_801EA79C = 0; - D_801EA81C = D_80126B5E; - D_801EA81E = D_80126B62; - D_801EA820 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EEAC[]; - extern s16 D_801EA814; - extern s16 D_801EA80C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EA814; - s16 *p78C = &D_801EA80C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EAFC8 = 1; - D_801EA79C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EA7BC; - extern SV4_8017B368 D_801EA7C4; - extern s16 D_801EA814; - extern s16 D_801EA80C; - extern u16 D_8018EEAC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EA7BC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EA7C4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EA814) = loc0; - (*(SV4_8017B368 *)&D_801EA80C) = loc1; - D_801EAFC8 = 1; - D_801EA79C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018EEAC[]; - extern s16 D_801EA814; - extern s16 D_801EA816; - extern s16 D_801EA818; - extern s16 D_801EA80C; - extern s16 D_801EA80E; - extern s16 D_801EA810; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EA814; - s16 *p78C = &D_801EA80C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EA816; - v798 = D_801EA818; - v78C = *p78C; - v78E = D_801EA80E; - v790 = D_801EA810; - __asm__ __volatile__(""); - D_801EAFC8 = 1; - D_801EA79C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EA79C; -extern s16 D_801EA814; -extern s16 D_801EA816; -extern s16 D_801EA818; -extern s16 D_801EA80C; -extern s16 D_801EA80E; -extern s16 D_801EA810; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EA79C = 0; - D_801EA814 = (s16) D_80114F30; - D_801EA816 = (s16) D_80114F34; - D_801EA818 = (s16) D_80114F38; - D_801EA80C = (s16) D_80114F24; - D_801EA80E = (s16) D_80114F28; - D_801EA810 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EA82C; -extern s16 D_801EA82E; -extern s16 D_801EA830; -extern s16 D_801EA834; -extern s16 D_801EA836; -extern s16 D_801EA838; - -void func_8017B824(void) { - D_801EA82C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EA82E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EA830 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EA834 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EA836 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EA838 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EA82C; -extern s16 D_801EA82E; -extern s16 D_801EA830; -extern s16 D_801EA834; -extern s16 D_801EA836; -extern s16 D_801EA838; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EA82C; - D_80114F34 = D_801EA82E; - D_80114F38 = D_801EA830; - D_80114F24 = D_801EA834; - D_80114F28 = D_801EA836; - D_80114F2C = D_801EA838; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EA814), src[8..15] -> (*(S8_8017B8E8 *)&D_801EA80C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EA814) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EA80C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EA81C; -extern u16 D_801EA81E; -extern u16 D_801EA820; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EA79C; -extern short D_801EA824; -extern short D_801EA826; -extern short D_801EA828; -extern s16 D_801EA814; -extern s16 D_801EA816; -extern s16 D_801EA818; -extern s16 D_801EA80C; -extern s16 D_801EA80E; -extern s16 D_801EA810; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EA81C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EA81E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EA820); - (*(s16 *)&D_801EA824) = buf[0]; - (*(s16 *)&D_801EA826) = buf[1]; - (*(s16 *)&D_801EA828) = buf[2]; - D_801EA814 = D_80114F30 + buf[0]; - D_801EA79C = 0; - D_801EA816 = D_80114F34 + buf[1]; - D_801EA818 = D_80114F38 + buf[2]; - D_801EA80C = D_80114F24 + buf[0]; - D_801EA80E = D_80114F28 + buf[1]; - D_801EA810 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EA7BC; -extern SV4 D_801EA7C4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EA7C4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EA7BC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EA7C4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EA7C4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EA7BC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EA7C4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EA7E4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EA7E4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EA79C; -extern s16 D_801EAFC8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EA79C = D_801EA79C + 1; - if (D_801EA79C >= 0x1F) { - D_801EAFC8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EA79C; -extern s16 D_801EAFC8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EA79C = D_801EA79C + 1; - if (0x18 < D_801EA79C) { - func_8012A4BC(); - D_801EAFC8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EA79C; -extern void (*D_801EA7E0)(void); -extern short D_801EA824; -extern short D_801EA826; -extern short D_801EA828; -extern s16 D_801EAFC8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EA79C = D_801EA79C + 1; - if (D_801EA79C >= 0x19) { - if (D_801EA7E0 != 0) { - (*D_801EA7E0)(); - } else { - D_80114F30 = D_80114F30 + D_801EA824; - D_80114F34 = D_80114F34 + D_801EA826; - D_80114F38 = D_80114F38 + D_801EA828; - D_80114F24 = D_80114F24 + D_801EA824; - D_80114F28 = D_80114F28 + D_801EA826; - D_80114F2C = D_80114F2C + D_801EA828; - func_8012A4BC(); - } - D_801EAFC8 = 0; - } -} - - - -extern void (*D_8018EF4C[])(void); - -void func_8017BE60(void *a0) { - D_8018EF4C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018EF58[])(void); - -void func_8017BEE4(void *a0) { - D_8018EF58[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -extern void func_80174684(void *); - extern s32 func_8017BFC8; - s32 func_8017BFA0(void) -{ - func_80174684(&func_8017BFC8); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017BFC8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C084); - - -extern void (*D_8018F024[])(void); - -void func_8017C0C8(void *a0) { - D_8018F024[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C104); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C12C); - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C624); - - -extern void (*D_8018F064[])(void); - -void func_8017C664(void *a0) { - D_8018F064[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CE10); - - -extern void (*D_8018F084[])(void); - -void func_8017CE54(void *a0) { - D_8018F084[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D098); - - -extern void (*D_8018F094[])(void); - -void func_8017D0DC(void *a0) { - D_8018F094[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018F0A0[])(void); - -void func_8017D63C(void *a0) { - D_8018F0A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DA98); - - -extern void (*D_8018F224[])(void); - -void func_8017DB00(void *a0) { - D_8018F224[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DC28); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017EB7C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8017FA5C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", listCdBuffer); - - -extern void (*D_8018F500[])(void); - -void func_801805BC(void *a0) { - D_8018F500[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801805F8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180638); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801806B4); - -DEFINE_func_80180714() /* dedup: shared engine-core @0x80180714 (src/shared) */ - -DEFINE_func_8018071C() /* dedup: shared engine-core @0x8018071C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180744); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180760); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180770); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801807D0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018089C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180A68); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180AC4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180B20); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180B84); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180C34); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180CF8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180DB8); - - -extern void (*D_8018F5B0[])(void); - -void func_80180DFC(void *a0) { - D_8018F5B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180E38); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80180FFC); - - -extern void (*D_8018F5B8[])(void); - -void func_80181090(void *a0) { - D_8018F5B8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018F5A4; - -void func_801810CC(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018F5A4, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181170); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181304); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181690); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181908); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181A50); - - -extern void (*D_8018F6D0[])(void); - -void func_80181BD0(void *a0) { - D_8018F6D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181C0C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181C58); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181D4C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181DCC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181E80); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181EEC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181F78); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181F98); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80181FEC); - - -extern void (*D_8018F728[])(void); - -void func_80182028(void *a0) { - D_8018F728[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182064); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801820B4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182110); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182194); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801822FC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182348); - - -extern void (*D_8018F73C[])(void); - -void func_80182654(void *a0) { - D_8018F73C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182690); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801826D0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801827CC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801828A0); - - -extern void (*D_8018F750[])(void); - -void func_801828F4(void *a0) { - D_8018F750[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182930); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801829E4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182A40); - -extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_80182BB0(s32 arg0, s32 arg1) { - func_80182C28(arg0, arg1, 0xC, 0); - } - - -extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_80182BD4(s32 arg0, s32 arg1, s16 arg2) { - func_80182C28(arg0, arg1, arg2, 0); - } - - - - -extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_80182BFC(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_80182C28)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182C28); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182CB0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182D04); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182D5C); - - -extern void (*D_8018F7AC[])(void); - -void func_80182E08(void *a0) { - D_8018F7AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80182E44); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183130); - -DEFINE_func_801835C4() /* dedup: shared engine-core @0x801835C4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183600); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80183644(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183668); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_801836A8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183724); - - -extern void (*D_8018F818[])(void); - -void func_80183744(void *a0) { - D_8018F818[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183780); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_801837C0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8018383C(void) { - func_800D1EBC(); - } - - -DEFINE_func_8018385C() /* dedup: shared engine-core @0x8018385C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183898); - -DEFINE_func_80183930() /* dedup: shared engine-core @0x80183930 (src/shared) */ - - -DEFINE_func_80183958() /* dedup: shared engine-core @0x80183958 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183980); - - -extern void (*D_8018F850[])(void); - -void func_80183A18(void *a0) { - D_8018F850[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183A54); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183B58); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183CF0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183D50); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80183F28); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184058); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184264); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801842E0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184354); - -DEFINE_func_80184440() /* dedup: shared engine-core @0x80184440 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184474); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184538); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801846E4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018473C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184794); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801847EC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184868); - -DEFINE_func_801848E4() /* dedup: shared engine-core @0x801848E4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184920); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184A08); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184D1C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184DA4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184DF8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184E4C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80184F14); - - -extern void (*D_80190008[])(void); - -void func_80185144(void *a0) { - D_80190008[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185180); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185380); - -DEFINE_func_8018553C() /* dedup: shared engine-core @0x8018553C (src/shared) */ - - -extern s32 D_801EAEE4; - s32 func_80185578(void) { - return 0x2 - D_801EAEE4; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018558C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801855A0); - -DEFINE_func_801856B4() /* dedup: shared engine-core @0x801856B4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801856C4); - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185744(void) { - return func_8001AAA0(0x51) != 0; - } - - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185764(void) { - return func_8001AAA0(0x52) != 0; - } - - -extern s32 func_8001AAA0(s32 arg); - s32 func_80185784(void) { - return func_8001AAA0(0x56) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801857A4); - -extern void func_800D0C48(s32 arg); - void func_801857C4(void) { - func_800D0C48(0x1); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801857E4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185858); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801858D4); - -extern s32 func_80184868(s32 arg); - void func_8018597C(void *a0) { - if (func_80184868((s32)a0)) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801859B0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185A0C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185B44); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80185EF8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801863B8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018655C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801867F8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80186A74); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80186C4C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187090); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187300); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801874C0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187884); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187A98); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187CA8); - - -extern void (*D_80191890[])(void); - -void func_80187D80(void *a0) { - D_80191890[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187DBC); - -DEFINE_func_80187E28() /* dedup: shared engine-core @0x80187E28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187E3C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187EA8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80187EE8); - -extern void func_80131E00(struct S80131E00 *a0, s32 a1); - void func_801880F8(void *arg0) { - ((void (*)(s32, s32))func_80131E00)((s32)arg0, 0x11); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188118); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188168); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801881CC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188290); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188350); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801883AC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188404); - -DEFINE_func_80188470() /* dedup: shared engine-core @0x80188470 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188478); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018858C); - - -extern void (*D_801918B0[])(void); - -void func_80188634(void *a0) { - D_801918B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188670); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188828); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801889B4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188A80); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188B94); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188C0C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188C60); - - -s32 func_80188CA0(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x6; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188CB4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188D64); - -extern s32 func_8018473C(void); - void func_80188D84(void) { - func_8018473C(); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188DA4); - - -extern void (*D_80191B84[])(void); - -void func_80188DC4(void *a0) { - D_80191B84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188E00); - -DEFINE_func_80188F18() /* dedup: shared engine-core @0x80188F18 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188F28); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188F80); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80188FB4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189050); - -extern s32 func_8017BEBC(void); - void func_801890B8(void) { - func_8017BEBC(); - } - - -extern s32 func_8017BFA0(void); - void func_801890D8(void) { - func_8017BFA0(); - } - - -DEFINE_func_801890F8() /* dedup: shared engine-core @0x801890F8 (src/shared) */ - - -DEFINE_func_80189104() /* dedup: shared engine-core @0x80189104 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189110); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80189160(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x87C, 0); - } - - -DEFINE_func_8018918C() /* dedup: shared engine-core @0x8018918C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_801891E8(u8 *a0); -extern void (*D_80191BD4[])(int); - -void func_8018919C(int param_1) -{ - ((void (*)(void))func_801891E8)(); - D_80191BD4[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801891E8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189238); - -DEFINE_func_801892D4() /* dedup: shared engine-core @0x801892D4 (src/shared) */ - -DEFINE_func_801892DC() /* dedup: shared engine-core @0x801892DC (src/shared) */ - -DEFINE_func_801892E4() /* dedup: shared engine-core @0x801892E4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189310); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801893BC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018942C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801894BC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018950C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801895BC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189630); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189680); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018973C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801897A4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801897C4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189824); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801898BC); - - -extern void (*D_80191C0C[])(void); - -void func_80189970(void *a0) { - D_80191C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_801899AC); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(int, int); -extern int D_80191BFC; - -void func_801899F4(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - func_8001C214(v0, 0); - *(int *)(param_1 + 0x58) = (int)&D_80191BFC; - *(short *)(param_1 + 0x5c) = 0x80; - *(unsigned short *)(param_1 + 2) += 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189A60); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189AC4); - - -extern void (*D_801E3298[])(void); - -void func_80189B3C(void *a0) { - D_801E3298[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189B78); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189C4C); - -DEFINE_func_80189C74() /* dedup: shared engine-core @0x80189C74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189C7C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189DC8); - -extern void func_8012C218(void *a0); - void func_80189EE8(void *arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189F14); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189F24); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189F34); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80189F74(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -extern s16 func_80174764(void); - s32 func_80189FA8(void) { - return ((u32)(((s32 (*)(void))func_80174764)() ^ 1)) < 1; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_80189FCC); - - -extern void (*D_801E32C0[])(void); - -void func_8018A030(void *a0) { - D_801E32C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A06C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A0F4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A1B4); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A224); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A31C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A390); - - -extern void (*D_801E3A24[])(void); - -void func_8018A5B0(void *a0) { - D_801E3A24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A5EC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A680); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A6A4); - - -extern s16 D_801EADE4; - extern s16 D_801EADE6; - extern s16 D_801EADE8; - extern s16 D_801EADEA; - void func_8018A744(s32 arg0, s32 arg1, s32 arg2) { - D_801EADE4 = *(u16 *)((s32)arg0 + 0x0); - D_801EADE6 = *(u16 *)((s32)arg0 + 0x2); - D_801EADE8 = arg1; - D_801EADEA = arg2; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A774); - - -extern s16 D_801EADEA; - void func_8018A7EC(s32 arg0) { - *(s16 *)((s32)&D_801EADEA + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A808); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A860); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A934); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A970); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018A9BC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AA98); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AD5C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AD80); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018ADA8); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AE30); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AE9C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AF0C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AF84); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018AFD0); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018B0EC); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018B128); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_801734BC", func_8018B23C); - diff --git a/src/ov_SC03_015/ov_SC03_015_jr_80178D40.c b/src/ov_SC03_015/ov_SC03_015_jr_80178D40.c new file mode 100644 index 000000000..d2fd5b9ca --- /dev/null +++ b/src/ov_SC03_015/ov_SC03_015_jr_80178D40.c @@ -0,0 +1,5171 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018E754[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E9B08; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018E748[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018E78C[]; +extern unsigned short D_8018E794[]; +extern unsigned short D_8018E79C[]; +extern unsigned char D_801E9B10[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E9B08; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018E7A4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E9C44; +extern M2C_UNK D_801E9C48; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E9BD0; +extern void (*D_8018E7D4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E9C4C[]; +extern u8 D_801E9C54[]; +extern u8 D_801E9C04[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018E7DC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018E7F8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018E800[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018E868[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E80C; +extern u8 D_8018E818; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018E89C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018E8A4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018E8F8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018E92C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018E91C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018E948; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E9C0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E9C8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E9D0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E9D8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E9E0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E9E8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E9F4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018EA00[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018EA0C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018EA1C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018EA2C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018EA34[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018EA3C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018EA44[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018EA4C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018EA54[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018EA5C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018EA64[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018EA6C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018EA74[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018EA7C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018EA84[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018EA8C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018EA94[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018EA9C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018EAA4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018EAAC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018EAB4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018EABC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018EAC4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018EACC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018EAD4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018EADC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018EB20[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018EAE4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018EB50[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018EB8C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018EBE4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018EBF4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018EBFC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018ED64[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018ED70[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E9014; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EAFC8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EA388; +extern short D_801EB03C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EB03C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EB03C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EA388 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EB03C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EAF98 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EAF98 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EB03C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EB03C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EA7E4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EA38C; + extern s32 D_801EA7A0; + extern s16 D_801EA7A4; + extern s16 D_801EA7A8; + extern s16 D_801EA7AC; + extern s16 D_801EA7B0; + extern s32 D_801EA7B8; + extern s32 D_801EA7BC; + extern s32 D_801EA7CC; + extern s16 D_801EA7D0; + extern s16 D_801EA7D4; + extern s32 D_801EA7D8; + extern s32 D_801EA7E0; + extern s32 D_801EA7E4[10]; + extern s32 D_801EAEE0; + extern s16 D_801EAF98; + extern s32 D_801EAFC4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EAF98; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EA7AC, D_801EA7B0 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 2; + break; + case 0: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EA7A4, D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EAEE0 != 0) { + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EA7A4, D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + } else { + (*(s16*)&D_801EB03C) = 3; + } + break; + case 0x32: + func_80179B28(D_801EA7A0); + D_801EA7A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EA7A4, + D_801EA7A8 ? 0x48 : 0x40); + (*(s16*)&D_801EB03C) = 1; + break; + case 2: + func_80179B28(D_801EA7A0); + if (D_801EA7B8 != 0) { + D_801EA388 = D_801EA7B8; + D_801EA7B8 = 0; + (*(s16*)&D_801EB03C) = 3; + return; + } + (*(s16*)&D_801EB03C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EB03C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EB03C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1B: + D_801EA7D8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EB03C) = 4; + D_801EA38C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EB03C) = 5; + D_801EA7CC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EA7CC = (s32)func_8017A3B0; + (*(s16*)&D_801EB03C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x24: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EB03C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EB03C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB03C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EB03C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EB03C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EA7BC); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4E: + D_801EA7E0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x2B: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EB03C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EAFC4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x34: + (*(s16*)&D_801EB03C) = 3; + D_801EA388 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EA7B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EB03C) = 3; + D_801EA388 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EB03C) = 3; + D_801EA388 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EA388 = *(s32 *)(D_801EA388 + 4); + return; + case 0x37: + (*(s16*)&D_801EB03C) = 3; + D_801EA7A4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EA7A8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EB03C) = 3; + D_801EA7AC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EA7B0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EB03C) = 3; + D_801EA7A4 = w1; + D_801EA7A8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EB03C) = 3; + D_801EA7AC = w2; + D_801EA7B0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x43: + D_801EA7CC = (s32)func_8017A3D8; + D_801EA7D4 = 0; + (*(s16*)&D_801EB03C) = 5; + D_801EA7D0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EB03C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EB03C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EA7E4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EB03C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EA7E4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EB03C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EA7E4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EB03C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EA7E4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EB03C) = 3; + break; + default: + break; + } +Lend: + D_801EA388 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EA7B4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EA7B4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EA7B4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EA7B4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EA7DC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EA7DC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EA798; + +s32 func_8017A3B0(void) { + switch (D_801EA798) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EA814; + extern s16 D_801EA816; + extern s16 D_801EA818; + extern s16 D_801EA80C; + extern s16 D_801EA80E; + extern s16 D_801EA810; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EA814, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EA816, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EA818, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EA80C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EA80E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EA810, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EA79C; +extern u16 D_801EA81C; +extern u16 D_801EA81E; +extern u16 D_801EA820; +extern s16 D_801EAFC8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EAFC8 = 0; + D_801EA79C = 0; + D_801EA81C = D_80126B5E; + D_801EA81E = D_80126B62; + D_801EA820 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EEAC[]; + extern s16 D_801EA814; + extern s16 D_801EA80C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EA814; + s16 *p78C = &D_801EA80C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EAFC8 = 1; + D_801EA79C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EA7BC; + extern SV4_8017B368 D_801EA7C4; + extern s16 D_801EA814; + extern s16 D_801EA80C; + extern u16 D_8018EEAC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EA7BC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EA7C4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018EEAC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EA814) = loc0; + (*(SV4_8017B368 *)&D_801EA80C) = loc1; + D_801EAFC8 = 1; + D_801EA79C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018EEAC[]; + extern s16 D_801EA814; + extern s16 D_801EA816; + extern s16 D_801EA818; + extern s16 D_801EA80C; + extern s16 D_801EA80E; + extern s16 D_801EA810; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018EEAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EA814; + s16 *p78C = &D_801EA80C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EA816; + v798 = D_801EA818; + v78C = *p78C; + v78E = D_801EA80E; + v790 = D_801EA810; + __asm__ __volatile__(""); + D_801EAFC8 = 1; + D_801EA79C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EA79C; +extern s16 D_801EA814; +extern s16 D_801EA816; +extern s16 D_801EA818; +extern s16 D_801EA80C; +extern s16 D_801EA80E; +extern s16 D_801EA810; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EA79C = 0; + D_801EA814 = (s16) D_80114F30; + D_801EA816 = (s16) D_80114F34; + D_801EA818 = (s16) D_80114F38; + D_801EA80C = (s16) D_80114F24; + D_801EA80E = (s16) D_80114F28; + D_801EA810 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EA82C; +extern s16 D_801EA82E; +extern s16 D_801EA830; +extern s16 D_801EA834; +extern s16 D_801EA836; +extern s16 D_801EA838; + +void func_8017B824(void) { + D_801EA82C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EA82E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EA830 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EA834 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EA836 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EA838 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EA82C; +extern s16 D_801EA82E; +extern s16 D_801EA830; +extern s16 D_801EA834; +extern s16 D_801EA836; +extern s16 D_801EA838; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EA82C; + D_80114F34 = D_801EA82E; + D_80114F38 = D_801EA830; + D_80114F24 = D_801EA834; + D_80114F28 = D_801EA836; + D_80114F2C = D_801EA838; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EA814), src[8..15] -> (*(S8_8017B8E8 *)&D_801EA80C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EA814) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EA80C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EA81C; +extern u16 D_801EA81E; +extern u16 D_801EA820; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EA79C; +extern short D_801EA824; +extern short D_801EA826; +extern short D_801EA828; +extern s16 D_801EA814; +extern s16 D_801EA816; +extern s16 D_801EA818; +extern s16 D_801EA80C; +extern s16 D_801EA80E; +extern s16 D_801EA810; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EA81C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EA81E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EA820); + (*(s16 *)&D_801EA824) = buf[0]; + (*(s16 *)&D_801EA826) = buf[1]; + (*(s16 *)&D_801EA828) = buf[2]; + D_801EA814 = D_80114F30 + buf[0]; + D_801EA79C = 0; + D_801EA816 = D_80114F34 + buf[1]; + D_801EA818 = D_80114F38 + buf[2]; + D_801EA80C = D_80114F24 + buf[0]; + D_801EA80E = D_80114F28 + buf[1]; + D_801EA810 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EA7BC; +extern SV4 D_801EA7C4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EA7C4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EA7BC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EA7C4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EA7C4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EA7BC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EA7C4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EA7E4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EA7E4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EA79C; +extern s16 D_801EAFC8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EA79C = D_801EA79C + 1; + if (D_801EA79C >= 0x1F) { + D_801EAFC8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EA79C; +extern s16 D_801EAFC8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EA79C = D_801EA79C + 1; + if (0x18 < D_801EA79C) { + func_8012A4BC(); + D_801EAFC8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EA79C; +extern void (*D_801EA7E0)(void); +extern short D_801EA824; +extern short D_801EA826; +extern short D_801EA828; +extern s16 D_801EAFC8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EA79C = D_801EA79C + 1; + if (D_801EA79C >= 0x19) { + if (D_801EA7E0 != 0) { + (*D_801EA7E0)(); + } else { + D_80114F30 = D_80114F30 + D_801EA824; + D_80114F34 = D_80114F34 + D_801EA826; + D_80114F38 = D_80114F38 + D_801EA828; + D_80114F24 = D_80114F24 + D_801EA824; + D_80114F28 = D_80114F28 + D_801EA826; + D_80114F2C = D_80114F2C + D_801EA828; + func_8012A4BC(); + } + D_801EAFC8 = 0; + } +} + + + +extern void (*D_8018EF4C[])(void); + +void func_8017BE60(void *a0) { + D_8018EF4C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018EF58[])(void); + +void func_8017BEE4(void *a0) { + D_8018EF58[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +extern void func_80174684(void *); + extern s32 func_8017BFC8; + s32 func_8017BFA0(void) +{ + func_80174684(&func_8017BFC8); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017BFC8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C084); + + +extern void (*D_8018F024[])(void); + +void func_8017C0C8(void *a0) { + D_8018F024[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C104); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C12C); + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C624); + + +extern void (*D_8018F064[])(void); + +void func_8017C664(void *a0) { + D_8018F064[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CE10); + + +extern void (*D_8018F084[])(void); + +void func_8017CE54(void *a0) { + D_8018F084[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D098); + + +extern void (*D_8018F094[])(void); + +void func_8017D0DC(void *a0) { + D_8018F094[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018F0A0[])(void); + +void func_8017D63C(void *a0) { + D_8018F0A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DA98); + + +extern void (*D_8018F224[])(void); + +void func_8017DB00(void *a0) { + D_8018F224[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DC28); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017EB7C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8017FA5C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", listCdBuffer); + + +extern void (*D_8018F500[])(void); + +void func_801805BC(void *a0) { + D_8018F500[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801805F8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180638); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801806B4); + +DEFINE_func_80180714() /* dedup: shared engine-core @0x80180714 (src/shared) */ + +DEFINE_func_8018071C() /* dedup: shared engine-core @0x8018071C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180744); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180760); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180770); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801807D0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018089C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180A68); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180AC4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180B20); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180B84); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180C34); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180CF8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180DB8); + + +extern void (*D_8018F5B0[])(void); + +void func_80180DFC(void *a0) { + D_8018F5B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180E38); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80180FFC); + + +extern void (*D_8018F5B8[])(void); + +void func_80181090(void *a0) { + D_8018F5B8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018F5A4; + +void func_801810CC(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018F5A4, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181170); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181304); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181690); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181908); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181A50); + + +extern void (*D_8018F6D0[])(void); + +void func_80181BD0(void *a0) { + D_8018F6D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181C0C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181C58); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181D4C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181DCC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181E80); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181EEC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181F78); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181F98); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80181FEC); + + +extern void (*D_8018F728[])(void); + +void func_80182028(void *a0) { + D_8018F728[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182064); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801820B4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182110); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182194); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801822FC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182348); + + +extern void (*D_8018F73C[])(void); + +void func_80182654(void *a0) { + D_8018F73C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182690); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801826D0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801827CC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801828A0); + + +extern void (*D_8018F750[])(void); + +void func_801828F4(void *a0) { + D_8018F750[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182930); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801829E4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182A40); + +extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_80182BB0(s32 arg0, s32 arg1) { + func_80182C28(arg0, arg1, 0xC, 0); + } + + +extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_80182BD4(s32 arg0, s32 arg1, s16 arg2) { + func_80182C28(arg0, arg1, arg2, 0); + } + + + + +extern void func_80182C28(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_80182BFC(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_80182C28)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182C28); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182CB0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182D04); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182D5C); + + +extern void (*D_8018F7AC[])(void); + +void func_80182E08(void *a0) { + D_8018F7AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80182E44); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183130); + +DEFINE_func_801835C4() /* dedup: shared engine-core @0x801835C4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183600); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80183644(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183668); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_801836A8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183724); + + +extern void (*D_8018F818[])(void); + +void func_80183744(void *a0) { + D_8018F818[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183780); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_801837C0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8018383C(void) { + func_800D1EBC(); + } + + +DEFINE_func_8018385C() /* dedup: shared engine-core @0x8018385C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183898); + +DEFINE_func_80183930() /* dedup: shared engine-core @0x80183930 (src/shared) */ + + +DEFINE_func_80183958() /* dedup: shared engine-core @0x80183958 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183980); + + +extern void (*D_8018F850[])(void); + +void func_80183A18(void *a0) { + D_8018F850[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183A54); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183B58); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183CF0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183D50); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80183F28); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184058); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184264); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801842E0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184354); + +DEFINE_func_80184440() /* dedup: shared engine-core @0x80184440 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184474); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184538); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801846E4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018473C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184794); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801847EC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184868); + +DEFINE_func_801848E4() /* dedup: shared engine-core @0x801848E4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184920); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184A08); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184D1C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184DA4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184DF8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184E4C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80184F14); + + +extern void (*D_80190008[])(void); + +void func_80185144(void *a0) { + D_80190008[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185180); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185380); + +DEFINE_func_8018553C() /* dedup: shared engine-core @0x8018553C (src/shared) */ + + +extern s32 D_801EAEE4; + s32 func_80185578(void) { + return 0x2 - D_801EAEE4; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018558C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801855A0); + +DEFINE_func_801856B4() /* dedup: shared engine-core @0x801856B4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801856C4); + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185744(void) { + return func_8001AAA0(0x51) != 0; + } + + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185764(void) { + return func_8001AAA0(0x52) != 0; + } + + +extern s32 func_8001AAA0(s32 arg); + s32 func_80185784(void) { + return func_8001AAA0(0x56) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801857A4); + +extern void func_800D0C48(s32 arg); + void func_801857C4(void) { + func_800D0C48(0x1); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801857E4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185858); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801858D4); + +extern s32 func_80184868(s32 arg); + void func_8018597C(void *a0) { + if (func_80184868((s32)a0)) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801859B0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185A0C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185B44); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80185EF8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801863B8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018655C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801867F8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80186A74); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80186C4C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187090); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187300); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801874C0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187884); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187A98); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187CA8); + + +extern void (*D_80191890[])(void); + +void func_80187D80(void *a0) { + D_80191890[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187DBC); + +DEFINE_func_80187E28() /* dedup: shared engine-core @0x80187E28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187E3C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187EA8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80187EE8); + +extern void func_80131E00(struct S80131E00 *a0, s32 a1); + void func_801880F8(void *arg0) { + ((void (*)(s32, s32))func_80131E00)((s32)arg0, 0x11); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188118); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188168); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801881CC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188290); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188350); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801883AC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188404); + +DEFINE_func_80188470() /* dedup: shared engine-core @0x80188470 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188478); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018858C); + + +extern void (*D_801918B0[])(void); + +void func_80188634(void *a0) { + D_801918B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188670); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188828); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801889B4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188A80); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188B94); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188C0C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188C60); + + +s32 func_80188CA0(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x6; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188CB4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188D64); + +extern s32 func_8018473C(void); + void func_80188D84(void) { + func_8018473C(); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188DA4); + + +extern void (*D_80191B84[])(void); + +void func_80188DC4(void *a0) { + D_80191B84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188E00); + +DEFINE_func_80188F18() /* dedup: shared engine-core @0x80188F18 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188F28); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188F80); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80188FB4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189050); + +extern s32 func_8017BEBC(void); + void func_801890B8(void) { + func_8017BEBC(); + } + + +extern s32 func_8017BFA0(void); + void func_801890D8(void) { + func_8017BFA0(); + } + + +DEFINE_func_801890F8() /* dedup: shared engine-core @0x801890F8 (src/shared) */ + + +DEFINE_func_80189104() /* dedup: shared engine-core @0x80189104 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189110); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80189160(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x87C, 0); + } + + +DEFINE_func_8018918C() /* dedup: shared engine-core @0x8018918C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_801891E8(u8 *a0); +extern void (*D_80191BD4[])(int); + +void func_8018919C(int param_1) +{ + ((void (*)(void))func_801891E8)(); + D_80191BD4[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801891E8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189238); + +DEFINE_func_801892D4() /* dedup: shared engine-core @0x801892D4 (src/shared) */ + +DEFINE_func_801892DC() /* dedup: shared engine-core @0x801892DC (src/shared) */ + +DEFINE_func_801892E4() /* dedup: shared engine-core @0x801892E4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189310); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801893BC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018942C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801894BC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018950C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801895BC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189630); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189680); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018973C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801897A4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801897C4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189824); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801898BC); + + +extern void (*D_80191C0C[])(void); + +void func_80189970(void *a0) { + D_80191C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_801899AC); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(int, int); +extern int D_80191BFC; + +void func_801899F4(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + func_8001C214(v0, 0); + *(int *)(param_1 + 0x58) = (int)&D_80191BFC; + *(short *)(param_1 + 0x5c) = 0x80; + *(unsigned short *)(param_1 + 2) += 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189A60); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189AC4); + + +extern void (*D_801E3298[])(void); + +void func_80189B3C(void *a0) { + D_801E3298[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189B78); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189C4C); + +DEFINE_func_80189C74() /* dedup: shared engine-core @0x80189C74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189C7C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189DC8); + +extern void func_8012C218(void *a0); + void func_80189EE8(void *arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189F14); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189F24); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189F34); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80189F74(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +extern s16 func_80174764(void); + s32 func_80189FA8(void) { + return ((u32)(((s32 (*)(void))func_80174764)() ^ 1)) < 1; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_80189FCC); + + +extern void (*D_801E32C0[])(void); + +void func_8018A030(void *a0) { + D_801E32C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A06C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A0F4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A1B4); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A224); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A31C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A390); + + +extern void (*D_801E3A24[])(void); + +void func_8018A5B0(void *a0) { + D_801E3A24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A5EC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A680); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A6A4); + + +extern s16 D_801EADE4; + extern s16 D_801EADE6; + extern s16 D_801EADE8; + extern s16 D_801EADEA; + void func_8018A744(s32 arg0, s32 arg1, s32 arg2) { + D_801EADE4 = *(u16 *)((s32)arg0 + 0x0); + D_801EADE6 = *(u16 *)((s32)arg0 + 0x2); + D_801EADE8 = arg1; + D_801EADEA = arg2; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A774); + + +extern s16 D_801EADEA; + void func_8018A7EC(s32 arg0) { + *(s16 *)((s32)&D_801EADEA + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A808); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A860); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A934); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A970); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018A9BC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AA98); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AD5C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AD80); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018ADA8); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AE30); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AE9C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AF0C); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AF84); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018AFD0); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018B0EC); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018B128); + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80178D40", func_8018B23C); + + diff --git a/src/ov_SC03_023/ov_SC03_023_jr_801734BC.c b/src/ov_SC03_023/ov_SC03_023_jr_801734BC.c index ed4a3f886..447007150 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_801734BC.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_801734BC.c @@ -3105,960 +3105,3 @@ void func_80178D18(void) { D_80198D84 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80198B8C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80198B8C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80198B8C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80198B8C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80198BB4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80198BB4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80198B70; - -s32 func_8017A3B0(void) { - switch (D_80198B70) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80198BAC; -extern short D_80198BA8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80198BAC) { - case 0: - func_800D0CA0(1); - D_80198BAC = D_80198BAC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80198BA8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80198BAC = D_80198BAC + 1; - if (D_80198BAC < 0x1E) { - return 0; - } - D_80198BAC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80198BEC; - extern s16 D_80198BEE; - extern s16 D_80198BF0; - extern s16 D_80198BE4; - extern s16 D_80198BE6; - extern s16 D_80198BE8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80198BEC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80198BEE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80198BF0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80198BE4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80198BE6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80198BE8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80198B74; -extern u16 D_80198BF4; -extern u16 D_80198BF6; -extern u16 D_80198BF8; -extern s16 D_80198D10; - -void func_8017B1D8(void) { - func_8012A418(); - D_80198D10 = 0; - D_80198B74 = 0; - D_80198BF4 = D_80126B5E; - D_80198BF6 = D_80126B62; - D_80198BF8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182828[]; - extern s16 D_80198BEC; - extern s16 D_80198BE4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182828[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182828[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80198BEC; - s16 *p78C = &D_80198BE4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80198D10 = 1; - D_80198B74 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80198B94; - extern SV4_8017B368 D_80198B9C; - extern s16 D_80198BEC; - extern s16 D_80198BE4; - extern u16 D_80182828; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80198B94; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80198B9C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182828)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182828)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80198BEC) = loc0; - (*(SV4_8017B368 *)&D_80198BE4) = loc1; - D_80198D10 = 1; - D_80198B74 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182828[]; - extern s16 D_80198BEC; - extern s16 D_80198BEE; - extern s16 D_80198BF0; - extern s16 D_80198BE4; - extern s16 D_80198BE6; - extern s16 D_80198BE8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182828[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182828[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80198BEC; - s16 *p78C = &D_80198BE4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80198BEE; - v798 = D_80198BF0; - v78C = *p78C; - v78E = D_80198BE6; - v790 = D_80198BE8; - __asm__ __volatile__(""); - D_80198D10 = 1; - D_80198B74 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80198B74; -extern s16 D_80198BEC; -extern s16 D_80198BEE; -extern s16 D_80198BF0; -extern s16 D_80198BE4; -extern s16 D_80198BE6; -extern s16 D_80198BE8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80198B74 = 0; - D_80198BEC = (s16) D_80114F30; - D_80198BEE = (s16) D_80114F34; - D_80198BF0 = (s16) D_80114F38; - D_80198BE4 = (s16) D_80114F24; - D_80198BE6 = (s16) D_80114F28; - D_80198BE8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80198C04; -extern s16 D_80198C06; -extern s16 D_80198C08; -extern s16 D_80198C0C; -extern s16 D_80198C0E; -extern s16 D_80198C10; - -void func_8017B824(void) { - D_80198C04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80198C06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80198C08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80198C0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80198C0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80198C10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80198C04; -extern s16 D_80198C06; -extern s16 D_80198C08; -extern s16 D_80198C0C; -extern s16 D_80198C0E; -extern s16 D_80198C10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80198C04; - D_80114F34 = D_80198C06; - D_80114F38 = D_80198C08; - D_80114F24 = D_80198C0C; - D_80114F28 = D_80198C0E; - D_80114F2C = D_80198C10; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80198BEC), src[8..15] -> (*(S8_8017B8E8 *)&D_80198BE4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80198BEC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80198BE4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80198BF4; -extern u16 D_80198BF6; -extern u16 D_80198BF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80198B74; -extern short D_80198BFC; -extern short D_80198BFE; -extern short D_80198C00; -extern s16 D_80198BEC; -extern s16 D_80198BEE; -extern s16 D_80198BF0; -extern s16 D_80198BE4; -extern s16 D_80198BE6; -extern s16 D_80198BE8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80198BF4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80198BF6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80198BF8); - (*(s16 *)&D_80198BFC) = buf[0]; - (*(s16 *)&D_80198BFE) = buf[1]; - (*(s16 *)&D_80198C00) = buf[2]; - D_80198BEC = D_80114F30 + buf[0]; - D_80198B74 = 0; - D_80198BEE = D_80114F34 + buf[1]; - D_80198BF0 = D_80114F38 + buf[2]; - D_80198BE4 = D_80114F24 + buf[0]; - D_80198BE6 = D_80114F28 + buf[1]; - D_80198BE8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80198B94; -extern SV4 D_80198B9C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80198B9C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80198B94 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80198B9C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80198B9C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80198B94) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80198B9C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80198BBC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80198BBC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80198B74; -extern s16 D_80198D10; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80198B74 = D_80198B74 + 1; - if (D_80198B74 >= 0x1F) { - D_80198D10 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80198B74; -extern s16 D_80198D10; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80198B74 = D_80198B74 + 1; - if (0x18 < D_80198B74) { - func_8012A4BC(); - D_80198D10 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80198B74; -extern void (*D_80198BB8)(void); -extern short D_80198BFC; -extern short D_80198BFE; -extern short D_80198C00; -extern s16 D_80198D10; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80198B74 = D_80198B74 + 1; - if (D_80198B74 >= 0x19) { - if (D_80198BB8 != 0) { - (*D_80198BB8)(); - } else { - D_80114F30 = D_80114F30 + D_80198BFC; - D_80114F34 = D_80114F34 + D_80198BFE; - D_80114F38 = D_80114F38 + D_80198C00; - D_80114F24 = D_80114F24 + D_80198BFC; - D_80114F28 = D_80114F28 + D_80198BFE; - D_80114F2C = D_80114F2C + D_80198C00; - func_8012A4BC(); - } - D_80198D10 = 0; - } -} - - - -extern void (*D_801828C8[])(void); - -void func_8017BE60(void *a0) { - D_801828C8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017C338); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017C530); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017C59C); - - -extern void (*D_801828FC[])(void); - -void func_8017D468(void *a0) { - D_801828FC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D4A4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D4E8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80182904[])(void); - -void func_8017D50C(void *a0) { - D_80182904[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D548); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D588(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D604(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D624); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D670); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D698); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D6C0); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D6E8); - - -extern void (*D_801829DC[])(void); - -void func_8017D708(void *a0) { - D_801829DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -extern s32 func_80171990(u8 *a0); -extern s32 func_8017D774(s32); - -void func_8017D744(s32 *a0) { - ((void (*)(s32 *))func_80171990)(a0); - func_8017D774((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D774); - - -extern void (*D_801829E4[])(void); - -void func_8017D7BC(void *a0) { - D_801829E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D7F8); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D828); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D884); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D8AC); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D8CC); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D964); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017D9DC); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DA54); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DAD0); - - -extern void (*D_801829EC[])(void); - -void func_8017DB48(void *a0) { - D_801829EC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DB84); - -extern void func_8017DBC4(s32 arg0, s32 arg1); - void func_8017DBA4(s32 arg0) { - func_8017DBC4(arg0, 1); - } - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DBC4); - - -extern void (*D_80182A64[])(void); - -void func_8017DDBC(void *a0) { - D_80182A64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DDF8); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DECC); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DF1C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017DFA0); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E014); - - -extern void (*D_80182B04[])(void); - -void func_8017E1F4(void *a0) { - D_80182B04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E230); - - -extern void (*D_80182C3C[])(void); - -void func_8017E36C(void *a0) { - D_80182C3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E3A8); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E414); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E524); - -void func_8017E60C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E614); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E70C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E79C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E834); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E8E4); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E948); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017E988); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017EA40); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017EB2C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017EC30); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017EC84); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017ECC8); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017ED30); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_801734BC", func_8017EDAC); - -s32 func_8017EE74(void) { - return 0xC; - } - - -extern void func_8013CB84(void); - void func_8017EE7C(void) { - func_8013CB84(); - } - diff --git a/src/ov_SC03_023/ov_SC03_023_jr_80178D40.c b/src/ov_SC03_023/ov_SC03_023_jr_80178D40.c new file mode 100644 index 000000000..4b797fce8 --- /dev/null +++ b/src/ov_SC03_023/ov_SC03_023_jr_80178D40.c @@ -0,0 +1,4427 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801820D0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80197EE0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801820C4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182108[]; +extern unsigned short D_80182110[]; +extern unsigned short D_80182118[]; +extern unsigned char D_80197EE8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80197EE0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182120[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019801C; +extern M2C_UNK D_80198020; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80197FA8; +extern void (*D_80182150[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80198024[]; +extern u8 D_8019802C[]; +extern u8 D_80197FDC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182158[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182174[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018217C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801821E4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182188; +extern u8 D_80182194; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182218[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182220[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182274[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801822A8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182298[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801822C4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018233C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182344[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018234C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182354[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018235C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182364[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182370[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018237C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182388[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182398[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801823A8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801823B0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801823B8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801823C0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801823C8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801823D0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801823D8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801823E0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801823E8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801823F0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801823F8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182400[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182408[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182410[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182418[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182420[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182428[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182430[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182438[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182440[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182448[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182450[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182458[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018249C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182460; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801824CC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182508[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182560[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182570[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182578[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801826E0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801826EC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801975EC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80198D10; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80198760; +extern short D_80198D84; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_80198D84) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_80198D84)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80198760 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_80198D84) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80198CE0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80198CE0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_80198D84) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_80198D84) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80198BBC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80198764; + extern s32 D_80198B78; + extern s16 D_80198B7C; + extern s16 D_80198B80; + extern s16 D_80198B84; + extern s16 D_80198B88; + extern s32 D_80198B90; + extern s32 D_80198B94; + extern s32 D_80198BA4; + extern s16 D_80198BA8; + extern s16 D_80198BAC; + extern s32 D_80198BB0; + extern s32 D_80198BB8; + extern s32 D_80198BBC[10]; + extern s32 D_80198C28; + extern s16 D_80198CE0; + extern s32 D_80198D0C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80198CE0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80198B78); + D_80198B78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80198B84, D_80198B88 ? 0x48 : 0x40); + (*(s16*)&D_80198D84) = 2; + break; + case 0: + func_80179B28(D_80198B78); + D_80198B78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80198B7C, D_80198B80 ? 0x48 : 0x40); + (*(s16*)&D_80198D84) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80198C28 != 0) { + func_80179B28(D_80198B78); + D_80198B78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80198B7C, D_80198B80 ? 0x48 : 0x40); + (*(s16*)&D_80198D84) = 1; + } else { + (*(s16*)&D_80198D84) = 3; + } + break; + case 0x32: + func_80179B28(D_80198B78); + D_80198B78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80198B7C, + D_80198B80 ? 0x48 : 0x40); + (*(s16*)&D_80198D84) = 1; + break; + case 2: + func_80179B28(D_80198B78); + if (D_80198B90 != 0) { + D_80198760 = D_80198B90; + D_80198B90 = 0; + (*(s16*)&D_80198D84) = 3; + return; + } + (*(s16*)&D_80198D84) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_80198D84) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_80198D84) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80198D84) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_80198D84) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80198D84) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_80198D84) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80198D84) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80198D84) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_80198D84) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_80198D84) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_80198D84) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x1B: + D_80198BB0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_80198D84) = 4; + D_80198764 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_80198D84) = 5; + D_80198BA4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80198BA4 = (s32)func_8017A3B0; + (*(s16*)&D_80198D84) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x24: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80198D84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80198D84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_80198D84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80198D84) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80198D84) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80198D84) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80198D84) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80198D84) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_80198D84) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80198B94); + (*(s16*)&D_80198D84) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80198B94); + (*(s16*)&D_80198D84) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80198B94); + (*(s16*)&D_80198D84) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80198B94); + (*(s16*)&D_80198D84) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + break; + case 0x4E: + D_80198BB8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x2B: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_80198D84) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80198D0C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_80198D84) = 3; + break; + case 0x34: + (*(s16*)&D_80198D84) = 3; + D_80198760 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80198B90 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_80198D84) = 3; + D_80198760 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_80198D84) = 3; + D_80198760 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80198760 = *(s32 *)(D_80198760 + 4); + return; + case 0x37: + (*(s16*)&D_80198D84) = 3; + D_80198B7C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80198B80 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_80198D84) = 3; + D_80198B84 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80198B88 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_80198D84) = 3; + D_80198B7C = w1; + D_80198B80 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_80198D84) = 3; + D_80198B84 = w2; + D_80198B88 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + case 0x43: + D_80198BA4 = (s32)func_8017A3D8; + D_80198BAC = 0; + (*(s16*)&D_80198D84) = 5; + D_80198BA8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80198D84) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80198D84) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80198D84) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80198BBC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_80198D84) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80198BBC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_80198D84) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80198BBC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_80198D84) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80198BBC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_80198D84) = 3; + break; + default: + break; + } +Lend: + D_80198760 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80198B8C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80198B8C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80198B8C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80198B8C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80198BB4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80198BB4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80198B70; + +s32 func_8017A3B0(void) { + switch (D_80198B70) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80198BAC; +extern short D_80198BA8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80198BAC) { + case 0: + func_800D0CA0(1); + D_80198BAC = D_80198BAC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80198BA8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80198BAC = D_80198BAC + 1; + if (D_80198BAC < 0x1E) { + return 0; + } + D_80198BAC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80198BEC; + extern s16 D_80198BEE; + extern s16 D_80198BF0; + extern s16 D_80198BE4; + extern s16 D_80198BE6; + extern s16 D_80198BE8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80198BEC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80198BEE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80198BF0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80198BE4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80198BE6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80198BE8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80198B74; +extern u16 D_80198BF4; +extern u16 D_80198BF6; +extern u16 D_80198BF8; +extern s16 D_80198D10; + +void func_8017B1D8(void) { + func_8012A418(); + D_80198D10 = 0; + D_80198B74 = 0; + D_80198BF4 = D_80126B5E; + D_80198BF6 = D_80126B62; + D_80198BF8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182828[]; + extern s16 D_80198BEC; + extern s16 D_80198BE4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182828[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182828[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80198BEC; + s16 *p78C = &D_80198BE4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80198D10 = 1; + D_80198B74 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80198B94; + extern SV4_8017B368 D_80198B9C; + extern s16 D_80198BEC; + extern s16 D_80198BE4; + extern u16 D_80182828; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80198B94; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80198B9C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182828)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182828)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80198BEC) = loc0; + (*(SV4_8017B368 *)&D_80198BE4) = loc1; + D_80198D10 = 1; + D_80198B74 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182828[]; + extern s16 D_80198BEC; + extern s16 D_80198BEE; + extern s16 D_80198BF0; + extern s16 D_80198BE4; + extern s16 D_80198BE6; + extern s16 D_80198BE8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182828[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182828[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80198BEC; + s16 *p78C = &D_80198BE4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80198BEE; + v798 = D_80198BF0; + v78C = *p78C; + v78E = D_80198BE6; + v790 = D_80198BE8; + __asm__ __volatile__(""); + D_80198D10 = 1; + D_80198B74 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80198B74; +extern s16 D_80198BEC; +extern s16 D_80198BEE; +extern s16 D_80198BF0; +extern s16 D_80198BE4; +extern s16 D_80198BE6; +extern s16 D_80198BE8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80198B74 = 0; + D_80198BEC = (s16) D_80114F30; + D_80198BEE = (s16) D_80114F34; + D_80198BF0 = (s16) D_80114F38; + D_80198BE4 = (s16) D_80114F24; + D_80198BE6 = (s16) D_80114F28; + D_80198BE8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80198C04; +extern s16 D_80198C06; +extern s16 D_80198C08; +extern s16 D_80198C0C; +extern s16 D_80198C0E; +extern s16 D_80198C10; + +void func_8017B824(void) { + D_80198C04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80198C06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80198C08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80198C0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80198C0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80198C10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80198C04; +extern s16 D_80198C06; +extern s16 D_80198C08; +extern s16 D_80198C0C; +extern s16 D_80198C0E; +extern s16 D_80198C10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80198C04; + D_80114F34 = D_80198C06; + D_80114F38 = D_80198C08; + D_80114F24 = D_80198C0C; + D_80114F28 = D_80198C0E; + D_80114F2C = D_80198C10; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80198BEC), src[8..15] -> (*(S8_8017B8E8 *)&D_80198BE4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80198BEC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80198BE4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80198BF4; +extern u16 D_80198BF6; +extern u16 D_80198BF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80198B74; +extern short D_80198BFC; +extern short D_80198BFE; +extern short D_80198C00; +extern s16 D_80198BEC; +extern s16 D_80198BEE; +extern s16 D_80198BF0; +extern s16 D_80198BE4; +extern s16 D_80198BE6; +extern s16 D_80198BE8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80198BF4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80198BF6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80198BF8); + (*(s16 *)&D_80198BFC) = buf[0]; + (*(s16 *)&D_80198BFE) = buf[1]; + (*(s16 *)&D_80198C00) = buf[2]; + D_80198BEC = D_80114F30 + buf[0]; + D_80198B74 = 0; + D_80198BEE = D_80114F34 + buf[1]; + D_80198BF0 = D_80114F38 + buf[2]; + D_80198BE4 = D_80114F24 + buf[0]; + D_80198BE6 = D_80114F28 + buf[1]; + D_80198BE8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80198B94; +extern SV4 D_80198B9C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80198B9C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80198B94 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80198B9C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80198B9C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80198B94) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80198B9C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80198BBC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80198BBC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80198B74; +extern s16 D_80198D10; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80198B74 = D_80198B74 + 1; + if (D_80198B74 >= 0x1F) { + D_80198D10 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80198B74; +extern s16 D_80198D10; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80198B74 = D_80198B74 + 1; + if (0x18 < D_80198B74) { + func_8012A4BC(); + D_80198D10 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80198B74; +extern void (*D_80198BB8)(void); +extern short D_80198BFC; +extern short D_80198BFE; +extern short D_80198C00; +extern s16 D_80198D10; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80198B74 = D_80198B74 + 1; + if (D_80198B74 >= 0x19) { + if (D_80198BB8 != 0) { + (*D_80198BB8)(); + } else { + D_80114F30 = D_80114F30 + D_80198BFC; + D_80114F34 = D_80114F34 + D_80198BFE; + D_80114F38 = D_80114F38 + D_80198C00; + D_80114F24 = D_80114F24 + D_80198BFC; + D_80114F28 = D_80114F28 + D_80198BFE; + D_80114F2C = D_80114F2C + D_80198C00; + func_8012A4BC(); + } + D_80198D10 = 0; + } +} + + + +extern void (*D_801828C8[])(void); + +void func_8017BE60(void *a0) { + D_801828C8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017C338); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017C530); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017C59C); + + +extern void (*D_801828FC[])(void); + +void func_8017D468(void *a0) { + D_801828FC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D4A4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D4E8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80182904[])(void); + +void func_8017D50C(void *a0) { + D_80182904[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D548); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D588(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D604(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D624); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D670); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D698); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D6C0); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D6E8); + + +extern void (*D_801829DC[])(void); + +void func_8017D708(void *a0) { + D_801829DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +extern s32 func_80171990(u8 *a0); +extern s32 func_8017D774(s32); + +void func_8017D744(s32 *a0) { + ((void (*)(s32 *))func_80171990)(a0); + func_8017D774((s32)a0); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D774); + + +extern void (*D_801829E4[])(void); + +void func_8017D7BC(void *a0) { + D_801829E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D7F8); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D828); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D884); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D8AC); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D8CC); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D964); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017D9DC); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DA54); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DAD0); + + +extern void (*D_801829EC[])(void); + +void func_8017DB48(void *a0) { + D_801829EC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DB84); + +extern void func_8017DBC4(s32 arg0, s32 arg1); + void func_8017DBA4(s32 arg0) { + func_8017DBC4(arg0, 1); + } + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DBC4); + + +extern void (*D_80182A64[])(void); + +void func_8017DDBC(void *a0) { + D_80182A64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DDF8); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DECC); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DF1C); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017DFA0); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E014); + + +extern void (*D_80182B04[])(void); + +void func_8017E1F4(void *a0) { + D_80182B04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E230); + + +extern void (*D_80182C3C[])(void); + +void func_8017E36C(void *a0) { + D_80182C3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E3A8); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E414); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E524); + +void func_8017E60C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E614); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E70C); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E79C); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E834); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E8E4); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E948); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017E988); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017EA40); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017EB2C); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017EC30); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017EC84); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017ECC8); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017ED30); + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_80178D40", func_8017EDAC); + +s32 func_8017EE74(void) { + return 0xC; + } + + +extern void func_8013CB84(void); + void func_8017EE7C(void) { + func_8013CB84(); + } + + diff --git a/src/ov_SC03_024/ov_SC03_024_jr_801734BC.c b/src/ov_SC03_024/ov_SC03_024_jr_801734BC.c index 2919e9007..1a3db52ad 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_801734BC.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_801734BC.c @@ -3105,1636 +3105,3 @@ void func_80178D18(void) { D_801C184C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C1124; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C1124 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C1124; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C1124 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C114C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C114C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C1108; - -s32 func_8017A3B0(void) { - switch (D_801C1108) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C1144; -extern short D_801C1140; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C1144) { - case 0: - func_800D0CA0(1); - D_801C1144 = D_801C1144 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C1140; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C1144 = D_801C1144 + 1; - if (D_801C1144 < 0x1E) { - return 0; - } - D_801C1144 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C1184; - extern s16 D_801C1186; - extern s16 D_801C1188; - extern s16 D_801C117C; - extern s16 D_801C117E; - extern s16 D_801C1180; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C1184, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C1186, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C1188, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C117C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C117E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C1180, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C110C; -extern u16 D_801C118C; -extern u16 D_801C118E; -extern u16 D_801C1190; -extern s16 D_801C17D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C17D8 = 0; - D_801C110C = 0; - D_801C118C = D_80126B5E; - D_801C118E = D_80126B62; - D_801C1190 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A84C[]; - extern s16 D_801C1184; - extern s16 D_801C117C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A84C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A84C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C1184; - s16 *p78C = &D_801C117C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C17D8 = 1; - D_801C110C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C112C; - extern SV4_8017B368 D_801C1134; - extern s16 D_801C1184; - extern s16 D_801C117C; - extern u16 D_8018A84C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C112C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C1134; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A84C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A84C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C1184) = loc0; - (*(SV4_8017B368 *)&D_801C117C) = loc1; - D_801C17D8 = 1; - D_801C110C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A84C[]; - extern s16 D_801C1184; - extern s16 D_801C1186; - extern s16 D_801C1188; - extern s16 D_801C117C; - extern s16 D_801C117E; - extern s16 D_801C1180; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A84C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A84C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C1184; - s16 *p78C = &D_801C117C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C1186; - v798 = D_801C1188; - v78C = *p78C; - v78E = D_801C117E; - v790 = D_801C1180; - __asm__ __volatile__(""); - D_801C17D8 = 1; - D_801C110C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C110C; -extern s16 D_801C1184; -extern s16 D_801C1186; -extern s16 D_801C1188; -extern s16 D_801C117C; -extern s16 D_801C117E; -extern s16 D_801C1180; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C110C = 0; - D_801C1184 = (s16) D_80114F30; - D_801C1186 = (s16) D_80114F34; - D_801C1188 = (s16) D_80114F38; - D_801C117C = (s16) D_80114F24; - D_801C117E = (s16) D_80114F28; - D_801C1180 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C119C; -extern s16 D_801C119E; -extern s16 D_801C11A0; -extern s16 D_801C11A4; -extern s16 D_801C11A6; -extern s16 D_801C11A8; - -void func_8017B824(void) { - D_801C119C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C119E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C11A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C11A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C11A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C11A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C119C; -extern s16 D_801C119E; -extern s16 D_801C11A0; -extern s16 D_801C11A4; -extern s16 D_801C11A6; -extern s16 D_801C11A8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C119C; - D_80114F34 = D_801C119E; - D_80114F38 = D_801C11A0; - D_80114F24 = D_801C11A4; - D_80114F28 = D_801C11A6; - D_80114F2C = D_801C11A8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C1184), src[8..15] -> (*(S8_8017B8E8 *)&D_801C117C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C1184) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C117C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C118C; -extern u16 D_801C118E; -extern u16 D_801C1190; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C110C; -extern short D_801C1194; -extern short D_801C1196; -extern short D_801C1198; -extern s16 D_801C1184; -extern s16 D_801C1186; -extern s16 D_801C1188; -extern s16 D_801C117C; -extern s16 D_801C117E; -extern s16 D_801C1180; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C118C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C118E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C1190); - (*(s16 *)&D_801C1194) = buf[0]; - (*(s16 *)&D_801C1196) = buf[1]; - (*(s16 *)&D_801C1198) = buf[2]; - D_801C1184 = D_80114F30 + buf[0]; - D_801C110C = 0; - D_801C1186 = D_80114F34 + buf[1]; - D_801C1188 = D_80114F38 + buf[2]; - D_801C117C = D_80114F24 + buf[0]; - D_801C117E = D_80114F28 + buf[1]; - D_801C1180 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C112C; -extern SV4 D_801C1134; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C1134) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C112C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C1134 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C1134)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C112C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C1134) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C1154[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C1154; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C110C; -extern s16 D_801C17D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C110C = D_801C110C + 1; - if (D_801C110C >= 0x1F) { - D_801C17D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C110C; -extern s16 D_801C17D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C110C = D_801C110C + 1; - if (0x18 < D_801C110C) { - func_8012A4BC(); - D_801C17D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C110C; -extern void (*D_801C1150)(void); -extern short D_801C1194; -extern short D_801C1196; -extern short D_801C1198; -extern s16 D_801C17D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C110C = D_801C110C + 1; - if (D_801C110C >= 0x19) { - if (D_801C1150 != 0) { - (*D_801C1150)(); - } else { - D_80114F30 = D_80114F30 + D_801C1194; - D_80114F34 = D_80114F34 + D_801C1196; - D_80114F38 = D_80114F38 + D_801C1198; - D_80114F24 = D_80114F24 + D_801C1194; - D_80114F28 = D_80114F28 + D_801C1196; - D_80114F2C = D_80114F2C + D_801C1198; - func_8012A4BC(); - } - D_801C17D8 = 0; - } -} - - - -extern void (*D_8018A8EC[])(void); - -void func_8017BE60(void *a0) { - D_8018A8EC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018A8F8[])(void); - -void func_8017BEE4(void *a0) { - D_8018A8F8[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017BFA0); - - -extern void (*D_8018A904[])(void); - -void func_8017BFC8(void *a0) { - D_8018A904[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C084); - - -extern void (*D_8018A9C4[])(void); - -void func_8017C0C8(void *a0) { - D_8018A9C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C104); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C12C); - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C624); - - -extern void (*D_8018AA04[])(void); - -void func_8017C664(void *a0) { - D_8018AA04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CE10); - - -extern void (*D_8018AA24[])(void); - -void func_8017CE54(void *a0) { - D_8018AA24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D098); - - -extern void (*D_8018AA34[])(void); - -void func_8017D0DC(void *a0) { - D_8018AA34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018AA40[])(void); - -void func_8017D63C(void *a0) { - D_8018AA40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DA98); - - -extern void (*D_8018ABC4[])(void); - -void func_8017DB00(void *a0) { - D_8018ABC4[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DC28); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017EE64); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017EF30); - - -extern void (*D_8018ABFC[])(void); - -void func_8017F08C(void *a0) { - D_8018ABFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017F0C8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017F128); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017F2C4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017F4C8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017F8BC); - -extern void (*D_8018AED8[])(void); - -void func_8017FA3C(void *a0) { - D_8018AED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FA78); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FAEC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FBC8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FDDC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FEB0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FF80); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8017FFD8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801800D0); - - -extern void (*D_8018AF4C[])(void); - -void func_80180110(void *a0) { - D_8018AF4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018014C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180190(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018AF54[])(void); - -void func_801801B4(void *a0) { - D_8018AF54[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801801F0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180230); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801802CC); - - -extern void (*D_8018AF60[])(void); - -void func_801802EC(void *a0) { - D_8018AF60[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180328); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018AFE0; - -void func_80180368(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018AFE0, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018AFF0; - -void func_80180390(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018AFF0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801803B8); - - -extern void (*D_8018B014[])(void); - -void func_801803E0(void *a0) { - D_8018B014[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018041C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018046C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180580); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180660); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801806D4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180720); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180748); - - -extern void (*D_8018B044[])(void); - -void func_80180770(void *a0) { - D_8018B044[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801807AC); - -extern void func_80171A1C(u8 *a0); - extern s32 func_80174650(s32 arg0); - void func_80180800(s32 arg0) { - ((void (*)(s32))func_80171A1C)(arg0); - func_80174650(arg0); - } - - -void func_80180830(void) { -} - -extern void func_80174684(void *); - extern s32 func_80180860(s32); - s32 func_80180838(void) -{ - func_80174684((void *)func_80180860); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180860); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018089C); - -extern void func_80171A1C(u8 *a0); - extern s32 func_80174650(s32 arg0); - void func_801808E4(s32 param_1) { - ((void (*)(s32))func_80171A1C)(param_1); - ((void (*)(s32))func_80174650)(param_1); - } - - -void func_80180914(void) { -} - -extern void func_80174684(void *); - extern s32 func_80180944; - void func_8018091C(void) { - func_80174684(&func_80180944); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180944); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180980); - -extern void func_80171A1C(u8 *a0); - extern s32 func_80174650(s32 a0); - void func_801809B8(u8 * arg0) { - *(s16 *)(*(s32 *)((s32)arg0 + 0x20) + 0x10) = 0; - ((void (*)(void))func_80171A1C)(); - ((void (*)(s32))func_80174650)((s32)arg0); - } - - -void func_801809F0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801809F8); - - -extern void (*D_8018B068[])(void); - -void func_80180A20(void *a0) { - D_8018B068[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180A5C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180AA4); - -void func_80180AF4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180AFC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180B94); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180C2C); - - -extern void (*D_8018B074[])(void); - -void func_80180CCC(void *a0) { - D_8018B074[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180D08); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180DA8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180E60); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80180EA8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181040); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181070); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801810A4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801810D8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018110C); - - -extern void (*D_8018B090[])(void); - -void func_80181134(void *a0) { - D_8018B090[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80181170(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181190); - -void func_801811EC(void) { -} - - -extern void (*D_8018B09C[])(void); - -void func_801811F4(void *a0) { - D_8018B09C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181230); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801812C4); - - -extern void (*D_8018B0A4[])(void); - -void func_80181394(void *a0) { - D_8018B0A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801813D0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181500); - - -extern void (*D_8018B0AC[])(void); - -void func_8018162C(void *a0) { - D_8018B0AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181668); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801817A8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018181C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181884); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181914); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181B50); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181BA0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181C5C); - - -extern void (*D_8018B10C[])(void); - -void func_80181D74(void *a0) { - D_8018B10C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181DB0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80181F7C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182108); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801821D4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801822E8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182360); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801823B4); - -s32 func_801823F4(s32 *a0) { - return *(u16 *)((s32)a0 + 0x2) == 0x6; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182408); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801824B8(void *arg0) { - ((void (*)(void *, s32))func_8012AD44)(arg0, 0x8); - } - - -extern s32 func_8013CAE8(void); - void func_801824D8(void) { - func_8013CAE8(); - } - - - -extern void (*D_8018B3E0[])(void); - -void func_801824F8(void *a0) { - D_8018B3E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182534); - -void func_8018264C(void *a0) { - *(s32 *)((s32)a0 + 0x48) = 0x1400; - *(s32 *)((s32)a0 + 0x14) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018265C); - -void func_801826B4(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0xcc); - *(s16 *)(v1 + 0x8) = *(u16 *)((s32)a0 + 0x6); - *(s16 *)(v1 + 0xa) = *(u16 *)((s32)a0 + 0xa) - 0xe4; - *(s16 *)(v1 + 0xc) = *(u16 *)((s32)a0 + 0xe) + 0x8; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801826E8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182784); - -extern s32 func_8017BEBC(void); - void func_801827EC(void) { - func_8017BEBC(); - } - - -extern s32 func_8017BFA0(void); - void func_8018280C(void) { - func_8017BFA0(); - } - - -void func_8018282C(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - - -void func_80182838(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x3; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182844); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80182884(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 0x4; - func_8002D4C8(0x86E, 0); - } - - - -void func_801828B0(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0; - } - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8018290C(u8 *a0); -extern void (*D_8018B430[])(int); - -void func_801828C0(int param_1) -{ - ((void (*)(void))func_8018290C)(); - D_8018B430[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018290C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018295C); - -void func_801829F8(void) { -} - -void func_80182A00(void) { -} - - -extern s32 func_80128ED8(void *a0, void *a1); - extern s32 D_801C1350; - void func_80182A08(void *arg0) { - ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801C1350); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182A34); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182AE0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182B50); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182BE0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182C30); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182CE0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182D54); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182DA4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182E60); - -extern s32 func_80182844(void); - void func_80182EC8(void) { - func_80182844(); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182EE8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182F48); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80182FE0); - - -extern s32 D_801C13A0; - -void func_80183094(void) { - D_801C13A0 = 1; -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801830A8); - -extern void (*D_8018B740[])(void); - -void func_80183890(void *a0) { - D_8018B740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801838CC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80183ACC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80183BF8); - - -extern void (*D_8018B760[])(void); - -void func_80184004(void *a0) { - D_8018B760[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184040); - - -extern void (*D_8018B77C[])(void); - -void func_801841D4(void *a0) { - D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184210); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801844D0); - - -extern void (*D_8018B784[])(void); - -void func_801845EC(void *a0) { - D_8018B784[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80180748(void); - void func_80184628(void) { - func_80180748(); - } - - -extern s32 func_80180838(void); - void func_80184648(void) { - func_80180838(); - } - - -extern void func_8018091C(void); - void func_80184668(void) { - func_8018091C(); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184688); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801846BC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184700); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801847E4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184814); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801848F4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184940); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801849E4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184A78); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184B00); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184B80); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184CB0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80184FA0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801850E0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018520C); - - -extern void (*D_8018B7E8[])(void); - -void func_80185334(void *a0) { - D_8018B7E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185370); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801853BC); - -void func_80185458(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018546C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801854B0); - -void func_801854F4(void *a0) { - *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - - -extern void func_8012C218(void *a0); - void func_80185508(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185528); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018555C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801855AC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185638); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018567C); - -extern void func_800D0694(void); - void func_8018569C(void) { - func_800D0694(); - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801856BC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185730); - -extern void (*D_801B93C4[])(void); - -void func_80185950(void *a0) { - D_801B93C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018598C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185A20); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185A44); - - -extern s16 D_801C15F4; - extern s16 D_801C15F6; - extern s16 D_801C15F8; - extern s16 D_801C15FA; - void func_80185AE4(s32 arg0, s32 arg1, s32 arg2) { - D_801C15F4 = *(u16 *)((s32)arg0 + 0x0); - D_801C15F6 = *(u16 *)((s32)arg0 + 0x2); - D_801C15F8 = arg1; - D_801C15FA = arg2; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185B14); - -extern s16 D_801C15FA; - void func_80185B8C(s32 arg0) { - *(s16 *)((s32)&D_801C15FA + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185BA8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185C00); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185CD4); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185D10); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185D5C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80185E38); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801860FC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186120); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186148); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801861D0); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018623C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801862AC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186324); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186370); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_8018648C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801864C8); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801865DC); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_801868C0); - - -extern void (*D_801BA5B4[])(void); - -void func_80186A1C(void *a0) { - D_801BA5B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186A58); - - -extern void (*D_801BA5BC[])(void); - -void func_80186BE4(void *a0) { - D_801BA5BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186C20); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186D10); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_801734BC", func_80186E08); - diff --git a/src/ov_SC03_024/ov_SC03_024_jr_80178D40.c b/src/ov_SC03_024/ov_SC03_024_jr_80178D40.c new file mode 100644 index 000000000..45446e908 --- /dev/null +++ b/src/ov_SC03_024/ov_SC03_024_jr_80178D40.c @@ -0,0 +1,5103 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018A0F4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C0478; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018A0E8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018A12C[]; +extern unsigned short D_8018A134[]; +extern unsigned short D_8018A13C[]; +extern unsigned char D_801C0480[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C0478; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018A144[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C05B4; +extern M2C_UNK D_801C05B8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0540; +extern void (*D_8018A174[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C05BC[]; +extern u8 D_801C05C4[]; +extern u8 D_801C0574[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018A17C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018A198[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018A1A0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018A208[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018A1AC; +extern u8 D_8018A1B8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018A23C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018A244[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018A298[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018A2CC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018A2BC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018A2E8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018A360[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018A368[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018A370[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018A378[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018A380[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018A388[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018A394[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018A3A0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018A3AC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018A3BC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018A3CC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018A3D4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018A3DC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018A3E4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018A3EC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018A3F4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018A3FC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018A404[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018A40C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018A414[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018A41C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018A424[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018A42C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018A434[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018A43C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018A444[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018A44C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018A454[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018A45C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018A464[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018A46C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018A474[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018A47C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018A4C0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018A484; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018A4F0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018A52C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018A584[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018A594[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018A59C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018A704[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018A710[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BFA74; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C17D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C0CF8; +extern short D_801C184C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C184C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C184C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C0CF8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C184C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C17A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C17A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C184C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C184C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C1154[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C0CFC; + extern s32 D_801C1110; + extern s16 D_801C1114; + extern s16 D_801C1118; + extern s16 D_801C111C; + extern s16 D_801C1120; + extern s32 D_801C1128; + extern s32 D_801C112C; + extern s32 D_801C113C; + extern s16 D_801C1140; + extern s16 D_801C1144; + extern s32 D_801C1148; + extern s32 D_801C1150; + extern s32 D_801C1154[10]; + extern s32 D_801C16F0; + extern s16 D_801C17A8; + extern s32 D_801C17D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C17A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C1110); + D_801C1110 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C111C, D_801C1120 ? 0x48 : 0x40); + (*(s16*)&D_801C184C) = 2; + break; + case 0: + func_80179B28(D_801C1110); + D_801C1110 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C1114, D_801C1118 ? 0x48 : 0x40); + (*(s16*)&D_801C184C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C16F0 != 0) { + func_80179B28(D_801C1110); + D_801C1110 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C1114, D_801C1118 ? 0x48 : 0x40); + (*(s16*)&D_801C184C) = 1; + } else { + (*(s16*)&D_801C184C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C1110); + D_801C1110 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C1114, + D_801C1118 ? 0x48 : 0x40); + (*(s16*)&D_801C184C) = 1; + break; + case 2: + func_80179B28(D_801C1110); + if (D_801C1128 != 0) { + D_801C0CF8 = D_801C1128; + D_801C1128 = 0; + (*(s16*)&D_801C184C) = 3; + return; + } + (*(s16*)&D_801C184C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C184C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C184C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C184C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C184C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C184C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C184C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C184C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C184C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C184C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C184C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C184C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x1B: + D_801C1148 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C184C) = 4; + D_801C0CFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C184C) = 5; + D_801C113C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C113C = (s32)func_8017A3B0; + (*(s16*)&D_801C184C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x24: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C184C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C184C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C184C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C184C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C184C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C184C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C184C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C184C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C184C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C112C); + (*(s16*)&D_801C184C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C112C); + (*(s16*)&D_801C184C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C112C); + (*(s16*)&D_801C184C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C112C); + (*(s16*)&D_801C184C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + break; + case 0x4E: + D_801C1150 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C184C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C17D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C184C) = 3; + break; + case 0x34: + (*(s16*)&D_801C184C) = 3; + D_801C0CF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C1128 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C184C) = 3; + D_801C0CF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C184C) = 3; + D_801C0CF8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C0CF8 = *(s32 *)(D_801C0CF8 + 4); + return; + case 0x37: + (*(s16*)&D_801C184C) = 3; + D_801C1114 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C1118 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C184C) = 3; + D_801C111C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C1120 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C184C) = 3; + D_801C1114 = w1; + D_801C1118 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C184C) = 3; + D_801C111C = w2; + D_801C1120 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + case 0x43: + D_801C113C = (s32)func_8017A3D8; + D_801C1144 = 0; + (*(s16*)&D_801C184C) = 5; + D_801C1140 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C184C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C184C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C184C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C1154; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C184C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C1154; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C184C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C1154[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C184C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C1154; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C184C) = 3; + break; + default: + break; + } +Lend: + D_801C0CF8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C1124; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C1124 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C1124; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C1124 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C114C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C114C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C1108; + +s32 func_8017A3B0(void) { + switch (D_801C1108) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C1144; +extern short D_801C1140; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C1144) { + case 0: + func_800D0CA0(1); + D_801C1144 = D_801C1144 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C1140; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C1144 = D_801C1144 + 1; + if (D_801C1144 < 0x1E) { + return 0; + } + D_801C1144 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C1184; + extern s16 D_801C1186; + extern s16 D_801C1188; + extern s16 D_801C117C; + extern s16 D_801C117E; + extern s16 D_801C1180; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C1184, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C1186, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C1188, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C117C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C117E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C1180, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C110C; +extern u16 D_801C118C; +extern u16 D_801C118E; +extern u16 D_801C1190; +extern s16 D_801C17D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C17D8 = 0; + D_801C110C = 0; + D_801C118C = D_80126B5E; + D_801C118E = D_80126B62; + D_801C1190 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A84C[]; + extern s16 D_801C1184; + extern s16 D_801C117C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A84C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A84C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C1184; + s16 *p78C = &D_801C117C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C17D8 = 1; + D_801C110C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C112C; + extern SV4_8017B368 D_801C1134; + extern s16 D_801C1184; + extern s16 D_801C117C; + extern u16 D_8018A84C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C112C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C1134; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A84C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A84C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C1184) = loc0; + (*(SV4_8017B368 *)&D_801C117C) = loc1; + D_801C17D8 = 1; + D_801C110C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A84C[]; + extern s16 D_801C1184; + extern s16 D_801C1186; + extern s16 D_801C1188; + extern s16 D_801C117C; + extern s16 D_801C117E; + extern s16 D_801C1180; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A84C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A84C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C1184; + s16 *p78C = &D_801C117C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C1186; + v798 = D_801C1188; + v78C = *p78C; + v78E = D_801C117E; + v790 = D_801C1180; + __asm__ __volatile__(""); + D_801C17D8 = 1; + D_801C110C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C110C; +extern s16 D_801C1184; +extern s16 D_801C1186; +extern s16 D_801C1188; +extern s16 D_801C117C; +extern s16 D_801C117E; +extern s16 D_801C1180; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C110C = 0; + D_801C1184 = (s16) D_80114F30; + D_801C1186 = (s16) D_80114F34; + D_801C1188 = (s16) D_80114F38; + D_801C117C = (s16) D_80114F24; + D_801C117E = (s16) D_80114F28; + D_801C1180 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C119C; +extern s16 D_801C119E; +extern s16 D_801C11A0; +extern s16 D_801C11A4; +extern s16 D_801C11A6; +extern s16 D_801C11A8; + +void func_8017B824(void) { + D_801C119C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C119E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C11A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C11A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C11A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C11A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C119C; +extern s16 D_801C119E; +extern s16 D_801C11A0; +extern s16 D_801C11A4; +extern s16 D_801C11A6; +extern s16 D_801C11A8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C119C; + D_80114F34 = D_801C119E; + D_80114F38 = D_801C11A0; + D_80114F24 = D_801C11A4; + D_80114F28 = D_801C11A6; + D_80114F2C = D_801C11A8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C1184), src[8..15] -> (*(S8_8017B8E8 *)&D_801C117C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C1184) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C117C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C118C; +extern u16 D_801C118E; +extern u16 D_801C1190; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C110C; +extern short D_801C1194; +extern short D_801C1196; +extern short D_801C1198; +extern s16 D_801C1184; +extern s16 D_801C1186; +extern s16 D_801C1188; +extern s16 D_801C117C; +extern s16 D_801C117E; +extern s16 D_801C1180; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C118C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C118E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C1190); + (*(s16 *)&D_801C1194) = buf[0]; + (*(s16 *)&D_801C1196) = buf[1]; + (*(s16 *)&D_801C1198) = buf[2]; + D_801C1184 = D_80114F30 + buf[0]; + D_801C110C = 0; + D_801C1186 = D_80114F34 + buf[1]; + D_801C1188 = D_80114F38 + buf[2]; + D_801C117C = D_80114F24 + buf[0]; + D_801C117E = D_80114F28 + buf[1]; + D_801C1180 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C112C; +extern SV4 D_801C1134; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C1134) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C112C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C1134 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C1134)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C112C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C1134) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C1154[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C1154; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C110C; +extern s16 D_801C17D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C110C = D_801C110C + 1; + if (D_801C110C >= 0x1F) { + D_801C17D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C110C; +extern s16 D_801C17D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C110C = D_801C110C + 1; + if (0x18 < D_801C110C) { + func_8012A4BC(); + D_801C17D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C110C; +extern void (*D_801C1150)(void); +extern short D_801C1194; +extern short D_801C1196; +extern short D_801C1198; +extern s16 D_801C17D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C110C = D_801C110C + 1; + if (D_801C110C >= 0x19) { + if (D_801C1150 != 0) { + (*D_801C1150)(); + } else { + D_80114F30 = D_80114F30 + D_801C1194; + D_80114F34 = D_80114F34 + D_801C1196; + D_80114F38 = D_80114F38 + D_801C1198; + D_80114F24 = D_80114F24 + D_801C1194; + D_80114F28 = D_80114F28 + D_801C1196; + D_80114F2C = D_80114F2C + D_801C1198; + func_8012A4BC(); + } + D_801C17D8 = 0; + } +} + + + +extern void (*D_8018A8EC[])(void); + +void func_8017BE60(void *a0) { + D_8018A8EC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018A8F8[])(void); + +void func_8017BEE4(void *a0) { + D_8018A8F8[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017BFA0); + + +extern void (*D_8018A904[])(void); + +void func_8017BFC8(void *a0) { + D_8018A904[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C084); + + +extern void (*D_8018A9C4[])(void); + +void func_8017C0C8(void *a0) { + D_8018A9C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C104); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C12C); + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C624); + + +extern void (*D_8018AA04[])(void); + +void func_8017C664(void *a0) { + D_8018AA04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CE10); + + +extern void (*D_8018AA24[])(void); + +void func_8017CE54(void *a0) { + D_8018AA24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D098); + + +extern void (*D_8018AA34[])(void); + +void func_8017D0DC(void *a0) { + D_8018AA34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018AA40[])(void); + +void func_8017D63C(void *a0) { + D_8018AA40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DA98); + + +extern void (*D_8018ABC4[])(void); + +void func_8017DB00(void *a0) { + D_8018ABC4[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DC28); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017EE64); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017EF30); + + +extern void (*D_8018ABFC[])(void); + +void func_8017F08C(void *a0) { + D_8018ABFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017F0C8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017F128); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017F2C4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017F4C8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017F8BC); + +extern void (*D_8018AED8[])(void); + +void func_8017FA3C(void *a0) { + D_8018AED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FA78); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FAEC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FBC8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FDDC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FEB0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FF80); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8017FFD8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801800D0); + + +extern void (*D_8018AF4C[])(void); + +void func_80180110(void *a0) { + D_8018AF4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018014C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180190(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018AF54[])(void); + +void func_801801B4(void *a0) { + D_8018AF54[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801801F0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180230); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801802CC); + + +extern void (*D_8018AF60[])(void); + +void func_801802EC(void *a0) { + D_8018AF60[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180328); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018AFE0; + +void func_80180368(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018AFE0, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018AFF0; + +void func_80180390(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018AFF0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801803B8); + + +extern void (*D_8018B014[])(void); + +void func_801803E0(void *a0) { + D_8018B014[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018041C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018046C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180580); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180660); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801806D4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180720); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180748); + + +extern void (*D_8018B044[])(void); + +void func_80180770(void *a0) { + D_8018B044[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801807AC); + +extern void func_80171A1C(u8 *a0); + extern s32 func_80174650(s32 arg0); + void func_80180800(s32 arg0) { + ((void (*)(s32))func_80171A1C)(arg0); + func_80174650(arg0); + } + + +void func_80180830(void) { +} + +extern void func_80174684(void *); + extern s32 func_80180860(s32); + s32 func_80180838(void) +{ + func_80174684((void *)func_80180860); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180860); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018089C); + +extern void func_80171A1C(u8 *a0); + extern s32 func_80174650(s32 arg0); + void func_801808E4(s32 param_1) { + ((void (*)(s32))func_80171A1C)(param_1); + ((void (*)(s32))func_80174650)(param_1); + } + + +void func_80180914(void) { +} + +extern void func_80174684(void *); + extern s32 func_80180944; + void func_8018091C(void) { + func_80174684(&func_80180944); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180944); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180980); + +extern void func_80171A1C(u8 *a0); + extern s32 func_80174650(s32 a0); + void func_801809B8(u8 * arg0) { + *(s16 *)(*(s32 *)((s32)arg0 + 0x20) + 0x10) = 0; + ((void (*)(void))func_80171A1C)(); + ((void (*)(s32))func_80174650)((s32)arg0); + } + + +void func_801809F0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801809F8); + + +extern void (*D_8018B068[])(void); + +void func_80180A20(void *a0) { + D_8018B068[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180A5C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180AA4); + +void func_80180AF4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180AFC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180B94); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180C2C); + + +extern void (*D_8018B074[])(void); + +void func_80180CCC(void *a0) { + D_8018B074[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180D08); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180DA8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180E60); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80180EA8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181040); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181070); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801810A4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801810D8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018110C); + + +extern void (*D_8018B090[])(void); + +void func_80181134(void *a0) { + D_8018B090[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80181170(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181190); + +void func_801811EC(void) { +} + + +extern void (*D_8018B09C[])(void); + +void func_801811F4(void *a0) { + D_8018B09C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181230); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801812C4); + + +extern void (*D_8018B0A4[])(void); + +void func_80181394(void *a0) { + D_8018B0A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801813D0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181500); + + +extern void (*D_8018B0AC[])(void); + +void func_8018162C(void *a0) { + D_8018B0AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181668); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801817A8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018181C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181884); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181914); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181B50); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181BA0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181C5C); + + +extern void (*D_8018B10C[])(void); + +void func_80181D74(void *a0) { + D_8018B10C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181DB0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80181F7C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182108); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801821D4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801822E8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182360); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801823B4); + +s32 func_801823F4(s32 *a0) { + return *(u16 *)((s32)a0 + 0x2) == 0x6; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182408); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801824B8(void *arg0) { + ((void (*)(void *, s32))func_8012AD44)(arg0, 0x8); + } + + +extern s32 func_8013CAE8(void); + void func_801824D8(void) { + func_8013CAE8(); + } + + + +extern void (*D_8018B3E0[])(void); + +void func_801824F8(void *a0) { + D_8018B3E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182534); + +void func_8018264C(void *a0) { + *(s32 *)((s32)a0 + 0x48) = 0x1400; + *(s32 *)((s32)a0 + 0x14) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018265C); + +void func_801826B4(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0xcc); + *(s16 *)(v1 + 0x8) = *(u16 *)((s32)a0 + 0x6); + *(s16 *)(v1 + 0xa) = *(u16 *)((s32)a0 + 0xa) - 0xe4; + *(s16 *)(v1 + 0xc) = *(u16 *)((s32)a0 + 0xe) + 0x8; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801826E8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182784); + +extern s32 func_8017BEBC(void); + void func_801827EC(void) { + func_8017BEBC(); + } + + +extern s32 func_8017BFA0(void); + void func_8018280C(void) { + func_8017BFA0(); + } + + +void func_8018282C(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + + +void func_80182838(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x3; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182844); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80182884(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 0x4; + func_8002D4C8(0x86E, 0); + } + + + +void func_801828B0(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0; + } + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8018290C(u8 *a0); +extern void (*D_8018B430[])(int); + +void func_801828C0(int param_1) +{ + ((void (*)(void))func_8018290C)(); + D_8018B430[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018290C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018295C); + +void func_801829F8(void) { +} + +void func_80182A00(void) { +} + + +extern s32 func_80128ED8(void *a0, void *a1); + extern s32 D_801C1350; + void func_80182A08(void *arg0) { + ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801C1350); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182A34); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182AE0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182B50); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182BE0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182C30); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182CE0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182D54); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182DA4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182E60); + +extern s32 func_80182844(void); + void func_80182EC8(void) { + func_80182844(); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182EE8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182F48); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80182FE0); + + +extern s32 D_801C13A0; + +void func_80183094(void) { + D_801C13A0 = 1; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801830A8); + +extern void (*D_8018B740[])(void); + +void func_80183890(void *a0) { + D_8018B740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801838CC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80183ACC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80183BF8); + + +extern void (*D_8018B760[])(void); + +void func_80184004(void *a0) { + D_8018B760[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184040); + + +extern void (*D_8018B77C[])(void); + +void func_801841D4(void *a0) { + D_8018B77C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184210); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801844D0); + + +extern void (*D_8018B784[])(void); + +void func_801845EC(void *a0) { + D_8018B784[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80180748(void); + void func_80184628(void) { + func_80180748(); + } + + +extern s32 func_80180838(void); + void func_80184648(void) { + func_80180838(); + } + + +extern void func_8018091C(void); + void func_80184668(void) { + func_8018091C(); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184688); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801846BC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184700); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801847E4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184814); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801848F4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184940); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801849E4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184A78); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184B00); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184B80); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184CB0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80184FA0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801850E0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018520C); + + +extern void (*D_8018B7E8[])(void); + +void func_80185334(void *a0) { + D_8018B7E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185370); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801853BC); + +void func_80185458(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018546C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801854B0); + +void func_801854F4(void *a0) { + *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + } + + +extern void func_8012C218(void *a0); + void func_80185508(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185528); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018555C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801855AC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185638); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018567C); + +extern void func_800D0694(void); + void func_8018569C(void) { + func_800D0694(); + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801856BC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185730); + +extern void (*D_801B93C4[])(void); + +void func_80185950(void *a0) { + D_801B93C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018598C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185A20); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185A44); + + +extern s16 D_801C15F4; + extern s16 D_801C15F6; + extern s16 D_801C15F8; + extern s16 D_801C15FA; + void func_80185AE4(s32 arg0, s32 arg1, s32 arg2) { + D_801C15F4 = *(u16 *)((s32)arg0 + 0x0); + D_801C15F6 = *(u16 *)((s32)arg0 + 0x2); + D_801C15F8 = arg1; + D_801C15FA = arg2; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185B14); + +extern s16 D_801C15FA; + void func_80185B8C(s32 arg0) { + *(s16 *)((s32)&D_801C15FA + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185BA8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185C00); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185CD4); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185D10); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185D5C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80185E38); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801860FC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186120); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186148); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801861D0); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018623C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801862AC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186324); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186370); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_8018648C); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801864C8); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801865DC); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_801868C0); + + +extern void (*D_801BA5B4[])(void); + +void func_80186A1C(void *a0) { + D_801BA5B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186A58); + + +extern void (*D_801BA5BC[])(void); + +void func_80186BE4(void *a0) { + D_801BA5BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186C20); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186D10); + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80178D40", func_80186E08); + + diff --git a/src/ov_SC03_028/ov_SC03_028_jr_801734BC.c b/src/ov_SC03_028/ov_SC03_028_jr_801734BC.c index 57db48ecf..cea4f5145 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_801734BC.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_801734BC.c @@ -3105,1638 +3105,3 @@ void func_80178D18(void) { D_801EC604 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EB45C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EB45C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EB45C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EB45C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EB484; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EB484 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EB440; - -s32 func_8017A3B0(void) { - switch (D_801EB440) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801EB47C; -extern short D_801EB478; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801EB47C) { - case 0: - func_800D0CA0(1); - D_801EB47C = D_801EB47C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801EB478; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801EB47C = D_801EB47C + 1; - if (D_801EB47C < 0x1E) { - return 0; - } - D_801EB47C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EB4BC; - extern s16 D_801EB4BE; - extern s16 D_801EB4C0; - extern s16 D_801EB4B4; - extern s16 D_801EB4B6; - extern s16 D_801EB4B8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EB4BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EB4BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EB4C0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EB4B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EB4B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EB4B8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EB444; -extern u16 D_801EB4C4; -extern u16 D_801EB4C6; -extern u16 D_801EB4C8; -extern s16 D_801EC590; - -void func_8017B1D8(void) { - func_8012A418(); - D_801EC590 = 0; - D_801EB444 = 0; - D_801EB4C4 = D_80126B5E; - D_801EB4C6 = D_80126B62; - D_801EB4C8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018F318[]; - extern s16 D_801EB4BC; - extern s16 D_801EB4B4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018F318[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018F318[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EB4BC; - s16 *p78C = &D_801EB4B4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EC590 = 1; - D_801EB444 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EB464; - extern SV4_8017B368 D_801EB46C; - extern s16 D_801EB4BC; - extern s16 D_801EB4B4; - extern u16 D_8018F318; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EB464; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EB46C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018F318)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018F318)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EB4BC) = loc0; - (*(SV4_8017B368 *)&D_801EB4B4) = loc1; - D_801EC590 = 1; - D_801EB444 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018F318[]; - extern s16 D_801EB4BC; - extern s16 D_801EB4BE; - extern s16 D_801EB4C0; - extern s16 D_801EB4B4; - extern s16 D_801EB4B6; - extern s16 D_801EB4B8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018F318[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018F318[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EB4BC; - s16 *p78C = &D_801EB4B4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EB4BE; - v798 = D_801EB4C0; - v78C = *p78C; - v78E = D_801EB4B6; - v790 = D_801EB4B8; - __asm__ __volatile__(""); - D_801EC590 = 1; - D_801EB444 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EB444; -extern s16 D_801EB4BC; -extern s16 D_801EB4BE; -extern s16 D_801EB4C0; -extern s16 D_801EB4B4; -extern s16 D_801EB4B6; -extern s16 D_801EB4B8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EB444 = 0; - D_801EB4BC = (s16) D_80114F30; - D_801EB4BE = (s16) D_80114F34; - D_801EB4C0 = (s16) D_80114F38; - D_801EB4B4 = (s16) D_80114F24; - D_801EB4B6 = (s16) D_80114F28; - D_801EB4B8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EB4D4; -extern s16 D_801EB4D6; -extern s16 D_801EB4D8; -extern s16 D_801EB4DC; -extern s16 D_801EB4DE; -extern s16 D_801EB4E0; - -void func_8017B824(void) { - D_801EB4D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EB4D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EB4D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EB4DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EB4DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EB4E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EB4D4; -extern s16 D_801EB4D6; -extern s16 D_801EB4D8; -extern s16 D_801EB4DC; -extern s16 D_801EB4DE; -extern s16 D_801EB4E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EB4D4; - D_80114F34 = D_801EB4D6; - D_80114F38 = D_801EB4D8; - D_80114F24 = D_801EB4DC; - D_80114F28 = D_801EB4DE; - D_80114F2C = D_801EB4E0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EB4BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801EB4B4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EB4BC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EB4B4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EB4C4; -extern u16 D_801EB4C6; -extern u16 D_801EB4C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EB444; -extern short D_801EB4CC; -extern short D_801EB4CE; -extern short D_801EB4D0; -extern s16 D_801EB4BC; -extern s16 D_801EB4BE; -extern s16 D_801EB4C0; -extern s16 D_801EB4B4; -extern s16 D_801EB4B6; -extern s16 D_801EB4B8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EB4C4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EB4C6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EB4C8); - (*(s16 *)&D_801EB4CC) = buf[0]; - (*(s16 *)&D_801EB4CE) = buf[1]; - (*(s16 *)&D_801EB4D0) = buf[2]; - D_801EB4BC = D_80114F30 + buf[0]; - D_801EB444 = 0; - D_801EB4BE = D_80114F34 + buf[1]; - D_801EB4C0 = D_80114F38 + buf[2]; - D_801EB4B4 = D_80114F24 + buf[0]; - D_801EB4B6 = D_80114F28 + buf[1]; - D_801EB4B8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EB464; -extern SV4 D_801EB46C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EB46C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EB464 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EB46C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EB46C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EB464) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EB46C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EB48C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EB48C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EB444; -extern s16 D_801EC590; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EB444 = D_801EB444 + 1; - if (D_801EB444 >= 0x1F) { - D_801EC590 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EB444; -extern s16 D_801EC590; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EB444 = D_801EB444 + 1; - if (0x18 < D_801EB444) { - func_8012A4BC(); - D_801EC590 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EB444; -extern void (*D_801EB488)(void); -extern short D_801EB4CC; -extern short D_801EB4CE; -extern short D_801EB4D0; -extern s16 D_801EC590; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EB444 = D_801EB444 + 1; - if (D_801EB444 >= 0x19) { - if (D_801EB488 != 0) { - (*D_801EB488)(); - } else { - D_80114F30 = D_80114F30 + D_801EB4CC; - D_80114F34 = D_80114F34 + D_801EB4CE; - D_80114F38 = D_80114F38 + D_801EB4D0; - D_80114F24 = D_80114F24 + D_801EB4CC; - D_80114F28 = D_80114F28 + D_801EB4CE; - D_80114F2C = D_80114F2C + D_801EB4D0; - func_8012A4BC(); - } - D_801EC590 = 0; - } -} - - - -extern void (*D_8018F3B8[])(void); - -void func_8017BE60(void *a0) { - D_8018F3B8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017BEBC); - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BEE0(s32 arg0, s32 arg1, s16 arg2) { - func_8017BF34(arg0, arg1, arg2, 0); - } - - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017C068); - - -extern void (*D_8018F418[])(void); - -void func_8017C114(void *a0) { - D_8018F418[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017C8D0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017CA6C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017CC70); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D064); - - -extern void (*D_8018F6F4[])(void); - -void func_8017D1E4(void *a0) { - D_8018F6F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D220); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D294); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D370); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D584); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D658); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D780); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D878); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017D8B8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017DC90); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017DD34); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017DF2C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017DF98); - -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); - void func_8017EE64(void *arg0) { - ((void (*)(s32, s32, s32, s32))func_80146994)(0x49, (s32)arg0, 0, 0); - } - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_8017F04C(u8 *a0); -extern void (*D_8018F774[])(int); - -void func_8017EE90(int param_1) -{ - ((void (*)(void))func_8017F04C)(); - D_8018F774[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017EEDC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F04C); - - -extern void (*D_8018F77C[])(void); - -void func_8017F094(void *a0) { - D_8018F77C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F0D0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F278); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F40C); - - -extern void (*D_8018F818[])(void); - -void func_8017F6C4(void *a0) { - D_8018F818[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F700); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017F744(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018F820[])(void); - -void func_8017F768(void *a0) { - D_8018F820[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F7A4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F7E4); - -extern s32 func_800D1EBC(void); - void func_8017F880(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F8A0); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F834; - -void func_8017F8EC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F834, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018F84C; - void func_8017F914(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F84C, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F93C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017F9D8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FA44); - -extern s16 D_80126978; - extern s16 D_8012697A; - void func_8017FABC(void) { - D_80126978 = -0x1A0; - D_8012697A = 0x200; - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FADC); - -extern void func_8012A100(s8 a0); - void func_8017FB84(void) { - ((void (*)(int))func_8012A100)(0); - } - - - -extern void (*D_8018F860[])(void); - -void func_8017FBA4(void *a0) { - D_8018F860[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FBE0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FD64); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FDC0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FE18); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8017FF68); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180100); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180120); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801802B8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801802F4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180494); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801808CC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180A08); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180AC4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80180B44); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181000); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181304); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181374); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181414); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018150C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181850); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181BD8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181D4C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80181EBC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018222C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182494); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182628); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182698); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182780); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801828DC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801829F0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182B3C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182C20); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182E2C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80182F3C); - - -extern void (*D_80190068[])(void); - -void func_80183020(void *a0) { - D_80190068[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018305C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801830B0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183104); - - -extern void (*D_801900B8[])(void); - -void func_80183228(void *a0) { - D_801900B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183264); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801833D8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183580); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183728); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801838B0); - -extern void (*D_8019025C[])(void); - -void func_80183A38(void *a0) { - D_8019025C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183A74); - - -extern void (*D_801902C0[])(void); - -void func_80183DC8(void *a0) { - D_801902C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80183E04); - -void func_80184228(void) { -} - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184230); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018430C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801843D8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801843FC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018449C); - -extern void (*D_80190400[])(void); - -void func_80184524(void *a0) { - D_80190400[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184560(void) { -} - -extern void (*D_8019040C[])(void); - -void func_80184568(void *a0) { - D_8019040C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801845A4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801847E8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184914); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184A40); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184B28); - - -extern void (*D_801904A0[])(void); - -void func_80184C54(void *a0) { - D_801904A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184C90); - - -extern void (*D_80190594[])(void); - -void func_80184E00(void *a0) { - D_80190594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184E3C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184E9C); - -void func_80184FAC(s32 *a0) { - *(s16*)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80184FB4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185028); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018509C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185158); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185344); - -extern void (*D_8019066C[])(void); - -void func_801854D8(void *a0) { - D_8019066C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_801906C8[])(void); - -void func_80185514(void *a0) { - D_801906C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_80190724[])(void); - -void func_80185550(void *a0) { - D_80190724[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018558C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018561C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018568C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801857AC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801857F4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185864); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185984); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801859CC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185A3C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185B5C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185BA4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185C14); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185D34); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185D7C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80185ED4); - - -extern void (*D_80190B50[])(void); - -void func_80186044(void *a0) { - D_80190B50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190BE4[])(void); - -void func_80186080(void *a0) { - D_80190BE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190BEC[])(void); - -void func_801860BC(void *a0) { - D_80190BEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801860F8); - - -extern void (*D_80190BF4[])(void); - -void func_801861A0(void *a0) { - D_80190BF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801861DC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018620C(u8 *a0) { - *(s8 *)(a0 + 0xFC) = 0x8; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186234); - -extern void (*D_80190BFC[])(void); - -void func_8018632C(void *a0) { - D_80190BFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186368); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801864A8); - - -extern void (*D_80190C78[])(void); - -void func_80186754(void *a0) { - D_80190C78[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80029124(s32 arg0, s32 arg1); - void func_80186790(void) { - func_80029124(0x8A, 1); - func_80029124(0xF3, 1); - } - - -extern void func_80180AC4(s32 arg0, s32 arg1); - void func_801867C0(s32 arg0) { - func_80180AC4(arg0, 0x14400); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801867E4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186838); - -void func_8018688C(void *a0) { - *(s32 *)((s32)a0 + 0xb4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186894); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801869C0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186A00); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186A88); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186B0C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186BAC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186C98); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186D0C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186D84); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186E60); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186F04); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80186FA4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187084); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801871EC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018726C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801873A8); - -void func_80187414(void) { -} - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018741C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801874D0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018753C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187610); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187688); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187730); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187860); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801878A8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187954); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801879AC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187AB0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187B04); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187C28); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187CF4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187D48); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187E14); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187EEC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80187F98); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188034); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801880AC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188164); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801881CC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188238); - - -extern void func_801292C8(u8 *a0); - s32 func_8018828C(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801882C0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801883E4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801884AC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018854C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018858C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188600); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018870C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801887A8); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801888AC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188950); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188A0C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188AE4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188BEC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188CAC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188D14); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188DC0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188EC0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188F4C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80188FF0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189094); - -extern void func_8012CBCC(s32 a0); - extern void func_8012C218(void *a0); - void func_801890E4(s32 param_1) { - if (((int (*)(void))func_8012CBCC)() != 0) { - ((void (*)(int))func_8012C218)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018911C); - -void func_80189234(void) { -} - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018923C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801892E0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189380); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018947C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189518); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801895CC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018966C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189768); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189808); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189904); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_801899A0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189A54); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189AF4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189BF0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189C90); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189D8C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189E28); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189EDC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_80189F7C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A078); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A118); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A214); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A2B0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A364); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A404); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A500); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A618); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A664); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A6E0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A724); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A800); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A878); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018A960); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AA58); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AB28); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AB7C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018ABC4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AC5C); - -extern void func_8013CB84(void); - void func_8018AD80(void) { - func_8013CB84(); - } - - -extern void func_8013C414(void *a0, void *a1); - extern s32 D_80191734; - extern s32 D_801E461C; - void func_8018ADA0(void) { - func_8013C414(&D_80191734, &D_801E461C); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018ADD0); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018ADF8); - - -extern void (*D_80190CAC[])(void); - -void func_8018AE14(void *a0) { - D_80190CAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AE50); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(int, int); -extern int D_80190C9C; - -void func_8018AE98(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - func_8001C214(v0, 0); - *(int *)(param_1 + 0x58) = (int)&D_80190C9C; - *(short *)(param_1 + 0x5c) = 0x80; - *(unsigned short *)(param_1 + 2) += 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AF04); - - -extern void (*D_80190E28[])(void); - -void func_8018AF60(void *a0) { - D_80190E28[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018AF9C); - -extern s32 func_8018B1DC(void); - s32 func_8018B19C(void) { - return func_8018B1DC(); - } - - -extern void func_80146C3C(void); - void func_8018B1BC(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B1DC); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B234); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B260); - - -extern void (*D_80190E8C[])(void); - -void func_8018B2A4(void *a0) { - D_80190E8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8018B310(s32 *a0); -extern void func_80146CA0(void *a0); - -void func_8018B2E0(s32 *a0) { - func_8018B310(a0); - ((s32 (*)(s32))func_80146CA0)((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B310); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B390); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B540); - - -extern void (*D_80190EB4[])(void); - -void func_8018B588(void *a0) { - D_80190EB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8018B5F4(s32 arg0); - extern void func_80146CA0(void *a0); - void func_8018B5C4(s32 arg0) { - func_8018B5F4(arg0); - ((s32 (*)(s32))func_80146CA0)(arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B5F4); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B698); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B774); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B87C); - - -extern void (*D_80190EC4[])(void); - -void func_8018B8C4(void *a0) { - D_80190EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_801734BC", func_8018B900); - diff --git a/src/ov_SC03_028/ov_SC03_028_jr_80178D40.c b/src/ov_SC03_028/ov_SC03_028_jr_80178D40.c new file mode 100644 index 000000000..e5641c090 --- /dev/null +++ b/src/ov_SC03_028/ov_SC03_028_jr_80178D40.c @@ -0,0 +1,5105 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018EBC0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EA7B0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018EBB4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018EBF8[]; +extern unsigned short D_8018EC00[]; +extern unsigned short D_8018EC08[]; +extern unsigned char D_801EA7B8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EA7B0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018EC10[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EA8EC; +extern M2C_UNK D_801EA8F0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EA878; +extern void (*D_8018EC40[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EA8F4[]; +extern u8 D_801EA8FC[]; +extern u8 D_801EA8AC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018EC48[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018EC64[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018EC6C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ECD4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EC78; +extern u8 D_8018EC84; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018ED08[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018ED10[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018ED64[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018ED98[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018ED88[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018EDB4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018EE2C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018EE34[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018EE3C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018EE44[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018EE4C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018EE54[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018EE60[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018EE6C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018EE78[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018EE88[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018EE98[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018EEA0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018EEA8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018EEB0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018EEB8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018EEC0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018EEC8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018EED0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018EED8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018EEE0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018EEE8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018EEF0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018EEF8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018EF00[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018EF08[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018EF10[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018EF18[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018EF20[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018EF28[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018EF30[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018EF38[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018EF40[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018EF48[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018EF8C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018EF50; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018EFBC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018EFF8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018F050[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018F060[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018F068[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018F1D0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018F1DC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E9BFC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801EC590; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EB030; +extern short D_801EC604; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801EC604) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801EC604)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EB030 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801EC604) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801EC560 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801EC560 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801EC604) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801EC604) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EB48C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EB034; + extern s32 D_801EB448; + extern s16 D_801EB44C; + extern s16 D_801EB450; + extern s16 D_801EB454; + extern s16 D_801EB458; + extern s32 D_801EB460; + extern s32 D_801EB464; + extern s32 D_801EB474; + extern s16 D_801EB478; + extern s16 D_801EB47C; + extern s32 D_801EB480; + extern s32 D_801EB488; + extern s32 D_801EB48C[10]; + extern s32 D_801EC4A8; + extern s16 D_801EC560; + extern s32 D_801EC58C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801EC560; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EB448); + D_801EB448 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EB454, D_801EB458 ? 0x48 : 0x40); + (*(s16*)&D_801EC604) = 2; + break; + case 0: + func_80179B28(D_801EB448); + D_801EB448 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EB44C, D_801EB450 ? 0x48 : 0x40); + (*(s16*)&D_801EC604) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801EC4A8 != 0) { + func_80179B28(D_801EB448); + D_801EB448 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EB44C, D_801EB450 ? 0x48 : 0x40); + (*(s16*)&D_801EC604) = 1; + } else { + (*(s16*)&D_801EC604) = 3; + } + break; + case 0x32: + func_80179B28(D_801EB448); + D_801EB448 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EB44C, + D_801EB450 ? 0x48 : 0x40); + (*(s16*)&D_801EC604) = 1; + break; + case 2: + func_80179B28(D_801EB448); + if (D_801EB460 != 0) { + D_801EB030 = D_801EB460; + D_801EB460 = 0; + (*(s16*)&D_801EC604) = 3; + return; + } + (*(s16*)&D_801EC604) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801EC604) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801EC604) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EC604) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801EC604) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801EC604) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801EC604) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EC604) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801EC604) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801EC604) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801EC604) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801EC604) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x1B: + D_801EB480 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801EC604) = 4; + D_801EB034 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801EC604) = 5; + D_801EB474 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EB474 = (s32)func_8017A3B0; + (*(s16*)&D_801EC604) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x24: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EC604) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801EC604) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801EC604) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EC604) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EC604) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801EC604) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EC604) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801EC604) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801EC604) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EB464); + (*(s16*)&D_801EC604) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EB464); + (*(s16*)&D_801EC604) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EB464); + (*(s16*)&D_801EC604) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EB464); + (*(s16*)&D_801EC604) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + break; + case 0x4E: + D_801EB488 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x2B: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801EC604) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801EC58C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801EC604) = 3; + break; + case 0x34: + (*(s16*)&D_801EC604) = 3; + D_801EB030 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EB460 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801EC604) = 3; + D_801EB030 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801EC604) = 3; + D_801EB030 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EB030 = *(s32 *)(D_801EB030 + 4); + return; + case 0x37: + (*(s16*)&D_801EC604) = 3; + D_801EB44C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EB450 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801EC604) = 3; + D_801EB454 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EB458 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801EC604) = 3; + D_801EB44C = w1; + D_801EB450 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801EC604) = 3; + D_801EB454 = w2; + D_801EB458 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + case 0x43: + D_801EB474 = (s32)func_8017A3D8; + D_801EB47C = 0; + (*(s16*)&D_801EC604) = 5; + D_801EB478 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801EC604) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801EC604) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801EC604) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EB48C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801EC604) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EB48C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801EC604) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EB48C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801EC604) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EB48C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801EC604) = 3; + break; + default: + break; + } +Lend: + D_801EB030 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EB45C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EB45C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EB45C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EB45C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EB484; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EB484 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EB440; + +s32 func_8017A3B0(void) { + switch (D_801EB440) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801EB47C; +extern short D_801EB478; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801EB47C) { + case 0: + func_800D0CA0(1); + D_801EB47C = D_801EB47C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801EB478; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801EB47C = D_801EB47C + 1; + if (D_801EB47C < 0x1E) { + return 0; + } + D_801EB47C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EB4BC; + extern s16 D_801EB4BE; + extern s16 D_801EB4C0; + extern s16 D_801EB4B4; + extern s16 D_801EB4B6; + extern s16 D_801EB4B8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EB4BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EB4BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EB4C0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EB4B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EB4B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EB4B8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EB444; +extern u16 D_801EB4C4; +extern u16 D_801EB4C6; +extern u16 D_801EB4C8; +extern s16 D_801EC590; + +void func_8017B1D8(void) { + func_8012A418(); + D_801EC590 = 0; + D_801EB444 = 0; + D_801EB4C4 = D_80126B5E; + D_801EB4C6 = D_80126B62; + D_801EB4C8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018F318[]; + extern s16 D_801EB4BC; + extern s16 D_801EB4B4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018F318[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018F318[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EB4BC; + s16 *p78C = &D_801EB4B4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801EC590 = 1; + D_801EB444 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EB464; + extern SV4_8017B368 D_801EB46C; + extern s16 D_801EB4BC; + extern s16 D_801EB4B4; + extern u16 D_8018F318; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EB464; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EB46C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018F318)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018F318)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EB4BC) = loc0; + (*(SV4_8017B368 *)&D_801EB4B4) = loc1; + D_801EC590 = 1; + D_801EB444 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018F318[]; + extern s16 D_801EB4BC; + extern s16 D_801EB4BE; + extern s16 D_801EB4C0; + extern s16 D_801EB4B4; + extern s16 D_801EB4B6; + extern s16 D_801EB4B8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018F318[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018F318[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EB4BC; + s16 *p78C = &D_801EB4B4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EB4BE; + v798 = D_801EB4C0; + v78C = *p78C; + v78E = D_801EB4B6; + v790 = D_801EB4B8; + __asm__ __volatile__(""); + D_801EC590 = 1; + D_801EB444 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EB444; +extern s16 D_801EB4BC; +extern s16 D_801EB4BE; +extern s16 D_801EB4C0; +extern s16 D_801EB4B4; +extern s16 D_801EB4B6; +extern s16 D_801EB4B8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EB444 = 0; + D_801EB4BC = (s16) D_80114F30; + D_801EB4BE = (s16) D_80114F34; + D_801EB4C0 = (s16) D_80114F38; + D_801EB4B4 = (s16) D_80114F24; + D_801EB4B6 = (s16) D_80114F28; + D_801EB4B8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EB4D4; +extern s16 D_801EB4D6; +extern s16 D_801EB4D8; +extern s16 D_801EB4DC; +extern s16 D_801EB4DE; +extern s16 D_801EB4E0; + +void func_8017B824(void) { + D_801EB4D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EB4D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EB4D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EB4DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EB4DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EB4E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EB4D4; +extern s16 D_801EB4D6; +extern s16 D_801EB4D8; +extern s16 D_801EB4DC; +extern s16 D_801EB4DE; +extern s16 D_801EB4E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EB4D4; + D_80114F34 = D_801EB4D6; + D_80114F38 = D_801EB4D8; + D_80114F24 = D_801EB4DC; + D_80114F28 = D_801EB4DE; + D_80114F2C = D_801EB4E0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EB4BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801EB4B4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EB4BC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EB4B4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EB4C4; +extern u16 D_801EB4C6; +extern u16 D_801EB4C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EB444; +extern short D_801EB4CC; +extern short D_801EB4CE; +extern short D_801EB4D0; +extern s16 D_801EB4BC; +extern s16 D_801EB4BE; +extern s16 D_801EB4C0; +extern s16 D_801EB4B4; +extern s16 D_801EB4B6; +extern s16 D_801EB4B8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EB4C4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EB4C6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EB4C8); + (*(s16 *)&D_801EB4CC) = buf[0]; + (*(s16 *)&D_801EB4CE) = buf[1]; + (*(s16 *)&D_801EB4D0) = buf[2]; + D_801EB4BC = D_80114F30 + buf[0]; + D_801EB444 = 0; + D_801EB4BE = D_80114F34 + buf[1]; + D_801EB4C0 = D_80114F38 + buf[2]; + D_801EB4B4 = D_80114F24 + buf[0]; + D_801EB4B6 = D_80114F28 + buf[1]; + D_801EB4B8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EB464; +extern SV4 D_801EB46C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EB46C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EB464 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EB46C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EB46C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EB464) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EB46C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EB48C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EB48C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EB444; +extern s16 D_801EC590; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EB444 = D_801EB444 + 1; + if (D_801EB444 >= 0x1F) { + D_801EC590 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EB444; +extern s16 D_801EC590; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EB444 = D_801EB444 + 1; + if (0x18 < D_801EB444) { + func_8012A4BC(); + D_801EC590 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EB444; +extern void (*D_801EB488)(void); +extern short D_801EB4CC; +extern short D_801EB4CE; +extern short D_801EB4D0; +extern s16 D_801EC590; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EB444 = D_801EB444 + 1; + if (D_801EB444 >= 0x19) { + if (D_801EB488 != 0) { + (*D_801EB488)(); + } else { + D_80114F30 = D_80114F30 + D_801EB4CC; + D_80114F34 = D_80114F34 + D_801EB4CE; + D_80114F38 = D_80114F38 + D_801EB4D0; + D_80114F24 = D_80114F24 + D_801EB4CC; + D_80114F28 = D_80114F28 + D_801EB4CE; + D_80114F2C = D_80114F2C + D_801EB4D0; + func_8012A4BC(); + } + D_801EC590 = 0; + } +} + + + +extern void (*D_8018F3B8[])(void); + +void func_8017BE60(void *a0) { + D_8018F3B8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017BEBC); + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BEE0(s32 arg0, s32 arg1, s16 arg2) { + func_8017BF34(arg0, arg1, arg2, 0); + } + + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017C068); + + +extern void (*D_8018F418[])(void); + +void func_8017C114(void *a0) { + D_8018F418[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017C8D0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017CA6C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017CC70); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D064); + + +extern void (*D_8018F6F4[])(void); + +void func_8017D1E4(void *a0) { + D_8018F6F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D220); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D294); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D370); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D584); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D658); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D780); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D878); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017D8B8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017DC90); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017DD34); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017DF2C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017DF98); + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_8017EE64(void *arg0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x49, (s32)arg0, 0, 0); + } + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_8017F04C(u8 *a0); +extern void (*D_8018F774[])(int); + +void func_8017EE90(int param_1) +{ + ((void (*)(void))func_8017F04C)(); + D_8018F774[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017EEDC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F04C); + + +extern void (*D_8018F77C[])(void); + +void func_8017F094(void *a0) { + D_8018F77C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F0D0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F278); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F40C); + + +extern void (*D_8018F818[])(void); + +void func_8017F6C4(void *a0) { + D_8018F818[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F700); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017F744(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018F820[])(void); + +void func_8017F768(void *a0) { + D_8018F820[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F7A4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F7E4); + +extern s32 func_800D1EBC(void); + void func_8017F880(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F8A0); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F834; + +void func_8017F8EC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F834, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018F84C; + void func_8017F914(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F84C, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F93C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017F9D8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FA44); + +extern s16 D_80126978; + extern s16 D_8012697A; + void func_8017FABC(void) { + D_80126978 = -0x1A0; + D_8012697A = 0x200; + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FADC); + +extern void func_8012A100(s8 a0); + void func_8017FB84(void) { + ((void (*)(int))func_8012A100)(0); + } + + + +extern void (*D_8018F860[])(void); + +void func_8017FBA4(void *a0) { + D_8018F860[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FBE0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FD64); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FDC0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FE18); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8017FF68); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180100); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180120); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801802B8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801802F4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180494); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801808CC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180A08); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180AC4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80180B44); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181000); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181304); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181374); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181414); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018150C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181850); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181BD8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181D4C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80181EBC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018222C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182494); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182628); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182698); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182780); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801828DC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801829F0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182B3C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182C20); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182E2C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80182F3C); + + +extern void (*D_80190068[])(void); + +void func_80183020(void *a0) { + D_80190068[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018305C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801830B0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183104); + + +extern void (*D_801900B8[])(void); + +void func_80183228(void *a0) { + D_801900B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183264); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801833D8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183580); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183728); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801838B0); + +extern void (*D_8019025C[])(void); + +void func_80183A38(void *a0) { + D_8019025C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183A74); + + +extern void (*D_801902C0[])(void); + +void func_80183DC8(void *a0) { + D_801902C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80183E04); + +void func_80184228(void) { +} + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184230); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018430C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801843D8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801843FC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018449C); + +extern void (*D_80190400[])(void); + +void func_80184524(void *a0) { + D_80190400[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184560(void) { +} + +extern void (*D_8019040C[])(void); + +void func_80184568(void *a0) { + D_8019040C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801845A4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801847E8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184914); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184A40); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184B28); + + +extern void (*D_801904A0[])(void); + +void func_80184C54(void *a0) { + D_801904A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184C90); + + +extern void (*D_80190594[])(void); + +void func_80184E00(void *a0) { + D_80190594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184E3C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184E9C); + +void func_80184FAC(s32 *a0) { + *(s16*)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80184FB4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185028); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018509C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185158); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185344); + +extern void (*D_8019066C[])(void); + +void func_801854D8(void *a0) { + D_8019066C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_801906C8[])(void); + +void func_80185514(void *a0) { + D_801906C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_80190724[])(void); + +void func_80185550(void *a0) { + D_80190724[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018558C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018561C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018568C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801857AC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801857F4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185864); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185984); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801859CC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185A3C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185B5C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185BA4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185C14); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185D34); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185D7C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80185ED4); + + +extern void (*D_80190B50[])(void); + +void func_80186044(void *a0) { + D_80190B50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190BE4[])(void); + +void func_80186080(void *a0) { + D_80190BE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190BEC[])(void); + +void func_801860BC(void *a0) { + D_80190BEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801860F8); + + +extern void (*D_80190BF4[])(void); + +void func_801861A0(void *a0) { + D_80190BF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801861DC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018620C(u8 *a0) { + *(s8 *)(a0 + 0xFC) = 0x8; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186234); + +extern void (*D_80190BFC[])(void); + +void func_8018632C(void *a0) { + D_80190BFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186368); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801864A8); + + +extern void (*D_80190C78[])(void); + +void func_80186754(void *a0) { + D_80190C78[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80029124(s32 arg0, s32 arg1); + void func_80186790(void) { + func_80029124(0x8A, 1); + func_80029124(0xF3, 1); + } + + +extern void func_80180AC4(s32 arg0, s32 arg1); + void func_801867C0(s32 arg0) { + func_80180AC4(arg0, 0x14400); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801867E4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186838); + +void func_8018688C(void *a0) { + *(s32 *)((s32)a0 + 0xb4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186894); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801869C0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186A00); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186A88); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186B0C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186BAC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186C98); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186D0C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186D84); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186E60); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186F04); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80186FA4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187084); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801871EC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018726C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801873A8); + +void func_80187414(void) { +} + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018741C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801874D0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018753C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187610); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187688); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187730); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187860); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801878A8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187954); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801879AC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187AB0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187B04); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187C28); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187CF4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187D48); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187E14); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187EEC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80187F98); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188034); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801880AC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188164); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801881CC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188238); + + +extern void func_801292C8(u8 *a0); + s32 func_8018828C(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801882C0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801883E4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801884AC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018854C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018858C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188600); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018870C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801887A8); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801888AC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188950); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188A0C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188AE4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188BEC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188CAC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188D14); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188DC0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188EC0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188F4C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80188FF0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189094); + +extern void func_8012CBCC(s32 a0); + extern void func_8012C218(void *a0); + void func_801890E4(s32 param_1) { + if (((int (*)(void))func_8012CBCC)() != 0) { + ((void (*)(int))func_8012C218)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018911C); + +void func_80189234(void) { +} + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018923C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801892E0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189380); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018947C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189518); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801895CC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018966C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189768); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189808); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189904); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_801899A0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189A54); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189AF4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189BF0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189C90); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189D8C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189E28); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189EDC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_80189F7C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A078); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A118); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A214); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A2B0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A364); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A404); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A500); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A618); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A664); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A6E0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A724); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A800); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A878); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018A960); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AA58); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AB28); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AB7C); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018ABC4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AC5C); + +extern void func_8013CB84(void); + void func_8018AD80(void) { + func_8013CB84(); + } + + +extern void func_8013C414(void *a0, void *a1); + extern s32 D_80191734; + extern s32 D_801E461C; + void func_8018ADA0(void) { + func_8013C414(&D_80191734, &D_801E461C); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018ADD0); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018ADF8); + + +extern void (*D_80190CAC[])(void); + +void func_8018AE14(void *a0) { + D_80190CAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AE50); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(int, int); +extern int D_80190C9C; + +void func_8018AE98(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + func_8001C214(v0, 0); + *(int *)(param_1 + 0x58) = (int)&D_80190C9C; + *(short *)(param_1 + 0x5c) = 0x80; + *(unsigned short *)(param_1 + 2) += 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AF04); + + +extern void (*D_80190E28[])(void); + +void func_8018AF60(void *a0) { + D_80190E28[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018AF9C); + +extern s32 func_8018B1DC(void); + s32 func_8018B19C(void) { + return func_8018B1DC(); + } + + +extern void func_80146C3C(void); + void func_8018B1BC(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B1DC); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B234); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B260); + + +extern void (*D_80190E8C[])(void); + +void func_8018B2A4(void *a0) { + D_80190E8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8018B310(s32 *a0); +extern void func_80146CA0(void *a0); + +void func_8018B2E0(s32 *a0) { + func_8018B310(a0); + ((s32 (*)(s32))func_80146CA0)((s32)a0); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B310); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B390); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B540); + + +extern void (*D_80190EB4[])(void); + +void func_8018B588(void *a0) { + D_80190EB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8018B5F4(s32 arg0); + extern void func_80146CA0(void *a0); + void func_8018B5C4(s32 arg0) { + func_8018B5F4(arg0); + ((s32 (*)(s32))func_80146CA0)(arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B5F4); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B698); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B774); + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B87C); + + +extern void (*D_80190EC4[])(void); + +void func_8018B8C4(void *a0) { + D_80190EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80178D40", func_8018B900); + + diff --git a/src/ov_SC03_029/ov_SC03_029_jr_801734BC.c b/src/ov_SC03_029/ov_SC03_029_jr_801734BC.c index 47624d405..e482bd594 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_801734BC.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_801734BC.c @@ -3105,1614 +3105,3 @@ void func_80178D18(void) { D_801D9A44 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D9434; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D9434 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D9434; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D9434 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D945C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D945C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D9418; - -s32 func_8017A3B0(void) { - switch (D_801D9418) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D9494; - extern s16 D_801D9496; - extern s16 D_801D9498; - extern s16 D_801D948C; - extern s16 D_801D948E; - extern s16 D_801D9490; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D9494, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D9496, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D9498, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D948C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D948E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D9490, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D941C; -extern u16 D_801D949C; -extern u16 D_801D949E; -extern u16 D_801D94A0; -extern s16 D_801D99D0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D99D0 = 0; - D_801D941C = 0; - D_801D949C = D_80126B5E; - D_801D949E = D_80126B62; - D_801D94A0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B150[]; - extern s16 D_801D9494; - extern s16 D_801D948C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B150[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B150[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D9494; - s16 *p78C = &D_801D948C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D99D0 = 1; - D_801D941C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D943C; - extern SV4_8017B368 D_801D9444; - extern s16 D_801D9494; - extern s16 D_801D948C; - extern u16 D_8018B150; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D943C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D9444; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B150)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B150)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D9494) = loc0; - (*(SV4_8017B368 *)&D_801D948C) = loc1; - D_801D99D0 = 1; - D_801D941C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B150[]; - extern s16 D_801D9494; - extern s16 D_801D9496; - extern s16 D_801D9498; - extern s16 D_801D948C; - extern s16 D_801D948E; - extern s16 D_801D9490; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B150[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B150[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D9494; - s16 *p78C = &D_801D948C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D9496; - v798 = D_801D9498; - v78C = *p78C; - v78E = D_801D948E; - v790 = D_801D9490; - __asm__ __volatile__(""); - D_801D99D0 = 1; - D_801D941C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D941C; -extern s16 D_801D9494; -extern s16 D_801D9496; -extern s16 D_801D9498; -extern s16 D_801D948C; -extern s16 D_801D948E; -extern s16 D_801D9490; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D941C = 0; - D_801D9494 = (s16) D_80114F30; - D_801D9496 = (s16) D_80114F34; - D_801D9498 = (s16) D_80114F38; - D_801D948C = (s16) D_80114F24; - D_801D948E = (s16) D_80114F28; - D_801D9490 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D94AC; -extern s16 D_801D94AE; -extern s16 D_801D94B0; -extern s16 D_801D94B4; -extern s16 D_801D94B6; -extern s16 D_801D94B8; - -void func_8017B824(void) { - D_801D94AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D94AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D94B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D94B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D94B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D94B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D94AC; -extern s16 D_801D94AE; -extern s16 D_801D94B0; -extern s16 D_801D94B4; -extern s16 D_801D94B6; -extern s16 D_801D94B8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D94AC; - D_80114F34 = D_801D94AE; - D_80114F38 = D_801D94B0; - D_80114F24 = D_801D94B4; - D_80114F28 = D_801D94B6; - D_80114F2C = D_801D94B8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D9494), src[8..15] -> (*(S8_8017B8E8 *)&D_801D948C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D9494) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D948C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D949C; -extern u16 D_801D949E; -extern u16 D_801D94A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D941C; -extern short D_801D94A4; -extern short D_801D94A6; -extern short D_801D94A8; -extern s16 D_801D9494; -extern s16 D_801D9496; -extern s16 D_801D9498; -extern s16 D_801D948C; -extern s16 D_801D948E; -extern s16 D_801D9490; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D949C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D949E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D94A0); - (*(s16 *)&D_801D94A4) = buf[0]; - (*(s16 *)&D_801D94A6) = buf[1]; - (*(s16 *)&D_801D94A8) = buf[2]; - D_801D9494 = D_80114F30 + buf[0]; - D_801D941C = 0; - D_801D9496 = D_80114F34 + buf[1]; - D_801D9498 = D_80114F38 + buf[2]; - D_801D948C = D_80114F24 + buf[0]; - D_801D948E = D_80114F28 + buf[1]; - D_801D9490 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D943C; -extern SV4 D_801D9444; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D9444) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D943C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D9444 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D9444)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D943C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D9444) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D9464[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D9464; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D941C; -extern s16 D_801D99D0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D941C = D_801D941C + 1; - if (D_801D941C >= 0x1F) { - D_801D99D0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D941C; -extern s16 D_801D99D0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D941C = D_801D941C + 1; - if (0x18 < D_801D941C) { - func_8012A4BC(); - D_801D99D0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D941C; -extern void (*D_801D9460)(void); -extern short D_801D94A4; -extern short D_801D94A6; -extern short D_801D94A8; -extern s16 D_801D99D0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D941C = D_801D941C + 1; - if (D_801D941C >= 0x19) { - if (D_801D9460 != 0) { - (*D_801D9460)(); - } else { - D_80114F30 = D_80114F30 + D_801D94A4; - D_80114F34 = D_80114F34 + D_801D94A6; - D_80114F38 = D_80114F38 + D_801D94A8; - D_80114F24 = D_80114F24 + D_801D94A4; - D_80114F28 = D_80114F28 + D_801D94A6; - D_80114F2C = D_80114F2C + D_801D94A8; - func_8012A4BC(); - } - D_801D99D0 = 0; - } -} - - - -extern void (*D_8018B1F0[])(void); - -void func_8017BE60(void *a0) { - D_8018B1F0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_8018B214[])(void); - -void func_8017BEBC(void *a0) { - D_8018B214[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_8018B21C[])(void); - -void func_8017C150(void *a0) { - D_8018B21C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018B208; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018B208, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017C3C4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017C750); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017C9C8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CB10); - - -extern void (*D_8018B334[])(void); - -void func_8017CC90(void *a0) { - D_8018B334[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CCCC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CD18); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CE0C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CE8C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017CFAC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D038); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D058); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D0AC); - - -extern void (*D_8018B38C[])(void); - -void func_8017D0E8(void *a0) { - D_8018B38C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D124); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D1D0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D254); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D3BC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D408); - - -extern void (*D_8018B3A0[])(void); - -void func_8017D714(void *a0) { - D_8018B3A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D750); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D790); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D800); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D88C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D960); - - -extern void (*D_8018B3B4[])(void); - -void func_8017D9B4(void *a0) { - D_8018B3B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017D9F0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017DAA4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017DC70); - - -extern void (*D_8018B568[])(void); - -void func_8017EB50(void *a0) { - D_8018B568[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EB8C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EBD0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018B570[])(void); - -void func_8017EBF4(void *a0) { - D_8018B570[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EC30); - - -extern void (*D_8018B578[])(void); - -void func_8017EC74(void *a0) { - D_8018B578[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017ECB0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017ECF0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017ED6C(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018B584[])(void); - -void func_8017ED8C(void *a0) { - D_8018B584[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EDC8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EE08); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EE7C); - - -extern void (*D_8018B590[])(void); - -void func_8017EE9C(void *a0) { - D_8018B590[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EED8); - - -extern void (*D_8018B59C[])(void); - -void func_8017EF4C(void *a0) { - D_8018B59C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017EF88); - - -extern void (*D_8018B5A8[])(void); - -void func_8017F024(void *a0) { - D_8018B5A8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F060); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017F0A4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F0C8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F0F0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F118); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F140); - - -extern void (*D_8018B614[])(void); - -void func_8017F168(void *a0) { - D_8018B614[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F1A4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F1E4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F298); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F310); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F378); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F3AC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F49C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F4C4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F590); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F658); - - -extern void (*D_8018B624[])(void); - -void func_8017F724(void *a0) { - D_8018B624[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017F760); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FA2C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FA84); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FC50); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FCE0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FD74); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FDB4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FE08); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FE60); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8017FF7C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180088); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801800D0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801801AC); - -void func_80180234(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 1; - *(s16 *)((s32)a0 + 0x34) = 0; - *(s16 *)(v1 + 0x10) = 0; - *(s16 *)((s32)a0 + 0x5E) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180250); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801802C4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801803B0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180410); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180444); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801804A0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180904); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801809A4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180B44); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180B84); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180D3C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180E94); - - -extern void (*D_8018B92C[])(void); - -void func_80180F00(void *a0) { - D_8018B92C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180F3C); - - -extern void (*D_8018B934[])(void); - -void func_80180FB0(void *a0) { - D_8018B934[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80180FEC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801810BC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018118C); - -void func_8018127C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181284); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181338); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801813FC); - - -extern void (*D_8018B944[])(void); - -void func_801814B0(void *a0) { - D_8018B944[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801814EC); - -void func_80181554(void) { -} - - -extern void (*D_8018B94C[])(void); - -void func_8018155C(void *a0) { - D_8018B94C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181598); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181600); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801816C8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181708); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801817D8); - - -extern void (*D_8018B9B8[])(void); - -void func_80181838(void *a0) { - D_8018B9B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80181874(void) { -} - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018187C); - -extern s32 func_800D0CE0(s32 arg); - extern void func_8012C098(void); - void func_801818B4(void *a0) { - if (func_800D0CE0((s32)a0)) { - ((void (*)(s32))func_8012C098)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801818EC); - - -extern void (*D_8018BB08[])(void); - -void func_80181940(void *a0) { - D_8018BB08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018197C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181A30); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181D9C); - - -extern void (*D_8018BBBC[])(void); - -void func_80181E44(void *a0) { - D_8018BBBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80181E80(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80181EA0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182050); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801820E4); - - -extern void (*D_8018BC04[])(void); - -void func_801821B8(void *a0) { - D_8018BC04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801821F4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018223C); - -void func_80182308(void) { -} - -extern s32 D_8012704C; - void func_80182310(void) { - D_8012704C = 1; - } - - - -extern void (*D_8018BC1C[])(void); - -void func_80182324(void *a0) { - D_8018BC1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182360); - -void func_801823C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801823D0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018246C); - - -extern void (*D_8018BCBC[])(void); - -void func_80182544(void *a0) { - D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182580); - -void func_80182628(void) { -} - -extern void (*D_8018BCC4[])(void); - -void func_80182630(void *a0) { - D_8018BCC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018266C); - -void func_80182700(void) { -} - - -extern void (*D_8018BCFC[])(void); - -void func_80182708(void *a0) { - D_8018BCFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182744); - -void func_80182858(void) { -} - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182860); - - -extern void (*D_8018BD9C[])(void); - -void func_8018288C(void *a0) { - D_8018BD9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801828C8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801828F8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182958); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801829F4); - - -extern void (*D_8018BE04[])(void); - -void func_80182A14(void *a0) { - D_8018BE04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182A50); - -void func_80182AB4(void) { -} - -extern void func_80178CBC(s32 a0, s32 a1); -extern short D_8018BDEC; - -void func_80182ABC(void *a0) { - func_80178CBC((s32)a0, (s32)&D_8018BDEC); - *(short *)((char *)a0 + 2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182AF4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182B34); - - -extern void (*D_801C4250[])(void); - -void func_80182B90(void *a0) { - D_801C4250[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182BCC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182CA4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182D70); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182E84); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182F08); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80182FC4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801830B8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183154); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801831B4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183214); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183270); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801832C0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018330C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801833BC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801833EC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183600); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183654); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801836FC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183744); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183818); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183878); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801838EC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183928); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183968); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801839D8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183AC0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183C7C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183CC4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183E70); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80183F70); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184008); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801841F8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184344); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801844B0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184520); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184580); - - -extern void (*D_801C4954[])(void); - -void func_80184658(void *a0) { - D_801C4954[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184694); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184764); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801847FC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184958); - - -extern void (*D_801C49BC[])(void); - -void func_80184AA8(void *a0) { - D_801C49BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184AE4(void *a0) { - *(short *)((char *)a0 + 0x2) = 1; - *(int *)((char *)a0 + 0x1c) = 2; - *(unsigned char *)((char *)a0 + 0xfc) = 1; - *(unsigned char *)((char *)a0 + 0xfe) = 2; - *(unsigned char *)((char *)a0 + 0xfd) = 0; - *(unsigned char *)((char *)a0 + 0xff) = 4; - *(short *)((char *)a0 + 0xdc) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184B18); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184B70); - - -extern void (*D_801C49F0[])(void); - -void func_80184C0C(void *a0) { - D_801C49F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184C48); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184D34); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184DC8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184ED0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80184FF0); - - -extern void (*D_801C4A40[])(void); - -void func_8018533C(void *a0) { - D_801C4A40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185378); - - -extern void (*D_801C89CC[])(void); - -void func_801853F8(void *a0) { - D_801C89CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185434); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185508); - -void func_80185530(void) { -} - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185538); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185684); - - -extern void func_8012C218(void *a0); - s32 func_801857A4(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801857D0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801857E0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801857F0); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80185830(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185864); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185888); - - -extern void (*D_801C89F4[])(void); - -void func_801858EC(void *a0) { - D_801C89F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185928); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801859B0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185A70); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185AE0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185BD8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185C4C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185D08); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185D9C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185DFC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185F38); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80185FE8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801860C0); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801862B8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186320); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186448); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186514); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186660); - -extern void func_8013240C(s32 a0); -extern s32 D_801D98C8; - -void func_801866A4(void) { - ((void (*)(s32))func_8013240C)((s32)&D_801D98C8); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801866CC); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186758); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186A34); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186B4C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186CE4); - -extern void func_8013240C(s32 a0); -extern s32 D_801D98C8; - -void func_80186D34(void) { - ((void (*)(s32))func_8013240C)((s32)&D_801D98C8); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186D5C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186D90); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186DD4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186ECC); - - -extern s32 rand(void); - void func_80186F60(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0x1; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80186F9C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80187050); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801870B8); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80187118); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018723C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_801872B4); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80187318); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80187478); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_8018765C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_801734BC", func_80187718); - diff --git a/src/ov_SC03_029/ov_SC03_029_jr_80178D40.c b/src/ov_SC03_029/ov_SC03_029_jr_80178D40.c new file mode 100644 index 000000000..f1b4803bc --- /dev/null +++ b/src/ov_SC03_029/ov_SC03_029_jr_80178D40.c @@ -0,0 +1,5081 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018A9F8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D8788; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018A9EC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018AA30[]; +extern unsigned short D_8018AA38[]; +extern unsigned short D_8018AA40[]; +extern unsigned char D_801D8790[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D8788; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018AA48[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D88C4; +extern M2C_UNK D_801D88C8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D8850; +extern void (*D_8018AA78[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D88CC[]; +extern u8 D_801D88D4[]; +extern u8 D_801D8884[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018AA80[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018AA9C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018AAA4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018AB0C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018AAB0; +extern u8 D_8018AABC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018AB40[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018AB48[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018AB9C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018ABD0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018ABC0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018ABEC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018AC64[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018AC6C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018AC74[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018AC7C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018AC84[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018AC8C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018AC98[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018ACA4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018ACB0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018ACC0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018ACD0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018ACD8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018ACE0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018ACE8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018ACF0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018ACF8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018AD00[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018AD08[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018AD10[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018AD18[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018AD20[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018AD28[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018AD30[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018AD38[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018AD40[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018AD48[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018AD50[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018AD58[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018AD60[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018AD68[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018AD70[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018AD78[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018AD80[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018ADC4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018AD88; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018ADF4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018AE30[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018AE88[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018AE98[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018AEA0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018B008[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018B014[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D7D30; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D99D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D9008; +extern short D_801D9A44; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D9A44) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D9A44)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D9008 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D9A44) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D99A0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D99A0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D9A44) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D9A44) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D9464[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D900C; + extern s32 D_801D9420; + extern s16 D_801D9424; + extern s16 D_801D9428; + extern s16 D_801D942C; + extern s16 D_801D9430; + extern s32 D_801D9438; + extern s32 D_801D943C; + extern s32 D_801D944C; + extern s16 D_801D9450; + extern s16 D_801D9454; + extern s32 D_801D9458; + extern s32 D_801D9460; + extern s32 D_801D9464[10]; + extern s32 D_801D98E8; + extern s16 D_801D99A0; + extern s32 D_801D99CC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D99A0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D9420); + D_801D9420 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D942C, D_801D9430 ? 0x48 : 0x40); + (*(s16*)&D_801D9A44) = 2; + break; + case 0: + func_80179B28(D_801D9420); + D_801D9420 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D9424, D_801D9428 ? 0x48 : 0x40); + (*(s16*)&D_801D9A44) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D98E8 != 0) { + func_80179B28(D_801D9420); + D_801D9420 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D9424, D_801D9428 ? 0x48 : 0x40); + (*(s16*)&D_801D9A44) = 1; + } else { + (*(s16*)&D_801D9A44) = 3; + } + break; + case 0x32: + func_80179B28(D_801D9420); + D_801D9420 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D9424, + D_801D9428 ? 0x48 : 0x40); + (*(s16*)&D_801D9A44) = 1; + break; + case 2: + func_80179B28(D_801D9420); + if (D_801D9438 != 0) { + D_801D9008 = D_801D9438; + D_801D9438 = 0; + (*(s16*)&D_801D9A44) = 3; + return; + } + (*(s16*)&D_801D9A44) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D9A44) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D9A44) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D9A44) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D9A44) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D9A44) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x1B: + D_801D9458 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D9A44) = 4; + D_801D900C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D9A44) = 5; + D_801D944C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D944C = (s32)func_8017A3B0; + (*(s16*)&D_801D9A44) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x24: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D9A44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D9A44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D9A44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D9A44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D9A44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D9A44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D9A44) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D9A44) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D9A44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D943C); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D943C); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D943C); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D943C); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x4E: + D_801D9460 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x2B: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D9A44) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D99CC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x34: + (*(s16*)&D_801D9A44) = 3; + D_801D9008 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D9438 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D9A44) = 3; + D_801D9008 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D9A44) = 3; + D_801D9008 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D9008 = *(s32 *)(D_801D9008 + 4); + return; + case 0x37: + (*(s16*)&D_801D9A44) = 3; + D_801D9424 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D9428 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D9A44) = 3; + D_801D942C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D9430 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D9A44) = 3; + D_801D9424 = w1; + D_801D9428 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D9A44) = 3; + D_801D942C = w2; + D_801D9430 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x43: + D_801D944C = (s32)func_8017A3D8; + D_801D9454 = 0; + (*(s16*)&D_801D9A44) = 5; + D_801D9450 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D9A44) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D9A44) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D9464; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D9A44) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D9464; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D9A44) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D9464[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D9A44) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D9464; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D9A44) = 3; + break; + default: + break; + } +Lend: + D_801D9008 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D9434; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D9434 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D9434; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D9434 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D945C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D945C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D9418; + +s32 func_8017A3B0(void) { + switch (D_801D9418) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D9494; + extern s16 D_801D9496; + extern s16 D_801D9498; + extern s16 D_801D948C; + extern s16 D_801D948E; + extern s16 D_801D9490; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D9494, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D9496, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D9498, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D948C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D948E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D9490, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D941C; +extern u16 D_801D949C; +extern u16 D_801D949E; +extern u16 D_801D94A0; +extern s16 D_801D99D0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D99D0 = 0; + D_801D941C = 0; + D_801D949C = D_80126B5E; + D_801D949E = D_80126B62; + D_801D94A0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B150[]; + extern s16 D_801D9494; + extern s16 D_801D948C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B150[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B150[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D9494; + s16 *p78C = &D_801D948C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D99D0 = 1; + D_801D941C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D943C; + extern SV4_8017B368 D_801D9444; + extern s16 D_801D9494; + extern s16 D_801D948C; + extern u16 D_8018B150; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D943C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D9444; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B150)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B150)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D9494) = loc0; + (*(SV4_8017B368 *)&D_801D948C) = loc1; + D_801D99D0 = 1; + D_801D941C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B150[]; + extern s16 D_801D9494; + extern s16 D_801D9496; + extern s16 D_801D9498; + extern s16 D_801D948C; + extern s16 D_801D948E; + extern s16 D_801D9490; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B150[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B150[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D9494; + s16 *p78C = &D_801D948C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D9496; + v798 = D_801D9498; + v78C = *p78C; + v78E = D_801D948E; + v790 = D_801D9490; + __asm__ __volatile__(""); + D_801D99D0 = 1; + D_801D941C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D941C; +extern s16 D_801D9494; +extern s16 D_801D9496; +extern s16 D_801D9498; +extern s16 D_801D948C; +extern s16 D_801D948E; +extern s16 D_801D9490; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D941C = 0; + D_801D9494 = (s16) D_80114F30; + D_801D9496 = (s16) D_80114F34; + D_801D9498 = (s16) D_80114F38; + D_801D948C = (s16) D_80114F24; + D_801D948E = (s16) D_80114F28; + D_801D9490 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D94AC; +extern s16 D_801D94AE; +extern s16 D_801D94B0; +extern s16 D_801D94B4; +extern s16 D_801D94B6; +extern s16 D_801D94B8; + +void func_8017B824(void) { + D_801D94AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D94AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D94B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D94B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D94B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D94B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D94AC; +extern s16 D_801D94AE; +extern s16 D_801D94B0; +extern s16 D_801D94B4; +extern s16 D_801D94B6; +extern s16 D_801D94B8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D94AC; + D_80114F34 = D_801D94AE; + D_80114F38 = D_801D94B0; + D_80114F24 = D_801D94B4; + D_80114F28 = D_801D94B6; + D_80114F2C = D_801D94B8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D9494), src[8..15] -> (*(S8_8017B8E8 *)&D_801D948C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D9494) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D948C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D949C; +extern u16 D_801D949E; +extern u16 D_801D94A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D941C; +extern short D_801D94A4; +extern short D_801D94A6; +extern short D_801D94A8; +extern s16 D_801D9494; +extern s16 D_801D9496; +extern s16 D_801D9498; +extern s16 D_801D948C; +extern s16 D_801D948E; +extern s16 D_801D9490; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D949C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D949E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D94A0); + (*(s16 *)&D_801D94A4) = buf[0]; + (*(s16 *)&D_801D94A6) = buf[1]; + (*(s16 *)&D_801D94A8) = buf[2]; + D_801D9494 = D_80114F30 + buf[0]; + D_801D941C = 0; + D_801D9496 = D_80114F34 + buf[1]; + D_801D9498 = D_80114F38 + buf[2]; + D_801D948C = D_80114F24 + buf[0]; + D_801D948E = D_80114F28 + buf[1]; + D_801D9490 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D943C; +extern SV4 D_801D9444; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D9444) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D943C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D9444 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D9444)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D943C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D9444) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D9464[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D9464; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D941C; +extern s16 D_801D99D0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D941C = D_801D941C + 1; + if (D_801D941C >= 0x1F) { + D_801D99D0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D941C; +extern s16 D_801D99D0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D941C = D_801D941C + 1; + if (0x18 < D_801D941C) { + func_8012A4BC(); + D_801D99D0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D941C; +extern void (*D_801D9460)(void); +extern short D_801D94A4; +extern short D_801D94A6; +extern short D_801D94A8; +extern s16 D_801D99D0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D941C = D_801D941C + 1; + if (D_801D941C >= 0x19) { + if (D_801D9460 != 0) { + (*D_801D9460)(); + } else { + D_80114F30 = D_80114F30 + D_801D94A4; + D_80114F34 = D_80114F34 + D_801D94A6; + D_80114F38 = D_80114F38 + D_801D94A8; + D_80114F24 = D_80114F24 + D_801D94A4; + D_80114F28 = D_80114F28 + D_801D94A6; + D_80114F2C = D_80114F2C + D_801D94A8; + func_8012A4BC(); + } + D_801D99D0 = 0; + } +} + + + +extern void (*D_8018B1F0[])(void); + +void func_8017BE60(void *a0) { + D_8018B1F0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_8018B214[])(void); + +void func_8017BEBC(void *a0) { + D_8018B214[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_8018B21C[])(void); + +void func_8017C150(void *a0) { + D_8018B21C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018B208; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018B208, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017C3C4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017C750); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017C9C8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CB10); + + +extern void (*D_8018B334[])(void); + +void func_8017CC90(void *a0) { + D_8018B334[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CCCC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CD18); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CE0C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CE8C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017CFAC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D038); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D058); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D0AC); + + +extern void (*D_8018B38C[])(void); + +void func_8017D0E8(void *a0) { + D_8018B38C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D124); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D1D0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D254); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D3BC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D408); + + +extern void (*D_8018B3A0[])(void); + +void func_8017D714(void *a0) { + D_8018B3A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D750); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D790); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D800); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D88C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D960); + + +extern void (*D_8018B3B4[])(void); + +void func_8017D9B4(void *a0) { + D_8018B3B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017D9F0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017DAA4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017DC70); + + +extern void (*D_8018B568[])(void); + +void func_8017EB50(void *a0) { + D_8018B568[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EB8C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EBD0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018B570[])(void); + +void func_8017EBF4(void *a0) { + D_8018B570[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EC30); + + +extern void (*D_8018B578[])(void); + +void func_8017EC74(void *a0) { + D_8018B578[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017ECB0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017ECF0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017ED6C(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018B584[])(void); + +void func_8017ED8C(void *a0) { + D_8018B584[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EDC8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EE08); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EE7C); + + +extern void (*D_8018B590[])(void); + +void func_8017EE9C(void *a0) { + D_8018B590[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EED8); + + +extern void (*D_8018B59C[])(void); + +void func_8017EF4C(void *a0) { + D_8018B59C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017EF88); + + +extern void (*D_8018B5A8[])(void); + +void func_8017F024(void *a0) { + D_8018B5A8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F060); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017F0A4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F0C8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F0F0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F118); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F140); + + +extern void (*D_8018B614[])(void); + +void func_8017F168(void *a0) { + D_8018B614[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F1A4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F1E4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F298); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F310); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F378); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F3AC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F49C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F4C4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F590); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F658); + + +extern void (*D_8018B624[])(void); + +void func_8017F724(void *a0) { + D_8018B624[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017F760); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FA2C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FA84); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FC50); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FCE0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FD74); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FDB4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FE08); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FE60); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8017FF7C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180088); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801800D0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801801AC); + +void func_80180234(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 1; + *(s16 *)((s32)a0 + 0x34) = 0; + *(s16 *)(v1 + 0x10) = 0; + *(s16 *)((s32)a0 + 0x5E) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180250); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801802C4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801803B0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180410); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180444); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801804A0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180904); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801809A4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180B44); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180B84); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180D3C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180E94); + + +extern void (*D_8018B92C[])(void); + +void func_80180F00(void *a0) { + D_8018B92C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180F3C); + + +extern void (*D_8018B934[])(void); + +void func_80180FB0(void *a0) { + D_8018B934[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80180FEC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801810BC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018118C); + +void func_8018127C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181284); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181338); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801813FC); + + +extern void (*D_8018B944[])(void); + +void func_801814B0(void *a0) { + D_8018B944[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801814EC); + +void func_80181554(void) { +} + + +extern void (*D_8018B94C[])(void); + +void func_8018155C(void *a0) { + D_8018B94C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181598); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181600); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801816C8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181708); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801817D8); + + +extern void (*D_8018B9B8[])(void); + +void func_80181838(void *a0) { + D_8018B9B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80181874(void) { +} + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018187C); + +extern s32 func_800D0CE0(s32 arg); + extern void func_8012C098(void); + void func_801818B4(void *a0) { + if (func_800D0CE0((s32)a0)) { + ((void (*)(s32))func_8012C098)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801818EC); + + +extern void (*D_8018BB08[])(void); + +void func_80181940(void *a0) { + D_8018BB08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018197C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181A30); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181D9C); + + +extern void (*D_8018BBBC[])(void); + +void func_80181E44(void *a0) { + D_8018BBBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80181E80(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80181EA0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182050); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801820E4); + + +extern void (*D_8018BC04[])(void); + +void func_801821B8(void *a0) { + D_8018BC04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801821F4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018223C); + +void func_80182308(void) { +} + +extern s32 D_8012704C; + void func_80182310(void) { + D_8012704C = 1; + } + + + +extern void (*D_8018BC1C[])(void); + +void func_80182324(void *a0) { + D_8018BC1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182360); + +void func_801823C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801823D0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018246C); + + +extern void (*D_8018BCBC[])(void); + +void func_80182544(void *a0) { + D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182580); + +void func_80182628(void) { +} + +extern void (*D_8018BCC4[])(void); + +void func_80182630(void *a0) { + D_8018BCC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018266C); + +void func_80182700(void) { +} + + +extern void (*D_8018BCFC[])(void); + +void func_80182708(void *a0) { + D_8018BCFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182744); + +void func_80182858(void) { +} + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182860); + + +extern void (*D_8018BD9C[])(void); + +void func_8018288C(void *a0) { + D_8018BD9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801828C8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801828F8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182958); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801829F4); + + +extern void (*D_8018BE04[])(void); + +void func_80182A14(void *a0) { + D_8018BE04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182A50); + +void func_80182AB4(void) { +} + +extern void func_80178CBC(s32 a0, s32 a1); +extern short D_8018BDEC; + +void func_80182ABC(void *a0) { + func_80178CBC((s32)a0, (s32)&D_8018BDEC); + *(short *)((char *)a0 + 2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182AF4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182B34); + + +extern void (*D_801C4250[])(void); + +void func_80182B90(void *a0) { + D_801C4250[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182BCC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182CA4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182D70); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182E84); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182F08); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80182FC4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801830B8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183154); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801831B4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183214); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183270); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801832C0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018330C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801833BC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801833EC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183600); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183654); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801836FC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183744); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183818); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183878); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801838EC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183928); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183968); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801839D8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183AC0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183C7C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183CC4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183E70); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80183F70); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184008); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801841F8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184344); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801844B0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184520); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184580); + + +extern void (*D_801C4954[])(void); + +void func_80184658(void *a0) { + D_801C4954[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184694); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184764); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801847FC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184958); + + +extern void (*D_801C49BC[])(void); + +void func_80184AA8(void *a0) { + D_801C49BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184AE4(void *a0) { + *(short *)((char *)a0 + 0x2) = 1; + *(int *)((char *)a0 + 0x1c) = 2; + *(unsigned char *)((char *)a0 + 0xfc) = 1; + *(unsigned char *)((char *)a0 + 0xfe) = 2; + *(unsigned char *)((char *)a0 + 0xfd) = 0; + *(unsigned char *)((char *)a0 + 0xff) = 4; + *(short *)((char *)a0 + 0xdc) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184B18); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184B70); + + +extern void (*D_801C49F0[])(void); + +void func_80184C0C(void *a0) { + D_801C49F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184C48); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184D34); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184DC8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184ED0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80184FF0); + + +extern void (*D_801C4A40[])(void); + +void func_8018533C(void *a0) { + D_801C4A40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185378); + + +extern void (*D_801C89CC[])(void); + +void func_801853F8(void *a0) { + D_801C89CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185434); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185508); + +void func_80185530(void) { +} + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185538); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185684); + + +extern void func_8012C218(void *a0); + s32 func_801857A4(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801857D0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801857E0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801857F0); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80185830(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185864); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185888); + + +extern void (*D_801C89F4[])(void); + +void func_801858EC(void *a0) { + D_801C89F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185928); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801859B0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185A70); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185AE0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185BD8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185C4C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185D08); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185D9C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185DFC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185F38); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80185FE8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801860C0); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801862B8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186320); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186448); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186514); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186660); + +extern void func_8013240C(s32 a0); +extern s32 D_801D98C8; + +void func_801866A4(void) { + ((void (*)(s32))func_8013240C)((s32)&D_801D98C8); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801866CC); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186758); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186A34); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186B4C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186CE4); + +extern void func_8013240C(s32 a0); +extern s32 D_801D98C8; + +void func_80186D34(void) { + ((void (*)(s32))func_8013240C)((s32)&D_801D98C8); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186D5C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186D90); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186DD4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186ECC); + + +extern s32 rand(void); + void func_80186F60(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0x1; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80186F9C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80187050); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801870B8); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80187118); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018723C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_801872B4); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80187318); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80187478); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_8018765C); + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_80178D40", func_80187718); + + diff --git a/src/ov_SC03_030/ov_SC03_030_jr_801734BC.c b/src/ov_SC03_030/ov_SC03_030_jr_801734BC.c index 7b298ce9c..f4085e1c1 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_801734BC.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_801734BC.c @@ -3105,1221 +3105,3 @@ void func_80178D18(void) { D_801E1C3C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E1A2C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E1A2C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E1A2C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E1A2C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E1A54; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E1A54 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E1A10; - -s32 func_8017A3B0(void) { - switch (D_801E1A10) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E1A4C; -extern short D_801E1A48; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E1A4C) { - case 0: - func_800D0CA0(1); - D_801E1A4C = D_801E1A4C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E1A48; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E1A4C = D_801E1A4C + 1; - if (D_801E1A4C < 0x1E) { - return 0; - } - D_801E1A4C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E1A8C; - extern s16 D_801E1A8E; - extern s16 D_801E1A90; - extern s16 D_801E1A84; - extern s16 D_801E1A86; - extern s16 D_801E1A88; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E1A8C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E1A8E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E1A90, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E1A84, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E1A86, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E1A88, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E1A14; -extern u16 D_801E1A94; -extern u16 D_801E1A96; -extern u16 D_801E1A98; -extern s16 D_801E1BC8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E1BC8 = 0; - D_801E1A14 = 0; - D_801E1A94 = D_80126B5E; - D_801E1A96 = D_80126B62; - D_801E1A98 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018578C[]; - extern s16 D_801E1A8C; - extern s16 D_801E1A84; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018578C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018578C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E1A8C; - s16 *p78C = &D_801E1A84; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E1BC8 = 1; - D_801E1A14 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E1A34; - extern SV4_8017B368 D_801E1A3C; - extern s16 D_801E1A8C; - extern s16 D_801E1A84; - extern u16 D_8018578C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E1A34; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E1A3C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018578C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018578C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E1A8C) = loc0; - (*(SV4_8017B368 *)&D_801E1A84) = loc1; - D_801E1BC8 = 1; - D_801E1A14 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018578C[]; - extern s16 D_801E1A8C; - extern s16 D_801E1A8E; - extern s16 D_801E1A90; - extern s16 D_801E1A84; - extern s16 D_801E1A86; - extern s16 D_801E1A88; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018578C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018578C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E1A8C; - s16 *p78C = &D_801E1A84; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E1A8E; - v798 = D_801E1A90; - v78C = *p78C; - v78E = D_801E1A86; - v790 = D_801E1A88; - __asm__ __volatile__(""); - D_801E1BC8 = 1; - D_801E1A14 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1A14; -extern s16 D_801E1A8C; -extern s16 D_801E1A8E; -extern s16 D_801E1A90; -extern s16 D_801E1A84; -extern s16 D_801E1A86; -extern s16 D_801E1A88; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E1A14 = 0; - D_801E1A8C = (s16) D_80114F30; - D_801E1A8E = (s16) D_80114F34; - D_801E1A90 = (s16) D_80114F38; - D_801E1A84 = (s16) D_80114F24; - D_801E1A86 = (s16) D_80114F28; - D_801E1A88 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E1AA4; -extern s16 D_801E1AA6; -extern s16 D_801E1AA8; -extern s16 D_801E1AAC; -extern s16 D_801E1AAE; -extern s16 D_801E1AB0; - -void func_8017B824(void) { - D_801E1AA4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E1AA6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E1AA8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E1AAC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E1AAE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E1AB0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E1AA4; -extern s16 D_801E1AA6; -extern s16 D_801E1AA8; -extern s16 D_801E1AAC; -extern s16 D_801E1AAE; -extern s16 D_801E1AB0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E1AA4; - D_80114F34 = D_801E1AA6; - D_80114F38 = D_801E1AA8; - D_80114F24 = D_801E1AAC; - D_80114F28 = D_801E1AAE; - D_80114F2C = D_801E1AB0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E1A8C), src[8..15] -> (*(S8_8017B8E8 *)&D_801E1A84) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E1A8C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E1A84) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E1A94; -extern u16 D_801E1A96; -extern u16 D_801E1A98; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1A14; -extern short D_801E1A9C; -extern short D_801E1A9E; -extern short D_801E1AA0; -extern s16 D_801E1A8C; -extern s16 D_801E1A8E; -extern s16 D_801E1A90; -extern s16 D_801E1A84; -extern s16 D_801E1A86; -extern s16 D_801E1A88; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E1A94); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E1A96); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E1A98); - (*(s16 *)&D_801E1A9C) = buf[0]; - (*(s16 *)&D_801E1A9E) = buf[1]; - (*(s16 *)&D_801E1AA0) = buf[2]; - D_801E1A8C = D_80114F30 + buf[0]; - D_801E1A14 = 0; - D_801E1A8E = D_80114F34 + buf[1]; - D_801E1A90 = D_80114F38 + buf[2]; - D_801E1A84 = D_80114F24 + buf[0]; - D_801E1A86 = D_80114F28 + buf[1]; - D_801E1A88 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E1A34; -extern SV4 D_801E1A3C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E1A3C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E1A34 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E1A3C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E1A3C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E1A34) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E1A3C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E1A5C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E1A5C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E1A14; -extern s16 D_801E1BC8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E1A14 = D_801E1A14 + 1; - if (D_801E1A14 >= 0x1F) { - D_801E1BC8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E1A14; -extern s16 D_801E1BC8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1A14 = D_801E1A14 + 1; - if (0x18 < D_801E1A14) { - func_8012A4BC(); - D_801E1BC8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E1A14; -extern void (*D_801E1A58)(void); -extern short D_801E1A9C; -extern short D_801E1A9E; -extern short D_801E1AA0; -extern s16 D_801E1BC8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1A14 = D_801E1A14 + 1; - if (D_801E1A14 >= 0x19) { - if (D_801E1A58 != 0) { - (*D_801E1A58)(); - } else { - D_80114F30 = D_80114F30 + D_801E1A9C; - D_80114F34 = D_80114F34 + D_801E1A9E; - D_80114F38 = D_80114F38 + D_801E1AA0; - D_80114F24 = D_80114F24 + D_801E1A9C; - D_80114F28 = D_80114F28 + D_801E1A9E; - D_80114F2C = D_80114F2C + D_801E1AA0; - func_8012A4BC(); - } - D_801E1BC8 = 0; - } -} - - - -extern void (*D_8018582C[])(void); - -void func_8017BE60(void *a0) { - D_8018582C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80185850[])(void); - -void func_8017BEBC(void *a0) { - D_80185850[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80185858[])(void); - -void func_8017C150(void *a0) { - D_80185858[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80185844; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80185844, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017C294); - -DEFINE_func_8017C66C() /* dedup: shared engine-core @0x8017C66C (src/shared) */ - - -// @class: regalloc-order -// @stuck: none — MATCH (126 ins) - -int func_8017C710(short *param_1, short *param_2, short *param_3, int param_4) { - register int i2o __asm__("$5"); - register int i4o __asm__("$9"); - short sVar1; int rx, rz, uVar5; - i4o = param_2[1]; - __asm__ __volatile__("" : : "r"(i4o)); - i2o = param_1[1]; uVar5 = 0; - if (i2o >= i4o) { - rx = param_1[0] - i2o * (param_2[0] - param_1[0]); - rz = param_1[2] - i2o * (param_2[2] - param_1[2]); - } else { - register int den __asm__("$3"); - int p2x = param_2[0], p2z = param_2[2]; - den = i2o - i4o; - rx = p2x + i4o * (p2x - param_1[0]) / den; - rz = p2z + i4o * (p2z - param_1[2]) / den; - } - if (rx >= -0x7fff) { i2o = 0x7fff; if (rx < 0x8000) i2o = rx; } - else i2o = -0x7fff; - *param_3 = (short)i2o; - if (rz >= -0x7fff) { i2o = 0x7fff; if (rz < 0x8000) i2o = rz; } - else i2o = -0x7fff; - param_3[2] = (short)i2o; param_3[1] = 0; sVar1 = (short)param_4; - if ((int)*param_3 < *param_1 - param_4) { uVar5 = 0xffffffff; *param_3 = *param_1 - sVar1; } - if (*param_1 + param_4 < (int)*param_3) { uVar5 = 0xffffffff; *param_3 = *param_1 + sVar1; } - if ((int)param_3[2] < param_1[2] - param_4) { uVar5 = 0xffffffff; param_3[2] = param_1[2] - sVar1; } - if (param_1[2] + param_4 < (int)param_3[2]) { uVar5 = 0xffffffff; param_3[2] = param_1[2] + sVar1; } - return uVar5; -} - - -DEFINE_func_8017C908() /* dedup: shared engine-core @0x8017C908 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017C974); - - -extern void (*D_801858D8[])(void); - -void func_8017D840(void *a0) { - D_801858D8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017D87C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D8C0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801858E0[])(void); - -void func_8017D8E4(void *a0) { - D_801858E0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017D920); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D960(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D9DC(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017D9FC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DA24); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DA4C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DAFC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DB98); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DC20); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DC88); - -extern s32 func_80171990(u8 *a0); - extern void func_8017DD08(s32); - void func_8017DCD8(s32 arg0) { - ((s32 (*)(s32))func_80171990)(arg0); - func_8017DD08(arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DD08); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DD80); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DE60); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DEB0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DF1C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DF54); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017DFA0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E090); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E194); - -extern void func_8017E1E8(void *a0); - void func_8017E1BC(u8 *a0) { - *(u16 *)(a0 + 0xAE) |= 0xFF00; - ((void (*)(void))func_8017E1E8)(); - } - - -void func_8017E1E8(void *a0) { - *(u16 *)((char *)a0 + 0xaa) &= 0xff00; - *(u16 *)((char *)a0 + 0xac) &= 0xff00; - } - - -extern s32 func_80012DBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017E204(void *param_1) { - *(short *)((char *)param_1 + 0x132) = func_80012DBC(*(short *)((char *)param_1 + 0x132), 0, - 0xa, 1); - } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E240); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E2A0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E2C8); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E354); - - -extern void (*D_80185960[])(void); - -void func_8017E3F4(void *a0) { - D_80185960[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E430); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E484); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E50C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E5F8); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E790); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017E7D4); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017EB98); - - -extern void (*D_80185974[])(void); - -void func_8017EBF8(void *a0) { - D_80185974[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017EC34); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017ECA8); - - -extern void (*D_8018597C[])(void); - -void func_8017ED30(void *a0) { - D_8018597C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017ED6C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017EDD4); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017EEE0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017EFD8); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F018); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F0E8); - - -extern void (*D_80186160[])(void); - -void func_8017F17C(void *a0) { - D_80186160[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F1B8); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F26C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F5D8); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_80186494[]; - -extern s32 func_8012C0EC(s32 a0); - -void func_8017F670(int param_1) -{ - D_80186494[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012C0EC)(param_1); - return; -} - - -extern s32 func_8012AD50(void *a0); - void func_8017F6C0(void) { - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F6E0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017F8BC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017FA6C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017FB04); - - -extern void (*D_8018686C[])(void); - -void func_8017FC50(void *a0) { - D_8018686C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017FC8C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8017FCBC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180054); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801801E8); - - -extern void (*D_80186884[])(void); - -void func_80180280(void *a0) { - D_80186884[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801802BC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180398); - - -extern void (*D_8018688C[])(void); - -void func_80180458(void *a0) { - D_8018688C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180494); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801804F4); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018055C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801805BC); - -void func_80180660(void) { -} - - -extern void (*D_801868A4[])(void); - -void func_80180668(void *a0) { - D_801868A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801806A4); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180714); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801807A0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180800); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180880); - -void func_801808E8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801808F0); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180960); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180A3C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180B04); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180B44); - - -extern void (*D_801869A4[])(void); - -void func_80180CA0(void *a0) { - D_801869A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180CDC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180D6C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180DAC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180E0C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80180F14); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018101C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018107C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018112C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181178); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181214); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018127C); - - -extern void (*D_801869F0[])(void); - -void func_80181300(void *a0) { - D_801869F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018133C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801813BC); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_8018141C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_801814F4); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181708); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181824); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181A60); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181C08); - - -extern void (*D_80186A44[])(void); - -void func_80181C44(void *a0) { - D_80186A44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181C80); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_801734BC", func_80181D48); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80181DC0(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -extern s32 func_80181DF8(void); - -s32 func_80181DF8(void) { - return 0x1A; -} - diff --git a/src/ov_SC03_030/ov_SC03_030_jr_80178D40.c b/src/ov_SC03_030/ov_SC03_030_jr_80178D40.c new file mode 100644 index 000000000..cc486d761 --- /dev/null +++ b/src/ov_SC03_030/ov_SC03_030_jr_80178D40.c @@ -0,0 +1,4688 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185034[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E0D80; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185028[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018506C[]; +extern unsigned short D_80185074[]; +extern unsigned short D_8018507C[]; +extern unsigned char D_801E0D88[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E0D80; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185084[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E0EBC; +extern M2C_UNK D_801E0EC0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E0E48; +extern void (*D_801850B4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E0EC4[]; +extern u8 D_801E0ECC[]; +extern u8 D_801E0E7C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801850BC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801850D8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801850E0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185148[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801850EC; +extern u8 D_801850F8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018517C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185184[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801851D8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018520C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801851FC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185228; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801852A0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801852A8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801852B0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801852B8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801852C0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801852C8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801852D4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801852E0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801852EC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801852FC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018530C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185314[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018531C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185324[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018532C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185334[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018533C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185344[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018534C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185354[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018535C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185364[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018536C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185374[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018537C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185384[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018538C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185394[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018539C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801853A4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801853AC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801853B4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801853BC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185400[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801853C4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185430[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018546C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801854C4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801854D4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801854DC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185644[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185650[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E03D4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E1BC8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E1600; +extern short D_801E1C3C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E1C3C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E1C3C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E1600 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E1C3C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E1B98 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E1B98 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E1C3C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E1C3C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E1A5C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E1604; + extern s32 D_801E1A18; + extern s16 D_801E1A1C; + extern s16 D_801E1A20; + extern s16 D_801E1A24; + extern s16 D_801E1A28; + extern s32 D_801E1A30; + extern s32 D_801E1A34; + extern s32 D_801E1A44; + extern s16 D_801E1A48; + extern s16 D_801E1A4C; + extern s32 D_801E1A50; + extern s32 D_801E1A58; + extern s32 D_801E1A5C[10]; + extern s32 D_801E1AE0; + extern s16 D_801E1B98; + extern s32 D_801E1BC4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E1B98; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E1A18); + D_801E1A18 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1A24, D_801E1A28 ? 0x48 : 0x40); + (*(s16*)&D_801E1C3C) = 2; + break; + case 0: + func_80179B28(D_801E1A18); + D_801E1A18 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1A1C, D_801E1A20 ? 0x48 : 0x40); + (*(s16*)&D_801E1C3C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E1AE0 != 0) { + func_80179B28(D_801E1A18); + D_801E1A18 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E1A1C, D_801E1A20 ? 0x48 : 0x40); + (*(s16*)&D_801E1C3C) = 1; + } else { + (*(s16*)&D_801E1C3C) = 3; + } + break; + case 0x32: + func_80179B28(D_801E1A18); + D_801E1A18 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E1A1C, + D_801E1A20 ? 0x48 : 0x40); + (*(s16*)&D_801E1C3C) = 1; + break; + case 2: + func_80179B28(D_801E1A18); + if (D_801E1A30 != 0) { + D_801E1600 = D_801E1A30; + D_801E1A30 = 0; + (*(s16*)&D_801E1C3C) = 3; + return; + } + (*(s16*)&D_801E1C3C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E1C3C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E1C3C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E1C3C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x1B: + D_801E1A50 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E1C3C) = 4; + D_801E1604 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E1C3C) = 5; + D_801E1A44 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E1A44 = (s32)func_8017A3B0; + (*(s16*)&D_801E1C3C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x24: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E1C3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E1C3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E1C3C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1C3C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1C3C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1C3C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E1C3C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1A34); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1A34); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1A34); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1A34); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x4E: + D_801E1A58 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x2B: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E1C3C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E1BC4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x34: + (*(s16*)&D_801E1C3C) = 3; + D_801E1600 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E1A30 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E1C3C) = 3; + D_801E1600 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E1C3C) = 3; + D_801E1600 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E1600 = *(s32 *)(D_801E1600 + 4); + return; + case 0x37: + (*(s16*)&D_801E1C3C) = 3; + D_801E1A1C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1A20 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E1C3C) = 3; + D_801E1A24 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1A28 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E1C3C) = 3; + D_801E1A1C = w1; + D_801E1A20 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E1C3C) = 3; + D_801E1A24 = w2; + D_801E1A28 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x43: + D_801E1A44 = (s32)func_8017A3D8; + D_801E1A4C = 0; + (*(s16*)&D_801E1C3C) = 5; + D_801E1A48 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1C3C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1C3C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E1A5C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E1C3C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E1A5C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E1C3C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E1A5C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E1C3C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E1A5C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E1C3C) = 3; + break; + default: + break; + } +Lend: + D_801E1600 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E1A2C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E1A2C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E1A2C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E1A2C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E1A54; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E1A54 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E1A10; + +s32 func_8017A3B0(void) { + switch (D_801E1A10) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E1A4C; +extern short D_801E1A48; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E1A4C) { + case 0: + func_800D0CA0(1); + D_801E1A4C = D_801E1A4C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E1A48; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E1A4C = D_801E1A4C + 1; + if (D_801E1A4C < 0x1E) { + return 0; + } + D_801E1A4C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E1A8C; + extern s16 D_801E1A8E; + extern s16 D_801E1A90; + extern s16 D_801E1A84; + extern s16 D_801E1A86; + extern s16 D_801E1A88; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E1A8C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E1A8E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E1A90, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E1A84, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E1A86, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E1A88, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E1A14; +extern u16 D_801E1A94; +extern u16 D_801E1A96; +extern u16 D_801E1A98; +extern s16 D_801E1BC8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E1BC8 = 0; + D_801E1A14 = 0; + D_801E1A94 = D_80126B5E; + D_801E1A96 = D_80126B62; + D_801E1A98 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018578C[]; + extern s16 D_801E1A8C; + extern s16 D_801E1A84; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018578C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018578C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E1A8C; + s16 *p78C = &D_801E1A84; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E1BC8 = 1; + D_801E1A14 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E1A34; + extern SV4_8017B368 D_801E1A3C; + extern s16 D_801E1A8C; + extern s16 D_801E1A84; + extern u16 D_8018578C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E1A34; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E1A3C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018578C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018578C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E1A8C) = loc0; + (*(SV4_8017B368 *)&D_801E1A84) = loc1; + D_801E1BC8 = 1; + D_801E1A14 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018578C[]; + extern s16 D_801E1A8C; + extern s16 D_801E1A8E; + extern s16 D_801E1A90; + extern s16 D_801E1A84; + extern s16 D_801E1A86; + extern s16 D_801E1A88; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018578C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018578C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E1A8C; + s16 *p78C = &D_801E1A84; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E1A8E; + v798 = D_801E1A90; + v78C = *p78C; + v78E = D_801E1A86; + v790 = D_801E1A88; + __asm__ __volatile__(""); + D_801E1BC8 = 1; + D_801E1A14 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1A14; +extern s16 D_801E1A8C; +extern s16 D_801E1A8E; +extern s16 D_801E1A90; +extern s16 D_801E1A84; +extern s16 D_801E1A86; +extern s16 D_801E1A88; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E1A14 = 0; + D_801E1A8C = (s16) D_80114F30; + D_801E1A8E = (s16) D_80114F34; + D_801E1A90 = (s16) D_80114F38; + D_801E1A84 = (s16) D_80114F24; + D_801E1A86 = (s16) D_80114F28; + D_801E1A88 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E1AA4; +extern s16 D_801E1AA6; +extern s16 D_801E1AA8; +extern s16 D_801E1AAC; +extern s16 D_801E1AAE; +extern s16 D_801E1AB0; + +void func_8017B824(void) { + D_801E1AA4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E1AA6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E1AA8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E1AAC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E1AAE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E1AB0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E1AA4; +extern s16 D_801E1AA6; +extern s16 D_801E1AA8; +extern s16 D_801E1AAC; +extern s16 D_801E1AAE; +extern s16 D_801E1AB0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E1AA4; + D_80114F34 = D_801E1AA6; + D_80114F38 = D_801E1AA8; + D_80114F24 = D_801E1AAC; + D_80114F28 = D_801E1AAE; + D_80114F2C = D_801E1AB0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E1A8C), src[8..15] -> (*(S8_8017B8E8 *)&D_801E1A84) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E1A8C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E1A84) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E1A94; +extern u16 D_801E1A96; +extern u16 D_801E1A98; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1A14; +extern short D_801E1A9C; +extern short D_801E1A9E; +extern short D_801E1AA0; +extern s16 D_801E1A8C; +extern s16 D_801E1A8E; +extern s16 D_801E1A90; +extern s16 D_801E1A84; +extern s16 D_801E1A86; +extern s16 D_801E1A88; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E1A94); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E1A96); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E1A98); + (*(s16 *)&D_801E1A9C) = buf[0]; + (*(s16 *)&D_801E1A9E) = buf[1]; + (*(s16 *)&D_801E1AA0) = buf[2]; + D_801E1A8C = D_80114F30 + buf[0]; + D_801E1A14 = 0; + D_801E1A8E = D_80114F34 + buf[1]; + D_801E1A90 = D_80114F38 + buf[2]; + D_801E1A84 = D_80114F24 + buf[0]; + D_801E1A86 = D_80114F28 + buf[1]; + D_801E1A88 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E1A34; +extern SV4 D_801E1A3C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E1A3C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E1A34 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E1A3C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E1A3C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E1A34) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E1A3C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E1A5C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E1A5C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E1A14; +extern s16 D_801E1BC8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E1A14 = D_801E1A14 + 1; + if (D_801E1A14 >= 0x1F) { + D_801E1BC8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E1A14; +extern s16 D_801E1BC8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1A14 = D_801E1A14 + 1; + if (0x18 < D_801E1A14) { + func_8012A4BC(); + D_801E1BC8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E1A14; +extern void (*D_801E1A58)(void); +extern short D_801E1A9C; +extern short D_801E1A9E; +extern short D_801E1AA0; +extern s16 D_801E1BC8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1A14 = D_801E1A14 + 1; + if (D_801E1A14 >= 0x19) { + if (D_801E1A58 != 0) { + (*D_801E1A58)(); + } else { + D_80114F30 = D_80114F30 + D_801E1A9C; + D_80114F34 = D_80114F34 + D_801E1A9E; + D_80114F38 = D_80114F38 + D_801E1AA0; + D_80114F24 = D_80114F24 + D_801E1A9C; + D_80114F28 = D_80114F28 + D_801E1A9E; + D_80114F2C = D_80114F2C + D_801E1AA0; + func_8012A4BC(); + } + D_801E1BC8 = 0; + } +} + + + +extern void (*D_8018582C[])(void); + +void func_8017BE60(void *a0) { + D_8018582C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80185850[])(void); + +void func_8017BEBC(void *a0) { + D_80185850[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80185858[])(void); + +void func_8017C150(void *a0) { + D_80185858[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80185844; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80185844, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017C294); + +DEFINE_func_8017C66C() /* dedup: shared engine-core @0x8017C66C (src/shared) */ + + +// @class: regalloc-order +// @stuck: none — MATCH (126 ins) + +int func_8017C710(short *param_1, short *param_2, short *param_3, int param_4) { + register int i2o __asm__("$5"); + register int i4o __asm__("$9"); + short sVar1; int rx, rz, uVar5; + i4o = param_2[1]; + __asm__ __volatile__("" : : "r"(i4o)); + i2o = param_1[1]; uVar5 = 0; + if (i2o >= i4o) { + rx = param_1[0] - i2o * (param_2[0] - param_1[0]); + rz = param_1[2] - i2o * (param_2[2] - param_1[2]); + } else { + register int den __asm__("$3"); + int p2x = param_2[0], p2z = param_2[2]; + den = i2o - i4o; + rx = p2x + i4o * (p2x - param_1[0]) / den; + rz = p2z + i4o * (p2z - param_1[2]) / den; + } + if (rx >= -0x7fff) { i2o = 0x7fff; if (rx < 0x8000) i2o = rx; } + else i2o = -0x7fff; + *param_3 = (short)i2o; + if (rz >= -0x7fff) { i2o = 0x7fff; if (rz < 0x8000) i2o = rz; } + else i2o = -0x7fff; + param_3[2] = (short)i2o; param_3[1] = 0; sVar1 = (short)param_4; + if ((int)*param_3 < *param_1 - param_4) { uVar5 = 0xffffffff; *param_3 = *param_1 - sVar1; } + if (*param_1 + param_4 < (int)*param_3) { uVar5 = 0xffffffff; *param_3 = *param_1 + sVar1; } + if ((int)param_3[2] < param_1[2] - param_4) { uVar5 = 0xffffffff; param_3[2] = param_1[2] - sVar1; } + if (param_1[2] + param_4 < (int)param_3[2]) { uVar5 = 0xffffffff; param_3[2] = param_1[2] + sVar1; } + return uVar5; +} + + +DEFINE_func_8017C908() /* dedup: shared engine-core @0x8017C908 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017C974); + + +extern void (*D_801858D8[])(void); + +void func_8017D840(void *a0) { + D_801858D8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017D87C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D8C0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801858E0[])(void); + +void func_8017D8E4(void *a0) { + D_801858E0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017D920); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D960(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D9DC(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017D9FC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DA24); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DA4C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DAFC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DB98); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DC20); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DC88); + +extern s32 func_80171990(u8 *a0); + extern void func_8017DD08(s32); + void func_8017DCD8(s32 arg0) { + ((s32 (*)(s32))func_80171990)(arg0); + func_8017DD08(arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DD08); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DD80); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DE60); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DEB0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DF1C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DF54); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017DFA0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E090); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E194); + +extern void func_8017E1E8(void *a0); + void func_8017E1BC(u8 *a0) { + *(u16 *)(a0 + 0xAE) |= 0xFF00; + ((void (*)(void))func_8017E1E8)(); + } + + +void func_8017E1E8(void *a0) { + *(u16 *)((char *)a0 + 0xaa) &= 0xff00; + *(u16 *)((char *)a0 + 0xac) &= 0xff00; + } + + +extern s32 func_80012DBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017E204(void *param_1) { + *(short *)((char *)param_1 + 0x132) = func_80012DBC(*(short *)((char *)param_1 + 0x132), 0, + 0xa, 1); + } + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E240); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E2A0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E2C8); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E354); + + +extern void (*D_80185960[])(void); + +void func_8017E3F4(void *a0) { + D_80185960[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E430); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E484); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E50C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E5F8); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E790); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017E7D4); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017EB98); + + +extern void (*D_80185974[])(void); + +void func_8017EBF8(void *a0) { + D_80185974[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017EC34); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017ECA8); + + +extern void (*D_8018597C[])(void); + +void func_8017ED30(void *a0) { + D_8018597C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017ED6C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017EDD4); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017EEE0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017EFD8); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F018); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F0E8); + + +extern void (*D_80186160[])(void); + +void func_8017F17C(void *a0) { + D_80186160[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F1B8); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F26C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F5D8); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_80186494[]; + +extern s32 func_8012C0EC(s32 a0); + +void func_8017F670(int param_1) +{ + D_80186494[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012C0EC)(param_1); + return; +} + + +extern s32 func_8012AD50(void *a0); + void func_8017F6C0(void) { + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F6E0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017F8BC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017FA6C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017FB04); + + +extern void (*D_8018686C[])(void); + +void func_8017FC50(void *a0) { + D_8018686C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017FC8C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8017FCBC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180054); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801801E8); + + +extern void (*D_80186884[])(void); + +void func_80180280(void *a0) { + D_80186884[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801802BC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180398); + + +extern void (*D_8018688C[])(void); + +void func_80180458(void *a0) { + D_8018688C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180494); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801804F4); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018055C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801805BC); + +void func_80180660(void) { +} + + +extern void (*D_801868A4[])(void); + +void func_80180668(void *a0) { + D_801868A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801806A4); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180714); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801807A0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180800); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180880); + +void func_801808E8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801808F0); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180960); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180A3C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180B04); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180B44); + + +extern void (*D_801869A4[])(void); + +void func_80180CA0(void *a0) { + D_801869A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180CDC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180D6C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180DAC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180E0C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80180F14); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018101C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018107C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018112C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181178); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181214); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018127C); + + +extern void (*D_801869F0[])(void); + +void func_80181300(void *a0) { + D_801869F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018133C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801813BC); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_8018141C); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_801814F4); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181708); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181824); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181A60); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181C08); + + +extern void (*D_80186A44[])(void); + +void func_80181C44(void *a0) { + D_80186A44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181C80); + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_80178D40", func_80181D48); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80181DC0(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +extern s32 func_80181DF8(void); + +s32 func_80181DF8(void) { + return 0x1A; +} + + diff --git a/src/ov_SC03_031/ov_SC03_031_jr_801734BC.c b/src/ov_SC03_031/ov_SC03_031_jr_801734BC.c index dec516ded..723d52188 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_801734BC.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_801734BC.c @@ -3105,1184 +3105,3 @@ void func_80178D18(void) { D_801C62A4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C5E2C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C5E2C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C5E2C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C5E2C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C5E54; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C5E54 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C5E10; - -s32 func_8017A3B0(void) { - switch (D_801C5E10) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C5E4C; -extern short D_801C5E48; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C5E4C) { - case 0: - func_800D0CA0(1); - D_801C5E4C = D_801C5E4C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C5E48; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C5E4C = D_801C5E4C + 1; - if (D_801C5E4C < 0x1E) { - return 0; - } - D_801C5E4C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C5E8C; - extern s16 D_801C5E8E; - extern s16 D_801C5E90; - extern s16 D_801C5E84; - extern s16 D_801C5E86; - extern s16 D_801C5E88; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C5E8C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C5E8E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C5E90, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C5E84, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C5E86, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5E88, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C5E14; -extern u16 D_801C5E94; -extern u16 D_801C5E96; -extern u16 D_801C5E98; -extern s16 D_801C6230; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C6230 = 0; - D_801C5E14 = 0; - D_801C5E94 = D_80126B5E; - D_801C5E96 = D_80126B62; - D_801C5E98 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CA8[]; - extern s16 D_801C5E8C; - extern s16 D_801C5E84; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C5E8C; - s16 *p78C = &D_801C5E84; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C6230 = 1; - D_801C5E14 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C5E34; - extern SV4_8017B368 D_801C5E3C; - extern s16 D_801C5E8C; - extern s16 D_801C5E84; - extern u16 D_80185CA8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C5E34; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C5E3C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CA8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CA8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C5E8C) = loc0; - (*(SV4_8017B368 *)&D_801C5E84) = loc1; - D_801C6230 = 1; - D_801C5E14 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185CA8[]; - extern s16 D_801C5E8C; - extern s16 D_801C5E8E; - extern s16 D_801C5E90; - extern s16 D_801C5E84; - extern s16 D_801C5E86; - extern s16 D_801C5E88; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185CA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185CA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C5E8C; - s16 *p78C = &D_801C5E84; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C5E8E; - v798 = D_801C5E90; - v78C = *p78C; - v78E = D_801C5E86; - v790 = D_801C5E88; - __asm__ __volatile__(""); - D_801C6230 = 1; - D_801C5E14 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C5E14; -extern s16 D_801C5E8C; -extern s16 D_801C5E8E; -extern s16 D_801C5E90; -extern s16 D_801C5E84; -extern s16 D_801C5E86; -extern s16 D_801C5E88; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C5E14 = 0; - D_801C5E8C = (s16) D_80114F30; - D_801C5E8E = (s16) D_80114F34; - D_801C5E90 = (s16) D_80114F38; - D_801C5E84 = (s16) D_80114F24; - D_801C5E86 = (s16) D_80114F28; - D_801C5E88 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C5EA4; -extern s16 D_801C5EA6; -extern s16 D_801C5EA8; -extern s16 D_801C5EAC; -extern s16 D_801C5EAE; -extern s16 D_801C5EB0; - -void func_8017B824(void) { - D_801C5EA4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C5EA6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C5EA8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C5EAC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C5EAE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C5EB0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C5EA4; -extern s16 D_801C5EA6; -extern s16 D_801C5EA8; -extern s16 D_801C5EAC; -extern s16 D_801C5EAE; -extern s16 D_801C5EB0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C5EA4; - D_80114F34 = D_801C5EA6; - D_80114F38 = D_801C5EA8; - D_80114F24 = D_801C5EAC; - D_80114F28 = D_801C5EAE; - D_80114F2C = D_801C5EB0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C5E8C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C5E84) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C5E8C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C5E84) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C5E94; -extern u16 D_801C5E96; -extern u16 D_801C5E98; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C5E14; -extern short D_801C5E9C; -extern short D_801C5E9E; -extern short D_801C5EA0; -extern s16 D_801C5E8C; -extern s16 D_801C5E8E; -extern s16 D_801C5E90; -extern s16 D_801C5E84; -extern s16 D_801C5E86; -extern s16 D_801C5E88; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C5E94); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C5E96); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C5E98); - (*(s16 *)&D_801C5E9C) = buf[0]; - (*(s16 *)&D_801C5E9E) = buf[1]; - (*(s16 *)&D_801C5EA0) = buf[2]; - D_801C5E8C = D_80114F30 + buf[0]; - D_801C5E14 = 0; - D_801C5E8E = D_80114F34 + buf[1]; - D_801C5E90 = D_80114F38 + buf[2]; - D_801C5E84 = D_80114F24 + buf[0]; - D_801C5E86 = D_80114F28 + buf[1]; - D_801C5E88 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C5E34; -extern SV4 D_801C5E3C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C5E3C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C5E34 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C5E3C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C5E3C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C5E34) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C5E3C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C5E5C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C5E5C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C5E14; -extern s16 D_801C6230; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C5E14 = D_801C5E14 + 1; - if (D_801C5E14 >= 0x1F) { - D_801C6230 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C5E14; -extern s16 D_801C6230; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C5E14 = D_801C5E14 + 1; - if (0x18 < D_801C5E14) { - func_8012A4BC(); - D_801C6230 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C5E14; -extern void (*D_801C5E58)(void); -extern short D_801C5E9C; -extern short D_801C5E9E; -extern short D_801C5EA0; -extern s16 D_801C6230; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C5E14 = D_801C5E14 + 1; - if (D_801C5E14 >= 0x19) { - if (D_801C5E58 != 0) { - (*D_801C5E58)(); - } else { - D_80114F30 = D_80114F30 + D_801C5E9C; - D_80114F34 = D_80114F34 + D_801C5E9E; - D_80114F38 = D_80114F38 + D_801C5EA0; - D_80114F24 = D_80114F24 + D_801C5E9C; - D_80114F28 = D_80114F28 + D_801C5E9E; - D_80114F2C = D_80114F2C + D_801C5EA0; - func_8012A4BC(); - } - D_801C6230 = 0; - } -} - - - -extern void (*D_80185D48[])(void); - -void func_8017BE60(void *a0) { - D_80185D48[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017BF88); - - -extern void (*D_80185D60[])(void); - -void func_8017C0E4(void *a0) { - D_80185D60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C180); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C2B0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C63C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017C9FC); - - -extern void (*D_80185E78[])(void); - -void func_8017CB7C(void *a0) { - D_80185E78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CBB8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CC04); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CCF8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CD78); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CE2C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CE98); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CF24); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CF44); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017CF98); - - -extern void (*D_80185ED0[])(void); - -void func_8017CFD4(void *a0) { - D_80185ED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D010); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D060); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D140); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D2A8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D2F4); - - -extern void (*D_80185EE4[])(void); - -void func_8017D600(void *a0) { - D_80185EE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D63C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D67C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D6EC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D778); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D84C); - - -extern void (*D_80185EF8[])(void); - -void func_8017D8A0(void *a0) { - D_80185EF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D8DC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D990); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017D9EC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017DB5C); - - -extern void (*D_80185F78[])(void); - -void func_8017EA3C(void *a0) { - D_80185F78[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EA78); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EABC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80185F80[])(void); - -void func_8017EAE0(void *a0) { - D_80185F80[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EB1C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EB5C); - -extern void func_800D1EBC(void); - void func_8017EBF8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185F8C[])(void); - -void func_8017EC18(void *a0) { - D_80185F8C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EC54); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017ECC8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017ECF0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017ED18); - - -extern void (*D_80185FB8[])(void); - -void func_8017EDBC(void *a0) { - D_80185FB8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EDF8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017EE98); - - -extern void (*D_80186150[])(void); - -void func_8017F074(void *a0) { - D_80186150[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F0B0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F1B4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F23C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F28C); - -extern void func_8012B200(u8 *a0); - extern s32 func_8017F860(void *a0); - void func_8017F35C(u8 *a0) { - *(s16 *)(a0 + 0x2) = 0x5; - ((void (*)(s32 *))func_8012B200)((s32 *)a0); - func_8017F860(a0); - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F394); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F428); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F6B8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F728); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F860); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017F95C); - - -extern void (*D_801861E0[])(void); - -void func_8017FA7C(void *a0) { - D_801861E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FAB8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FB84); - - -extern void (*D_80186298[])(void); - -void func_8017FBE8(void *a0) { - D_80186298[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FC24); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FD00); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FDE4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FE54); - -void func_8017FF18(void) { -} - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FF20); - - -extern void (*D_80186434[])(void); - -void func_8017FF88(void *a0) { - D_80186434[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8017FFC4); - -void listCdBuffer(void) { -} - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180008); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8018004C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180090); - - -extern void (*D_80186618[])(void); - -void func_801800D4(void *a0) { - D_80186618[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180110(void *a0) { - *(short *)((char *)a0 + 0x2) = 1; - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8018011C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801801C0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180204); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801802E4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801803AC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8018043C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801804EC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801805B8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180680); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180710); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801807C0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180878); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180940); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801809D0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180A80); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180B38); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180C00); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180C90); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180D40); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180DF8); - -void func_80180E54(void) { -} - -extern s32 func_8013CB84(void); - void func_80180E5C(void) { - func_8013CB84(); - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180E7C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180E98); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180F0C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80180FE4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181030); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801BF01C; - void func_80181138(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801BF01C); - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181168); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801811EC); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801813B4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801813F8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8018156C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801815EC); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80181690(void) { - func_8002D4C8(0x6AA, 0); - } - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801816B4(u8 *a0) { - if (*(u8 *)(a0 + 0x5E) == 0xC) { - func_8002D4C8(0x9DA, 0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801816E4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181728); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801817D0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181894); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801818E4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801819D0); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181A98); - - -extern void (*D_801BFB74[])(void); - -void func_80181B3C(void *a0) { - D_801BFB74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181B78); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181C4C); - -void func_80181C74(void) { -} - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181C7C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181DC8); - -extern void func_8012C218(void *a0); - void func_80181EE8(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181F14); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181F24); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181F34); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80181F74(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181FA8); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80181FCC); - - -extern void (*D_801BFB9C[])(void); - -void func_80182030(void *a0) { - D_801BFB9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_8018206C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801820F4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_801821B4); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_801734BC", func_80182224); - diff --git a/src/ov_SC03_031/ov_SC03_031_jr_80178D40.c b/src/ov_SC03_031/ov_SC03_031_jr_80178D40.c new file mode 100644 index 000000000..d16bebe9e --- /dev/null +++ b/src/ov_SC03_031/ov_SC03_031_jr_80178D40.c @@ -0,0 +1,4651 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185550[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C5180; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185544[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185588[]; +extern unsigned short D_80185590[]; +extern unsigned short D_80185598[]; +extern unsigned char D_801C5188[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C5180; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801855A0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C52BC; +extern M2C_UNK D_801C52C0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C5248; +extern void (*D_801855D0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C52C4[]; +extern u8 D_801C52CC[]; +extern u8 D_801C527C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801855D8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801855F4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801855FC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185664[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185608; +extern u8 D_80185614; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185698[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801856A0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801856F4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185728[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185718[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185744; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801857BC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801857C4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801857CC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801857D4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801857DC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801857E4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801857F0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801857FC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185808[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185818[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185828[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185830[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185838[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185840[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185848[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185850[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185858[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185860[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185868[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185870[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185878[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185880[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185888[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185890[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185898[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801858A0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801858A8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801858B0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801858B8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801858C0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801858C8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801858D0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801858D8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018591C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801858E0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018594C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185988[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801859E0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801859F0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801859F8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185B60[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185B6C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C4878; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C6230; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C5A00; +extern short D_801C62A4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C62A4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C62A4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C5A00 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C62A4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C6200 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C6200 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C62A4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C62A4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C5E5C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C5A04; + extern s32 D_801C5E18; + extern s16 D_801C5E1C; + extern s16 D_801C5E20; + extern s16 D_801C5E24; + extern s16 D_801C5E28; + extern s32 D_801C5E30; + extern s32 D_801C5E34; + extern s32 D_801C5E44; + extern s16 D_801C5E48; + extern s16 D_801C5E4C; + extern s32 D_801C5E50; + extern s32 D_801C5E58; + extern s32 D_801C5E5C[10]; + extern s32 D_801C6148; + extern s16 D_801C6200; + extern s32 D_801C622C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C6200; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C5E18); + D_801C5E18 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C5E24, D_801C5E28 ? 0x48 : 0x40); + (*(s16*)&D_801C62A4) = 2; + break; + case 0: + func_80179B28(D_801C5E18); + D_801C5E18 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C5E1C, D_801C5E20 ? 0x48 : 0x40); + (*(s16*)&D_801C62A4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C6148 != 0) { + func_80179B28(D_801C5E18); + D_801C5E18 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C5E1C, D_801C5E20 ? 0x48 : 0x40); + (*(s16*)&D_801C62A4) = 1; + } else { + (*(s16*)&D_801C62A4) = 3; + } + break; + case 0x32: + func_80179B28(D_801C5E18); + D_801C5E18 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C5E1C, + D_801C5E20 ? 0x48 : 0x40); + (*(s16*)&D_801C62A4) = 1; + break; + case 2: + func_80179B28(D_801C5E18); + if (D_801C5E30 != 0) { + D_801C5A00 = D_801C5E30; + D_801C5E30 = 0; + (*(s16*)&D_801C62A4) = 3; + return; + } + (*(s16*)&D_801C62A4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C62A4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C62A4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C62A4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C62A4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C62A4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x1B: + D_801C5E50 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C62A4) = 4; + D_801C5A04 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C62A4) = 5; + D_801C5E44 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C5E44 = (s32)func_8017A3B0; + (*(s16*)&D_801C62A4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x24: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C62A4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C62A4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C62A4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C62A4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C62A4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C62A4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C62A4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C62A4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C62A4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C5E34); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C5E34); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C5E34); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C5E34); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x4E: + D_801C5E58 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x2B: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C62A4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C622C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x34: + (*(s16*)&D_801C62A4) = 3; + D_801C5A00 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C5E30 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C62A4) = 3; + D_801C5A00 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C62A4) = 3; + D_801C5A00 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C5A00 = *(s32 *)(D_801C5A00 + 4); + return; + case 0x37: + (*(s16*)&D_801C62A4) = 3; + D_801C5E1C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C5E20 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C62A4) = 3; + D_801C5E24 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C5E28 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C62A4) = 3; + D_801C5E1C = w1; + D_801C5E20 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C62A4) = 3; + D_801C5E24 = w2; + D_801C5E28 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x43: + D_801C5E44 = (s32)func_8017A3D8; + D_801C5E4C = 0; + (*(s16*)&D_801C62A4) = 5; + D_801C5E48 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C62A4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C62A4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C5E5C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C62A4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C5E5C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C62A4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C5E5C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C62A4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C5E5C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C62A4) = 3; + break; + default: + break; + } +Lend: + D_801C5A00 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C5E2C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C5E2C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C5E2C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C5E2C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C5E54; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C5E54 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C5E10; + +s32 func_8017A3B0(void) { + switch (D_801C5E10) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C5E4C; +extern short D_801C5E48; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C5E4C) { + case 0: + func_800D0CA0(1); + D_801C5E4C = D_801C5E4C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C5E48; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C5E4C = D_801C5E4C + 1; + if (D_801C5E4C < 0x1E) { + return 0; + } + D_801C5E4C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C5E8C; + extern s16 D_801C5E8E; + extern s16 D_801C5E90; + extern s16 D_801C5E84; + extern s16 D_801C5E86; + extern s16 D_801C5E88; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C5E8C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C5E8E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C5E90, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C5E84, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C5E86, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5E88, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C5E14; +extern u16 D_801C5E94; +extern u16 D_801C5E96; +extern u16 D_801C5E98; +extern s16 D_801C6230; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C6230 = 0; + D_801C5E14 = 0; + D_801C5E94 = D_80126B5E; + D_801C5E96 = D_80126B62; + D_801C5E98 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CA8[]; + extern s16 D_801C5E8C; + extern s16 D_801C5E84; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C5E8C; + s16 *p78C = &D_801C5E84; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C6230 = 1; + D_801C5E14 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C5E34; + extern SV4_8017B368 D_801C5E3C; + extern s16 D_801C5E8C; + extern s16 D_801C5E84; + extern u16 D_80185CA8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C5E34; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C5E3C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185CA8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185CA8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C5E8C) = loc0; + (*(SV4_8017B368 *)&D_801C5E84) = loc1; + D_801C6230 = 1; + D_801C5E14 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185CA8[]; + extern s16 D_801C5E8C; + extern s16 D_801C5E8E; + extern s16 D_801C5E90; + extern s16 D_801C5E84; + extern s16 D_801C5E86; + extern s16 D_801C5E88; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185CA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185CA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C5E8C; + s16 *p78C = &D_801C5E84; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C5E8E; + v798 = D_801C5E90; + v78C = *p78C; + v78E = D_801C5E86; + v790 = D_801C5E88; + __asm__ __volatile__(""); + D_801C6230 = 1; + D_801C5E14 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C5E14; +extern s16 D_801C5E8C; +extern s16 D_801C5E8E; +extern s16 D_801C5E90; +extern s16 D_801C5E84; +extern s16 D_801C5E86; +extern s16 D_801C5E88; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C5E14 = 0; + D_801C5E8C = (s16) D_80114F30; + D_801C5E8E = (s16) D_80114F34; + D_801C5E90 = (s16) D_80114F38; + D_801C5E84 = (s16) D_80114F24; + D_801C5E86 = (s16) D_80114F28; + D_801C5E88 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C5EA4; +extern s16 D_801C5EA6; +extern s16 D_801C5EA8; +extern s16 D_801C5EAC; +extern s16 D_801C5EAE; +extern s16 D_801C5EB0; + +void func_8017B824(void) { + D_801C5EA4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C5EA6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C5EA8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C5EAC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C5EAE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C5EB0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C5EA4; +extern s16 D_801C5EA6; +extern s16 D_801C5EA8; +extern s16 D_801C5EAC; +extern s16 D_801C5EAE; +extern s16 D_801C5EB0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C5EA4; + D_80114F34 = D_801C5EA6; + D_80114F38 = D_801C5EA8; + D_80114F24 = D_801C5EAC; + D_80114F28 = D_801C5EAE; + D_80114F2C = D_801C5EB0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C5E8C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C5E84) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C5E8C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C5E84) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C5E94; +extern u16 D_801C5E96; +extern u16 D_801C5E98; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C5E14; +extern short D_801C5E9C; +extern short D_801C5E9E; +extern short D_801C5EA0; +extern s16 D_801C5E8C; +extern s16 D_801C5E8E; +extern s16 D_801C5E90; +extern s16 D_801C5E84; +extern s16 D_801C5E86; +extern s16 D_801C5E88; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C5E94); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C5E96); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C5E98); + (*(s16 *)&D_801C5E9C) = buf[0]; + (*(s16 *)&D_801C5E9E) = buf[1]; + (*(s16 *)&D_801C5EA0) = buf[2]; + D_801C5E8C = D_80114F30 + buf[0]; + D_801C5E14 = 0; + D_801C5E8E = D_80114F34 + buf[1]; + D_801C5E90 = D_80114F38 + buf[2]; + D_801C5E84 = D_80114F24 + buf[0]; + D_801C5E86 = D_80114F28 + buf[1]; + D_801C5E88 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C5E34; +extern SV4 D_801C5E3C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C5E3C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C5E34 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C5E3C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C5E3C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C5E34) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C5E3C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C5E5C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C5E5C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C5E14; +extern s16 D_801C6230; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C5E14 = D_801C5E14 + 1; + if (D_801C5E14 >= 0x1F) { + D_801C6230 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C5E14; +extern s16 D_801C6230; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C5E14 = D_801C5E14 + 1; + if (0x18 < D_801C5E14) { + func_8012A4BC(); + D_801C6230 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C5E14; +extern void (*D_801C5E58)(void); +extern short D_801C5E9C; +extern short D_801C5E9E; +extern short D_801C5EA0; +extern s16 D_801C6230; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C5E14 = D_801C5E14 + 1; + if (D_801C5E14 >= 0x19) { + if (D_801C5E58 != 0) { + (*D_801C5E58)(); + } else { + D_80114F30 = D_80114F30 + D_801C5E9C; + D_80114F34 = D_80114F34 + D_801C5E9E; + D_80114F38 = D_80114F38 + D_801C5EA0; + D_80114F24 = D_80114F24 + D_801C5E9C; + D_80114F28 = D_80114F28 + D_801C5E9E; + D_80114F2C = D_80114F2C + D_801C5EA0; + func_8012A4BC(); + } + D_801C6230 = 0; + } +} + + + +extern void (*D_80185D48[])(void); + +void func_8017BE60(void *a0) { + D_80185D48[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017BF88); + + +extern void (*D_80185D60[])(void); + +void func_8017C0E4(void *a0) { + D_80185D60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C180); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C2B0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C63C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017C9FC); + + +extern void (*D_80185E78[])(void); + +void func_8017CB7C(void *a0) { + D_80185E78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CBB8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CC04); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CCF8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CD78); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CE2C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CE98); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CF24); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CF44); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017CF98); + + +extern void (*D_80185ED0[])(void); + +void func_8017CFD4(void *a0) { + D_80185ED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D010); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D060); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D140); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D2A8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D2F4); + + +extern void (*D_80185EE4[])(void); + +void func_8017D600(void *a0) { + D_80185EE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D63C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D67C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D6EC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D778); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D84C); + + +extern void (*D_80185EF8[])(void); + +void func_8017D8A0(void *a0) { + D_80185EF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D8DC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D990); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017D9EC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017DB5C); + + +extern void (*D_80185F78[])(void); + +void func_8017EA3C(void *a0) { + D_80185F78[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EA78); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EABC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80185F80[])(void); + +void func_8017EAE0(void *a0) { + D_80185F80[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EB1C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EB5C); + +extern void func_800D1EBC(void); + void func_8017EBF8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185F8C[])(void); + +void func_8017EC18(void *a0) { + D_80185F8C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EC54); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017ECC8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017ECF0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017ED18); + + +extern void (*D_80185FB8[])(void); + +void func_8017EDBC(void *a0) { + D_80185FB8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EDF8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017EE98); + + +extern void (*D_80186150[])(void); + +void func_8017F074(void *a0) { + D_80186150[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F0B0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F1B4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F23C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F28C); + +extern void func_8012B200(u8 *a0); + extern s32 func_8017F860(void *a0); + void func_8017F35C(u8 *a0) { + *(s16 *)(a0 + 0x2) = 0x5; + ((void (*)(s32 *))func_8012B200)((s32 *)a0); + func_8017F860(a0); + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F394); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F428); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F6B8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F728); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F860); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017F95C); + + +extern void (*D_801861E0[])(void); + +void func_8017FA7C(void *a0) { + D_801861E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FAB8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FB84); + + +extern void (*D_80186298[])(void); + +void func_8017FBE8(void *a0) { + D_80186298[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FC24); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FD00); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FDE4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FE54); + +void func_8017FF18(void) { +} + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FF20); + + +extern void (*D_80186434[])(void); + +void func_8017FF88(void *a0) { + D_80186434[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8017FFC4); + +void listCdBuffer(void) { +} + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180008); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8018004C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180090); + + +extern void (*D_80186618[])(void); + +void func_801800D4(void *a0) { + D_80186618[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180110(void *a0) { + *(short *)((char *)a0 + 0x2) = 1; + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8018011C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801801C0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180204); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801802E4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801803AC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8018043C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801804EC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801805B8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180680); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180710); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801807C0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180878); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180940); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801809D0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180A80); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180B38); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180C00); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180C90); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180D40); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180DF8); + +void func_80180E54(void) { +} + +extern s32 func_8013CB84(void); + void func_80180E5C(void) { + func_8013CB84(); + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180E7C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180E98); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180F0C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80180FE4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181030); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801BF01C; + void func_80181138(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801BF01C); + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181168); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801811EC); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801813B4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801813F8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8018156C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801815EC); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80181690(void) { + func_8002D4C8(0x6AA, 0); + } + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801816B4(u8 *a0) { + if (*(u8 *)(a0 + 0x5E) == 0xC) { + func_8002D4C8(0x9DA, 0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801816E4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181728); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801817D0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181894); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801818E4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801819D0); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181A98); + + +extern void (*D_801BFB74[])(void); + +void func_80181B3C(void *a0) { + D_801BFB74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181B78); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181C4C); + +void func_80181C74(void) { +} + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181C7C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181DC8); + +extern void func_8012C218(void *a0); + void func_80181EE8(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181F14); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181F24); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181F34); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80181F74(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181FA8); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80181FCC); + + +extern void (*D_801BFB9C[])(void); + +void func_80182030(void *a0) { + D_801BFB9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_8018206C); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801820F4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_801821B4); + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_80178D40", func_80182224); + + diff --git a/src/ov_SC03_089/ov_SC03_089_jr_801734BC.c b/src/ov_SC03_089/ov_SC03_089_jr_801734BC.c index bbd0af385..9c98118bf 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_801734BC.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_801734BC.c @@ -3105,1435 +3105,3 @@ void func_80178D18(void) { D_801C691C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C66E4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C66E4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C66E4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C66E4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C670C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C670C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C66C8; - -s32 func_8017A3B0(void) { - switch (D_801C66C8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C6704; -extern short D_801C6700; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C6704) { - case 0: - func_800D0CA0(1); - D_801C6704 = D_801C6704 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C6700; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C6704 = D_801C6704 + 1; - if (D_801C6704 < 0x1E) { - return 0; - } - D_801C6704 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C6744; - extern s16 D_801C6746; - extern s16 D_801C6748; - extern s16 D_801C673C; - extern s16 D_801C673E; - extern s16 D_801C6740; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C6744, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C6746, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C6748, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C673C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C673E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C6740, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C66CC; -extern u16 D_801C674C; -extern u16 D_801C674E; -extern u16 D_801C6750; -extern s16 D_801C68A8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C68A8 = 0; - D_801C66CC = 0; - D_801C674C = D_80126B5E; - D_801C674E = D_80126B62; - D_801C6750 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018CFA4[]; - extern s16 D_801C6744; - extern s16 D_801C673C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C6744; - s16 *p78C = &D_801C673C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C68A8 = 1; - D_801C66CC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C66EC; - extern SV4_8017B368 D_801C66F4; - extern s16 D_801C6744; - extern s16 D_801C673C; - extern u16 D_8018CFA4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C66EC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C66F4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018CFA4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018CFA4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C6744) = loc0; - (*(SV4_8017B368 *)&D_801C673C) = loc1; - D_801C68A8 = 1; - D_801C66CC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018CFA4[]; - extern s16 D_801C6744; - extern s16 D_801C6746; - extern s16 D_801C6748; - extern s16 D_801C673C; - extern s16 D_801C673E; - extern s16 D_801C6740; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C6744; - s16 *p78C = &D_801C673C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C6746; - v798 = D_801C6748; - v78C = *p78C; - v78E = D_801C673E; - v790 = D_801C6740; - __asm__ __volatile__(""); - D_801C68A8 = 1; - D_801C66CC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C66CC; -extern s16 D_801C6744; -extern s16 D_801C6746; -extern s16 D_801C6748; -extern s16 D_801C673C; -extern s16 D_801C673E; -extern s16 D_801C6740; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C66CC = 0; - D_801C6744 = (s16) D_80114F30; - D_801C6746 = (s16) D_80114F34; - D_801C6748 = (s16) D_80114F38; - D_801C673C = (s16) D_80114F24; - D_801C673E = (s16) D_80114F28; - D_801C6740 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C675C; -extern s16 D_801C675E; -extern s16 D_801C6760; -extern s16 D_801C6764; -extern s16 D_801C6766; -extern s16 D_801C6768; - -void func_8017B824(void) { - D_801C675C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C675E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C6760 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C6764 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C6766 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C6768 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C675C; -extern s16 D_801C675E; -extern s16 D_801C6760; -extern s16 D_801C6764; -extern s16 D_801C6766; -extern s16 D_801C6768; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C675C; - D_80114F34 = D_801C675E; - D_80114F38 = D_801C6760; - D_80114F24 = D_801C6764; - D_80114F28 = D_801C6766; - D_80114F2C = D_801C6768; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C6744), src[8..15] -> (*(S8_8017B8E8 *)&D_801C673C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C6744) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C673C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C674C; -extern u16 D_801C674E; -extern u16 D_801C6750; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C66CC; -extern short D_801C6754; -extern short D_801C6756; -extern short D_801C6758; -extern s16 D_801C6744; -extern s16 D_801C6746; -extern s16 D_801C6748; -extern s16 D_801C673C; -extern s16 D_801C673E; -extern s16 D_801C6740; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C674C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C674E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C6750); - (*(s16 *)&D_801C6754) = buf[0]; - (*(s16 *)&D_801C6756) = buf[1]; - (*(s16 *)&D_801C6758) = buf[2]; - D_801C6744 = D_80114F30 + buf[0]; - D_801C66CC = 0; - D_801C6746 = D_80114F34 + buf[1]; - D_801C6748 = D_80114F38 + buf[2]; - D_801C673C = D_80114F24 + buf[0]; - D_801C673E = D_80114F28 + buf[1]; - D_801C6740 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C66EC; -extern SV4 D_801C66F4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C66F4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C66EC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C66F4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C66F4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C66EC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C66F4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C6714[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C6714; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C66CC; -extern s16 D_801C68A8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C66CC = D_801C66CC + 1; - if (D_801C66CC >= 0x1F) { - D_801C68A8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C66CC; -extern s16 D_801C68A8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C66CC = D_801C66CC + 1; - if (0x18 < D_801C66CC) { - func_8012A4BC(); - D_801C68A8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C66CC; -extern void (*D_801C6710)(void); -extern short D_801C6754; -extern short D_801C6756; -extern short D_801C6758; -extern s16 D_801C68A8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C66CC = D_801C66CC + 1; - if (D_801C66CC >= 0x19) { - if (D_801C6710 != 0) { - (*D_801C6710)(); - } else { - D_80114F30 = D_80114F30 + D_801C6754; - D_80114F34 = D_80114F34 + D_801C6756; - D_80114F38 = D_80114F38 + D_801C6758; - D_80114F24 = D_80114F24 + D_801C6754; - D_80114F28 = D_80114F28 + D_801C6756; - D_80114F2C = D_80114F2C + D_801C6758; - func_8012A4BC(); - } - D_801C68A8 = 0; - } -} - - - -extern void (*D_8018D044[])(void); - -void func_8017BE60(void *a0) { - D_8018D044[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018D07C[])(void); - -void func_8017BEF8(void *a0) { - D_8018D07C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C218); - - -extern void (*D_8018D090[])(void); - -void func_8017C524(void *a0) { - D_8018D090[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C770); - - -extern void (*D_8018D0A4[])(void); - -void func_8017C7C4(void *a0) { - D_8018D0A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180D88); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180DC8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180E08); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180E48); - - -extern void (*D_8018D2D8[])(void); - -void func_80180E88(void *a0) { - D_8018D2D8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180EC4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180F08(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018D2E0[])(void); - -void func_80180F2C(void *a0) { - D_8018D2E0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80180F68); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180FA8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_80181024(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018D2EC[])(void); - -void func_80181044(void *a0) { - D_8018D2EC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181080); - - -extern void (*D_8018D2F8[])(void); - -void func_801810F4(void *a0) { - D_8018D2F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181130); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181174); - - -extern void (*D_8018D300[])(void); - -void func_801811B4(void *a0) { - D_8018D300[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801811F0); - -s32 func_8018122C(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181234); - -extern void func_800D1EBC(void); - void func_80181294(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018D310; - -void func_801812B4(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018D310, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018D314; - -void func_801812DC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018D314, 0x1000000); -} - - - -extern void (*D_8018D328[])(void); - -void func_80181304(void *a0) { - D_8018D328[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181340); - -void func_80181388(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181390); - - -extern s32 func_8014C050(s32 arg0, s32 arg1); - extern void func_80171928(void *a0); - void func_801813D4(void *a0) { - if (!func_8014C050((s32)a0, 0x1A)) { - ((void (*)(void *))func_80171928)(a0); - } - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018D320; - -void func_80181410(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018D320, 0x1000000); -} - - - -extern void (*D_8018D340[])(void); - -void func_80181438(void *a0) { - D_8018D340[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181474); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801814BC); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018D338; - void func_80181510(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018D338, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181538); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801815D4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018166C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181708); - - -extern void (*D_8018D348[])(void); - -void func_801817A4(void *a0) { - D_8018D348[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801817E0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018188C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181A68); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181B14); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181BCC); - -void func_80181D64(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181D6C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181D9C); - - -extern void (*D_8018D3BC[])(void); - -void func_80181EE8(void *a0) { - D_8018D3BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018D408[])(void); - -void func_80181F24(void *a0) { - D_8018D408[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018D4AC[])(void); - -void func_80181F60(void *a0) { - D_8018D4AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80181F9C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801820A8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018210C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80182150); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801821DC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801822A8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801822C8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80182560); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801826E8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80182B94); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80182D28); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801830D8); - -extern void (*D_801A1B1C[])(void); - -void func_801831C4(void *a0) { - D_801A1B1C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A1BD0[])(void); - -void func_80183200(void *a0) { - D_801A1BD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018323C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183254); - -void func_801832F8(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183314); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183398); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801833D4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183404); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183488); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018354C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018362C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018369C); - -void func_80183778(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183780); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183838); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801838FC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183950); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801839CC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183AB0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183B7C); - - -extern void (*D_801A3A50[])(void); - -void func_80183C54(void *a0) { - D_801A3A50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183C90); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183CE8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183EBC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183F14); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183F60); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183FA4); - -void func_80183FE8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80183FF0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018406C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184138); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801841E8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184330); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184384); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801843E4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801844C8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184730); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184880); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801848AC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184A08); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184A58); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184A74); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184B30); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801A3B08[]; - s32 func_80184B80(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A3B08[0], &D_801A3B08[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184BAC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184C7C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184CBC); - - -extern u8 D_80078EC1; - s32 func_80184D28(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - - -extern void (*D_801A3B88[])(void); - -void func_80184D40(void *a0) { - D_801A3B88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184D7C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184E54); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80184F98); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80185098); - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80185144(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018517C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801851A8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018545C); - -void func_8018549C(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_801854BC(s32 arg0) { - if (arg0 != 0) { - M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801854DC); - - -extern void (*D_801A3D00[])(void); - -void func_80185580(void *a0) { - D_801A3D00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801855BC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80185678); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801857A8); - - -extern void (*D_801A3D10[])(void); - -void func_80185880(void *a0) { - D_801A3D10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801858BC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80185C58); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80185CCC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80185E50); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186074); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186428); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186668); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801868D0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186A78); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186CC4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186E10); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80186EC8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018701C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801870C8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187178); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187260); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018737C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018745C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187534); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_8018759C(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801875D8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018767C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018773C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187770); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801877CC(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187804); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187860); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187938); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801879CC); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187A98); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187B70); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187C0C); - -void func_80187C64(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187C6C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187D60); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187DF4); - -extern s32 func_8012BEE8(s32 a0); - -void func_80187E3C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187E64); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187EB0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80187F9C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80188020); - -extern void func_8012CBCC(s32 a0); - void func_8018812C(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80188164); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801881D0); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80188428); - - -extern void (*D_801C3C2C[])(void); - -void func_8018847C(void *a0) { - D_801C3C2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801884B8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801885A4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80188664); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801886B4); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018879C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801887E8); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80188C04); - -void func_80189124(void) { -} - - -extern void (*D_801C3D18[])(void); - -void func_8018912C(void *a0) { - D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80189168); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018935C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_8018940C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_801894BC); - -void func_8018956C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_801734BC", func_80189574); - diff --git a/src/ov_SC03_089/ov_SC03_089_jr_80178D40.c b/src/ov_SC03_089/ov_SC03_089_jr_80178D40.c new file mode 100644 index 000000000..7e59f232e --- /dev/null +++ b/src/ov_SC03_089/ov_SC03_089_jr_80178D40.c @@ -0,0 +1,4902 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018C84C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C5A38; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018C840[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018C884[]; +extern unsigned short D_8018C88C[]; +extern unsigned short D_8018C894[]; +extern unsigned char D_801C5A40[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C5A38; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018C89C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C5B74; +extern M2C_UNK D_801C5B78; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C5B00; +extern void (*D_8018C8CC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C5B7C[]; +extern u8 D_801C5B84[]; +extern u8 D_801C5B34[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018C8D4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018C8F0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018C8F8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018C960[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018C904; +extern u8 D_8018C910; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018C994[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018C99C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018C9F0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018CA24[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018CA14[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018CA40; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018CAB8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018CAC0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018CAC8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018CAD0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018CAD8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018CAE0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018CAEC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018CAF8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018CB04[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018CB14[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018CB24[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018CB2C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018CB34[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018CB3C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018CB44[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018CB4C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018CB54[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018CB5C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018CB64[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018CB6C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018CB74[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018CB7C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018CB84[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018CB8C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018CB94[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018CB9C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018CBA4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018CBAC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018CBB4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018CBBC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018CBC4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018CBCC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018CBD4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018CC18[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018CBDC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018CC48[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018CC84[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018CCDC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018CCEC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018CCF4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018CE5C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018CE68[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C50E4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C68A8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C62B8; +extern short D_801C691C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C691C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C691C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C62B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C691C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C6878 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C6878 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C691C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C691C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C6714[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C62BC; + extern s32 D_801C66D0; + extern s16 D_801C66D4; + extern s16 D_801C66D8; + extern s16 D_801C66DC; + extern s16 D_801C66E0; + extern s32 D_801C66E8; + extern s32 D_801C66EC; + extern s32 D_801C66FC; + extern s16 D_801C6700; + extern s16 D_801C6704; + extern s32 D_801C6708; + extern s32 D_801C6710; + extern s32 D_801C6714[10]; + extern s32 D_801C67C0; + extern s16 D_801C6878; + extern s32 D_801C68A4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C6878; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C66D0); + D_801C66D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C66DC, D_801C66E0 ? 0x48 : 0x40); + (*(s16*)&D_801C691C) = 2; + break; + case 0: + func_80179B28(D_801C66D0); + D_801C66D0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C66D4, D_801C66D8 ? 0x48 : 0x40); + (*(s16*)&D_801C691C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C67C0 != 0) { + func_80179B28(D_801C66D0); + D_801C66D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C66D4, D_801C66D8 ? 0x48 : 0x40); + (*(s16*)&D_801C691C) = 1; + } else { + (*(s16*)&D_801C691C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C66D0); + D_801C66D0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C66D4, + D_801C66D8 ? 0x48 : 0x40); + (*(s16*)&D_801C691C) = 1; + break; + case 2: + func_80179B28(D_801C66D0); + if (D_801C66E8 != 0) { + D_801C62B8 = D_801C66E8; + D_801C66E8 = 0; + (*(s16*)&D_801C691C) = 3; + return; + } + (*(s16*)&D_801C691C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C691C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C691C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C691C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C691C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C691C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C691C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C691C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C691C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C691C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C691C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C691C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x1B: + D_801C6708 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C691C) = 4; + D_801C62BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C691C) = 5; + D_801C66FC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C66FC = (s32)func_8017A3B0; + (*(s16*)&D_801C691C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x24: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C691C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C691C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C691C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C691C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C691C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C691C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C691C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C691C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C691C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C66EC); + (*(s16*)&D_801C691C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C66EC); + (*(s16*)&D_801C691C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C66EC); + (*(s16*)&D_801C691C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C66EC); + (*(s16*)&D_801C691C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + break; + case 0x4E: + D_801C6710 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C691C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C68A4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C691C) = 3; + break; + case 0x34: + (*(s16*)&D_801C691C) = 3; + D_801C62B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C66E8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C691C) = 3; + D_801C62B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C691C) = 3; + D_801C62B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C62B8 = *(s32 *)(D_801C62B8 + 4); + return; + case 0x37: + (*(s16*)&D_801C691C) = 3; + D_801C66D4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C66D8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C691C) = 3; + D_801C66DC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C66E0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C691C) = 3; + D_801C66D4 = w1; + D_801C66D8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C691C) = 3; + D_801C66DC = w2; + D_801C66E0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + case 0x43: + D_801C66FC = (s32)func_8017A3D8; + D_801C6704 = 0; + (*(s16*)&D_801C691C) = 5; + D_801C6700 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C691C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C691C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C691C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C6714; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C691C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C6714; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C691C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C6714[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C691C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C6714; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C691C) = 3; + break; + default: + break; + } +Lend: + D_801C62B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C66E4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C66E4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C66E4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C66E4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C670C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C670C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C66C8; + +s32 func_8017A3B0(void) { + switch (D_801C66C8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C6704; +extern short D_801C6700; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C6704) { + case 0: + func_800D0CA0(1); + D_801C6704 = D_801C6704 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C6700; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C6704 = D_801C6704 + 1; + if (D_801C6704 < 0x1E) { + return 0; + } + D_801C6704 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C6744; + extern s16 D_801C6746; + extern s16 D_801C6748; + extern s16 D_801C673C; + extern s16 D_801C673E; + extern s16 D_801C6740; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C6744, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C6746, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C6748, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C673C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C673E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C6740, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C66CC; +extern u16 D_801C674C; +extern u16 D_801C674E; +extern u16 D_801C6750; +extern s16 D_801C68A8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C68A8 = 0; + D_801C66CC = 0; + D_801C674C = D_80126B5E; + D_801C674E = D_80126B62; + D_801C6750 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018CFA4[]; + extern s16 D_801C6744; + extern s16 D_801C673C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C6744; + s16 *p78C = &D_801C673C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C68A8 = 1; + D_801C66CC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C66EC; + extern SV4_8017B368 D_801C66F4; + extern s16 D_801C6744; + extern s16 D_801C673C; + extern u16 D_8018CFA4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C66EC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C66F4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018CFA4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018CFA4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C6744) = loc0; + (*(SV4_8017B368 *)&D_801C673C) = loc1; + D_801C68A8 = 1; + D_801C66CC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018CFA4[]; + extern s16 D_801C6744; + extern s16 D_801C6746; + extern s16 D_801C6748; + extern s16 D_801C673C; + extern s16 D_801C673E; + extern s16 D_801C6740; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018CFA4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C6744; + s16 *p78C = &D_801C673C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C6746; + v798 = D_801C6748; + v78C = *p78C; + v78E = D_801C673E; + v790 = D_801C6740; + __asm__ __volatile__(""); + D_801C68A8 = 1; + D_801C66CC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C66CC; +extern s16 D_801C6744; +extern s16 D_801C6746; +extern s16 D_801C6748; +extern s16 D_801C673C; +extern s16 D_801C673E; +extern s16 D_801C6740; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C66CC = 0; + D_801C6744 = (s16) D_80114F30; + D_801C6746 = (s16) D_80114F34; + D_801C6748 = (s16) D_80114F38; + D_801C673C = (s16) D_80114F24; + D_801C673E = (s16) D_80114F28; + D_801C6740 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C675C; +extern s16 D_801C675E; +extern s16 D_801C6760; +extern s16 D_801C6764; +extern s16 D_801C6766; +extern s16 D_801C6768; + +void func_8017B824(void) { + D_801C675C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C675E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C6760 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C6764 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C6766 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C6768 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C675C; +extern s16 D_801C675E; +extern s16 D_801C6760; +extern s16 D_801C6764; +extern s16 D_801C6766; +extern s16 D_801C6768; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C675C; + D_80114F34 = D_801C675E; + D_80114F38 = D_801C6760; + D_80114F24 = D_801C6764; + D_80114F28 = D_801C6766; + D_80114F2C = D_801C6768; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C6744), src[8..15] -> (*(S8_8017B8E8 *)&D_801C673C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C6744) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C673C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C674C; +extern u16 D_801C674E; +extern u16 D_801C6750; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C66CC; +extern short D_801C6754; +extern short D_801C6756; +extern short D_801C6758; +extern s16 D_801C6744; +extern s16 D_801C6746; +extern s16 D_801C6748; +extern s16 D_801C673C; +extern s16 D_801C673E; +extern s16 D_801C6740; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C674C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C674E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C6750); + (*(s16 *)&D_801C6754) = buf[0]; + (*(s16 *)&D_801C6756) = buf[1]; + (*(s16 *)&D_801C6758) = buf[2]; + D_801C6744 = D_80114F30 + buf[0]; + D_801C66CC = 0; + D_801C6746 = D_80114F34 + buf[1]; + D_801C6748 = D_80114F38 + buf[2]; + D_801C673C = D_80114F24 + buf[0]; + D_801C673E = D_80114F28 + buf[1]; + D_801C6740 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C66EC; +extern SV4 D_801C66F4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C66F4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C66EC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C66F4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C66F4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C66EC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C66F4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C6714[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C6714; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C66CC; +extern s16 D_801C68A8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C66CC = D_801C66CC + 1; + if (D_801C66CC >= 0x1F) { + D_801C68A8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C66CC; +extern s16 D_801C68A8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C66CC = D_801C66CC + 1; + if (0x18 < D_801C66CC) { + func_8012A4BC(); + D_801C68A8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C66CC; +extern void (*D_801C6710)(void); +extern short D_801C6754; +extern short D_801C6756; +extern short D_801C6758; +extern s16 D_801C68A8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C66CC = D_801C66CC + 1; + if (D_801C66CC >= 0x19) { + if (D_801C6710 != 0) { + (*D_801C6710)(); + } else { + D_80114F30 = D_80114F30 + D_801C6754; + D_80114F34 = D_80114F34 + D_801C6756; + D_80114F38 = D_80114F38 + D_801C6758; + D_80114F24 = D_80114F24 + D_801C6754; + D_80114F28 = D_80114F28 + D_801C6756; + D_80114F2C = D_80114F2C + D_801C6758; + func_8012A4BC(); + } + D_801C68A8 = 0; + } +} + + + +extern void (*D_8018D044[])(void); + +void func_8017BE60(void *a0) { + D_8018D044[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018D07C[])(void); + +void func_8017BEF8(void *a0) { + D_8018D07C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C218); + + +extern void (*D_8018D090[])(void); + +void func_8017C524(void *a0) { + D_8018D090[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C770); + + +extern void (*D_8018D0A4[])(void); + +void func_8017C7C4(void *a0) { + D_8018D0A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180D88); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180DC8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180E08); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180E48); + + +extern void (*D_8018D2D8[])(void); + +void func_80180E88(void *a0) { + D_8018D2D8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180EC4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180F08(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018D2E0[])(void); + +void func_80180F2C(void *a0) { + D_8018D2E0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80180F68); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180FA8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_80181024(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018D2EC[])(void); + +void func_80181044(void *a0) { + D_8018D2EC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181080); + + +extern void (*D_8018D2F8[])(void); + +void func_801810F4(void *a0) { + D_8018D2F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181130); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181174); + + +extern void (*D_8018D300[])(void); + +void func_801811B4(void *a0) { + D_8018D300[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801811F0); + +s32 func_8018122C(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181234); + +extern void func_800D1EBC(void); + void func_80181294(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D310; + +void func_801812B4(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018D310, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018D314; + +void func_801812DC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018D314, 0x1000000); +} + + + +extern void (*D_8018D328[])(void); + +void func_80181304(void *a0) { + D_8018D328[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181340); + +void func_80181388(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181390); + + +extern s32 func_8014C050(s32 arg0, s32 arg1); + extern void func_80171928(void *a0); + void func_801813D4(void *a0) { + if (!func_8014C050((s32)a0, 0x1A)) { + ((void (*)(void *))func_80171928)(a0); + } + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018D320; + +void func_80181410(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018D320, 0x1000000); +} + + + +extern void (*D_8018D340[])(void); + +void func_80181438(void *a0) { + D_8018D340[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181474); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801814BC); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018D338; + void func_80181510(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018D338, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181538); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801815D4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018166C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181708); + + +extern void (*D_8018D348[])(void); + +void func_801817A4(void *a0) { + D_8018D348[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801817E0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018188C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181A68); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181B14); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181BCC); + +void func_80181D64(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181D6C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181D9C); + + +extern void (*D_8018D3BC[])(void); + +void func_80181EE8(void *a0) { + D_8018D3BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018D408[])(void); + +void func_80181F24(void *a0) { + D_8018D408[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018D4AC[])(void); + +void func_80181F60(void *a0) { + D_8018D4AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80181F9C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801820A8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018210C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80182150); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801821DC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801822A8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801822C8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80182560); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801826E8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80182B94); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80182D28); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801830D8); + +extern void (*D_801A1B1C[])(void); + +void func_801831C4(void *a0) { + D_801A1B1C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A1BD0[])(void); + +void func_80183200(void *a0) { + D_801A1BD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018323C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183254); + +void func_801832F8(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183314); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183398); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801833D4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183404); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183488); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018354C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018362C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018369C); + +void func_80183778(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183780); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183838); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801838FC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183950); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801839CC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183AB0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183B7C); + + +extern void (*D_801A3A50[])(void); + +void func_80183C54(void *a0) { + D_801A3A50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183C90); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183CE8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183EBC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183F14); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183F60); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183FA4); + +void func_80183FE8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80183FF0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018406C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184138); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801841E8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184330); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184384); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801843E4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801844C8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184730); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184880); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801848AC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184A08); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184A58); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184A74); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184B30); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801A3B08[]; + s32 func_80184B80(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A3B08[0], &D_801A3B08[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184BAC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184C7C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184CBC); + + +extern u8 D_80078EC1; + s32 func_80184D28(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + + +extern void (*D_801A3B88[])(void); + +void func_80184D40(void *a0) { + D_801A3B88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184D7C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184E54); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80184F98); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80185098); + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80185144(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018517C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801851A8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018545C); + +void func_8018549C(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_801854BC(s32 arg0) { + if (arg0 != 0) { + M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801854DC); + + +extern void (*D_801A3D00[])(void); + +void func_80185580(void *a0) { + D_801A3D00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801855BC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80185678); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801857A8); + + +extern void (*D_801A3D10[])(void); + +void func_80185880(void *a0) { + D_801A3D10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801858BC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80185C58); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80185CCC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80185E50); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186074); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186428); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186668); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801868D0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186A78); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186CC4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186E10); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80186EC8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018701C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801870C8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187178); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187260); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018737C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018745C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187534); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_8018759C(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801875D8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018767C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018773C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187770); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801877CC(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187804); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187860); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187938); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801879CC); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187A98); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187B70); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187C0C); + +void func_80187C64(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187C6C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187D60); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187DF4); + +extern s32 func_8012BEE8(s32 a0); + +void func_80187E3C(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187E64); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187EB0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80187F9C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80188020); + +extern void func_8012CBCC(s32 a0); + void func_8018812C(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80188164); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801881D0); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80188428); + + +extern void (*D_801C3C2C[])(void); + +void func_8018847C(void *a0) { + D_801C3C2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801884B8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801885A4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80188664); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801886B4); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018879C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801887E8); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80188C04); + +void func_80189124(void) { +} + + +extern void (*D_801C3D18[])(void); + +void func_8018912C(void *a0) { + D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80189168); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018935C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_8018940C); + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_801894BC); + +void func_8018956C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_80178D40", func_80189574); + + diff --git a/src/ov_SC03_090/ov_SC03_090_jr_801734BC.c b/src/ov_SC03_090/ov_SC03_090_jr_801734BC.c index 84684d3b0..b89bef67c 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_801734BC.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_801734BC.c @@ -3105,1542 +3105,3 @@ void func_80178D18(void) { D_801CBD8C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CBB4C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CBB4C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CBB4C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CBB4C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CBB74; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CBB74 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CBB30; - -s32 func_8017A3B0(void) { - switch (D_801CBB30) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CBB6C; -extern short D_801CBB68; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CBB6C) { - case 0: - func_800D0CA0(1); - D_801CBB6C = D_801CBB6C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CBB68; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CBB6C = D_801CBB6C + 1; - if (D_801CBB6C < 0x1E) { - return 0; - } - D_801CBB6C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CBBAC; - extern s16 D_801CBBAE; - extern s16 D_801CBBB0; - extern s16 D_801CBBA4; - extern s16 D_801CBBA6; - extern s16 D_801CBBA8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CBBAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CBBAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CBBB0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CBBA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CBBA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CBBA8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CBB34; -extern u16 D_801CBBB4; -extern u16 D_801CBBB6; -extern u16 D_801CBBB8; -extern s16 D_801CBD18; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CBD18 = 0; - D_801CBB34 = 0; - D_801CBBB4 = D_80126B5E; - D_801CBBB6 = D_80126B62; - D_801CBBB8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018F3C8[]; - extern s16 D_801CBBAC; - extern s16 D_801CBBA4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CBBAC; - s16 *p78C = &D_801CBBA4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CBD18 = 1; - D_801CBB34 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CBB54; - extern SV4_8017B368 D_801CBB5C; - extern s16 D_801CBBAC; - extern s16 D_801CBBA4; - extern u16 D_8018F3C8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CBB54; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CBB5C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018F3C8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018F3C8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CBBAC) = loc0; - (*(SV4_8017B368 *)&D_801CBBA4) = loc1; - D_801CBD18 = 1; - D_801CBB34 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018F3C8[]; - extern s16 D_801CBBAC; - extern s16 D_801CBBAE; - extern s16 D_801CBBB0; - extern s16 D_801CBBA4; - extern s16 D_801CBBA6; - extern s16 D_801CBBA8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CBBAC; - s16 *p78C = &D_801CBBA4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CBBAE; - v798 = D_801CBBB0; - v78C = *p78C; - v78E = D_801CBBA6; - v790 = D_801CBBA8; - __asm__ __volatile__(""); - D_801CBD18 = 1; - D_801CBB34 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CBB34; -extern s16 D_801CBBAC; -extern s16 D_801CBBAE; -extern s16 D_801CBBB0; -extern s16 D_801CBBA4; -extern s16 D_801CBBA6; -extern s16 D_801CBBA8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CBB34 = 0; - D_801CBBAC = (s16) D_80114F30; - D_801CBBAE = (s16) D_80114F34; - D_801CBBB0 = (s16) D_80114F38; - D_801CBBA4 = (s16) D_80114F24; - D_801CBBA6 = (s16) D_80114F28; - D_801CBBA8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CBBC4; -extern s16 D_801CBBC6; -extern s16 D_801CBBC8; -extern s16 D_801CBBCC; -extern s16 D_801CBBCE; -extern s16 D_801CBBD0; - -void func_8017B824(void) { - D_801CBBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CBBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CBBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CBBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CBBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CBBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CBBC4; -extern s16 D_801CBBC6; -extern s16 D_801CBBC8; -extern s16 D_801CBBCC; -extern s16 D_801CBBCE; -extern s16 D_801CBBD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CBBC4; - D_80114F34 = D_801CBBC6; - D_80114F38 = D_801CBBC8; - D_80114F24 = D_801CBBCC; - D_80114F28 = D_801CBBCE; - D_80114F2C = D_801CBBD0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CBBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801CBBA4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CBBAC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CBBA4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CBBB4; -extern u16 D_801CBBB6; -extern u16 D_801CBBB8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CBB34; -extern short D_801CBBBC; -extern short D_801CBBBE; -extern short D_801CBBC0; -extern s16 D_801CBBAC; -extern s16 D_801CBBAE; -extern s16 D_801CBBB0; -extern s16 D_801CBBA4; -extern s16 D_801CBBA6; -extern s16 D_801CBBA8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CBBB4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CBBB6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CBBB8); - (*(s16 *)&D_801CBBBC) = buf[0]; - (*(s16 *)&D_801CBBBE) = buf[1]; - (*(s16 *)&D_801CBBC0) = buf[2]; - D_801CBBAC = D_80114F30 + buf[0]; - D_801CBB34 = 0; - D_801CBBAE = D_80114F34 + buf[1]; - D_801CBBB0 = D_80114F38 + buf[2]; - D_801CBBA4 = D_80114F24 + buf[0]; - D_801CBBA6 = D_80114F28 + buf[1]; - D_801CBBA8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CBB54; -extern SV4 D_801CBB5C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CBB5C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CBB54 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CBB5C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CBB5C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CBB54) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CBB5C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CBB7C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CBB7C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CBB34; -extern s16 D_801CBD18; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CBB34 = D_801CBB34 + 1; - if (D_801CBB34 >= 0x1F) { - D_801CBD18 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CBB34; -extern s16 D_801CBD18; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CBB34 = D_801CBB34 + 1; - if (0x18 < D_801CBB34) { - func_8012A4BC(); - D_801CBD18 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CBB34; -extern void (*D_801CBB78)(void); -extern short D_801CBBBC; -extern short D_801CBBBE; -extern short D_801CBBC0; -extern s16 D_801CBD18; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CBB34 = D_801CBB34 + 1; - if (D_801CBB34 >= 0x19) { - if (D_801CBB78 != 0) { - (*D_801CBB78)(); - } else { - D_80114F30 = D_80114F30 + D_801CBBBC; - D_80114F34 = D_80114F34 + D_801CBBBE; - D_80114F38 = D_80114F38 + D_801CBBC0; - D_80114F24 = D_80114F24 + D_801CBBBC; - D_80114F28 = D_80114F28 + D_801CBBBE; - D_80114F2C = D_80114F2C + D_801CBBC0; - func_8012A4BC(); - } - D_801CBD18 = 0; - } -} - - - -extern void (*D_8018F468[])(void); - -void func_8017BE60(void *a0) { - D_8018F468[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018F4A0[])(void); - -void func_8017BEF8(void *a0) { - D_8018F4A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C218); - - -extern void (*D_8018F4B4[])(void); - -void func_8017C524(void *a0) { - D_8018F4B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C770); - - -extern void (*D_8018F4C8[])(void); - -void func_8017C7C4(void *a0) { - D_8018F4C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180D88); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180DC8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180E08); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180E48); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180E88); - - -extern void (*D_8018F6F0[])(void); - -void func_80180EC8(void *a0) { - D_8018F6F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180F04); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180F48(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018F6F8[])(void); - -void func_80180F6C(void *a0) { - D_8018F6F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80180FA8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180FE8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_80181064(void) { - ((s32 (*)(void))func_800D1EBC)(); - } - - - -extern void (*D_8018F704[])(void); - -void func_80181084(void *a0) { - D_8018F704[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801810C0); - - -extern void (*D_8018F710[])(void); - -void func_80181134(void *a0) { - D_8018F710[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181170); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801811B4); - - -extern void (*D_8018F718[])(void); - -void func_801811F4(void *a0) { - D_8018F718[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181230); - -s32 func_8018126C(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181274); - -extern void func_800D1EBC(void); - void func_801812D4(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801812F4); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F72C; - -void func_8018131C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F72C, 0x1000000); -} - - - -extern void (*D_8018F740[])(void); - -void func_80181344(void *a0) { - D_8018F740[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181380); - -void func_801813C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801813D0); - -extern s32 func_8014C050(s32 arg0, s32 arg1); - extern void func_80171928(void *a0); - void func_80181414(void *a0) { - if (!func_8014C050((s32)a0, 0x1A)) { - ((void (*)(void *))func_80171928)(a0); - } - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018F738; - -void func_80181450(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F738, 0x1000000); -} - - - -extern void (*D_8018F758[])(void); - -void func_80181478(void *a0) { - D_8018F758[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801814B4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801814FC); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018F750; - -void func_80181550(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018F750, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181578); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181614); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801816AC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181744); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801817DC); - - -extern void (*D_8018F760[])(void); - -void func_80181874(void *a0) { - D_8018F760[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801818B0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181970); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181AA0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181B50); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181C80); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181D30); - -void func_80181EC8(void) { -} - -extern void func_8013B7F4(void *a0, int a1); -extern unsigned char D_8018F7A8[]; - -int func_80181ED0(int param_1) -{ - register int iVar1 __asm__("$4"); - iVar1 = *(int *)(D_8018F7A8 + param_1 * 4); - __asm__ __volatile__("" ::: "memory"); - func_8013B7F4((void *)iVar1, 0); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181F00); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181F84); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80181FA4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018223C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801823C4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80182870); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80182A04); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80182DB4); - - -extern void (*D_801A0FC4[])(void); - -void func_80182EA0(void *a0) { - D_801A0FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A1078[])(void); - -void func_80182EDC(void *a0) { - D_801A1078[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_80182F18(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80182F30); - -void func_80182FD4(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80182FF0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183074); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801830B0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801830E0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183164); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183228); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183308); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183378); - -void func_80183454(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018345C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183514); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801835D8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018362C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801836A8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018378C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183858); - - -extern void (*D_801A2EF8[])(void); - -void func_80183930(void *a0) { - D_801A2EF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018396C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801839C4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183B98); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183BF0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183C3C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183C80); - -void func_80183CC4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183CCC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183D48); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183E14); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80183EC4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018400C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184060); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801840C0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801841A4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018440C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018455C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184588); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801846E4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184734); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184750); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018480C); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801A2FB0[]; - s32 func_8018485C(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A2FB0[0], &D_801A2FB0[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184888); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184958); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184998); - -extern u8 D_80078EC1; - s32 func_80184A04(void) { - return *(u8 *)&D_80078EC1 == 0x15; - } - - - -extern void (*D_801A3030[])(void); - -void func_80184A1C(void *a0) { - D_801A3030[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184A58); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184B30); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184C74); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184D74); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80184E20(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184E58); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80184E84); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185138); - -void func_80185178(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_80185198(s32 arg0) { - if (arg0 != 0) { - M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801851B8); - - -extern void (*D_801A31A8[])(void); - -void func_8018525C(void *a0) { - D_801A31A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185298); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185354); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185484); - - -extern void (*D_801A31B8[])(void); - -void func_8018555C(void *a0) { - D_801A31B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185598); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185934); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801859A8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185A34); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185BA0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185BE4); - -extern s32 func_8012B030(u8 *a0); - void func_80185F7C(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 1; - *(s16 *)((s32)a0 + 0x2) = 4; - ((void (*)(void))func_8012B030)(); - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80185FA8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186020); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186074); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186224); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801862F0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186554); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186568); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801867C8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186874); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186944); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186AAC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186B00); - - -extern void (*D_801A5C14[])(void); - -void func_80186D04(void *a0) { - D_801A5C14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186D40); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186E24); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186E78); - -extern void func_801292C8(u8 *a0); - s32 func_80186F84(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186FB8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80186FF8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187050); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801870EC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187240); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187318); - - -extern void (*D_801A5CA8[])(void); - -void func_80187378(void *a0) { - D_801A5CA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801873B4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801873DC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018745C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801874BC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187598); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801875E4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801877B8); - -void func_801879A8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801879B0); - -void func_801879D8(s32 *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s32 *)((s32)a0 + 0x1C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801879E4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187AD4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187AF8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187B44); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187C64); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187CBC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187D70); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187F4C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80187FD8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018805C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801880F0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80188274); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80188498); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018884C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80188A8C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80188CF4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80188E9C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801890E8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189234); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801892EC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189440); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801894EC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018959C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189684); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801897A0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189880); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189958); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801899C0(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_801899FC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189AA0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189B60); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189B94); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80189BF0(void *a0) { - if (func_80153BD8((s32)a0)) { - ((void (*)(s32))func_80153BF0)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189C28); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189C84); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189D5C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189DF0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189EBC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_80189F94); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A030); - -void func_8018A088(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A090); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A130); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A184); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A218); - - -extern s32 func_8012BEE8(s32 a0); - -void func_8018A260(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A288); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A2D4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A3C0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A444); - -extern void func_8012CBCC(s32 a0); - void func_8018A550(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A588); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A5F4); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A84C); - - -extern void (*D_801C9098[])(void); - -void func_8018A8A0(void *a0) { - D_801C9098[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A8DC); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018A9C8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018AA88); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018AAD8); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018ABC0); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018AC0C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B028); - -void func_8018B548(void) { -} - - -extern void (*D_801C9184[])(void); - -void func_8018B550(void *a0) { - D_801C9184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B58C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B780); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B830); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B8E0); - -void func_8018B990(void) { -} - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_801734BC", func_8018B998); - diff --git a/src/ov_SC03_090/ov_SC03_090_jr_80178D40.c b/src/ov_SC03_090/ov_SC03_090_jr_80178D40.c new file mode 100644 index 000000000..35c40f772 --- /dev/null +++ b/src/ov_SC03_090/ov_SC03_090_jr_80178D40.c @@ -0,0 +1,5009 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018EC70[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CAEA0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018EC64[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018ECA8[]; +extern unsigned short D_8018ECB0[]; +extern unsigned short D_8018ECB8[]; +extern unsigned char D_801CAEA8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CAEA0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018ECC0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CAFDC; +extern M2C_UNK D_801CAFE0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CAF68; +extern void (*D_8018ECF0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CAFE4[]; +extern u8 D_801CAFEC[]; +extern u8 D_801CAF9C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018ECF8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018ED14[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018ED1C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ED84[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018ED28; +extern u8 D_8018ED34; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018EDB8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018EDC0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018EE14[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018EE48[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018EE38[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018EE64; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018EEDC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018EEE4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018EEEC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018EEF4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018EEFC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018EF04[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018EF10[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018EF1C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018EF28[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018EF38[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018EF48[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018EF50[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018EF58[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018EF60[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018EF68[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018EF70[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018EF78[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018EF80[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018EF88[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018EF90[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018EF98[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018EFA0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018EFA8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018EFB0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018EFB8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018EFC0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018EFC8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018EFD8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018EFE0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018EFE8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018EFF0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018EFF8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018F03C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018F000; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018F06C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018F0A8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018F100[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018F110[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018F118[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018F280[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018F28C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CA550; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CBD18; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CB720; +extern short D_801CBD8C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CBD8C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CBD8C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CB720 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CBD8C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CBCE8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CBCE8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CBD8C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CBD8C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CBB7C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CB724; + extern s32 D_801CBB38; + extern s16 D_801CBB3C; + extern s16 D_801CBB40; + extern s16 D_801CBB44; + extern s16 D_801CBB48; + extern s32 D_801CBB50; + extern s32 D_801CBB54; + extern s32 D_801CBB64; + extern s16 D_801CBB68; + extern s16 D_801CBB6C; + extern s32 D_801CBB70; + extern s32 D_801CBB78; + extern s32 D_801CBB7C[10]; + extern s32 D_801CBC30; + extern s16 D_801CBCE8; + extern s32 D_801CBD14; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CBCE8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CBB38); + D_801CBB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CBB44, D_801CBB48 ? 0x48 : 0x40); + (*(s16*)&D_801CBD8C) = 2; + break; + case 0: + func_80179B28(D_801CBB38); + D_801CBB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CBB3C, D_801CBB40 ? 0x48 : 0x40); + (*(s16*)&D_801CBD8C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CBC30 != 0) { + func_80179B28(D_801CBB38); + D_801CBB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CBB3C, D_801CBB40 ? 0x48 : 0x40); + (*(s16*)&D_801CBD8C) = 1; + } else { + (*(s16*)&D_801CBD8C) = 3; + } + break; + case 0x32: + func_80179B28(D_801CBB38); + D_801CBB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CBB3C, + D_801CBB40 ? 0x48 : 0x40); + (*(s16*)&D_801CBD8C) = 1; + break; + case 2: + func_80179B28(D_801CBB38); + if (D_801CBB50 != 0) { + D_801CB720 = D_801CBB50; + D_801CBB50 = 0; + (*(s16*)&D_801CBD8C) = 3; + return; + } + (*(s16*)&D_801CBD8C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CBD8C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CBD8C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CBD8C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x1B: + D_801CBB70 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CBD8C) = 4; + D_801CB724 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CBD8C) = 5; + D_801CBB64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CBB64 = (s32)func_8017A3B0; + (*(s16*)&D_801CBD8C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x24: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CBD8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CBD8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CBD8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBD8C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBD8C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CBD8C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CBD8C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CBB54); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CBB54); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CBB54); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CBB54); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x4E: + D_801CBB78 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x2B: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CBD8C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CBD14 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x34: + (*(s16*)&D_801CBD8C) = 3; + D_801CB720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CBB50 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CBD8C) = 3; + D_801CB720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CBD8C) = 3; + D_801CB720 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CB720 = *(s32 *)(D_801CB720 + 4); + return; + case 0x37: + (*(s16*)&D_801CBD8C) = 3; + D_801CBB3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CBB40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CBD8C) = 3; + D_801CBB44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CBB48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CBD8C) = 3; + D_801CBB3C = w1; + D_801CBB40 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CBD8C) = 3; + D_801CBB44 = w2; + D_801CBB48 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x43: + D_801CBB64 = (s32)func_8017A3D8; + D_801CBB6C = 0; + (*(s16*)&D_801CBD8C) = 5; + D_801CBB68 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CBD8C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CBD8C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CBB7C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CBD8C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CBB7C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CBD8C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CBB7C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CBD8C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CBB7C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CBD8C) = 3; + break; + default: + break; + } +Lend: + D_801CB720 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CBB4C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CBB4C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CBB4C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CBB4C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CBB74; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CBB74 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CBB30; + +s32 func_8017A3B0(void) { + switch (D_801CBB30) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CBB6C; +extern short D_801CBB68; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CBB6C) { + case 0: + func_800D0CA0(1); + D_801CBB6C = D_801CBB6C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CBB68; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CBB6C = D_801CBB6C + 1; + if (D_801CBB6C < 0x1E) { + return 0; + } + D_801CBB6C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CBBAC; + extern s16 D_801CBBAE; + extern s16 D_801CBBB0; + extern s16 D_801CBBA4; + extern s16 D_801CBBA6; + extern s16 D_801CBBA8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CBBAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CBBAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CBBB0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CBBA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CBBA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CBBA8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CBB34; +extern u16 D_801CBBB4; +extern u16 D_801CBBB6; +extern u16 D_801CBBB8; +extern s16 D_801CBD18; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CBD18 = 0; + D_801CBB34 = 0; + D_801CBBB4 = D_80126B5E; + D_801CBBB6 = D_80126B62; + D_801CBBB8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018F3C8[]; + extern s16 D_801CBBAC; + extern s16 D_801CBBA4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CBBAC; + s16 *p78C = &D_801CBBA4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CBD18 = 1; + D_801CBB34 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CBB54; + extern SV4_8017B368 D_801CBB5C; + extern s16 D_801CBBAC; + extern s16 D_801CBBA4; + extern u16 D_8018F3C8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CBB54; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CBB5C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018F3C8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018F3C8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CBBAC) = loc0; + (*(SV4_8017B368 *)&D_801CBBA4) = loc1; + D_801CBD18 = 1; + D_801CBB34 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018F3C8[]; + extern s16 D_801CBBAC; + extern s16 D_801CBBAE; + extern s16 D_801CBBB0; + extern s16 D_801CBBA4; + extern s16 D_801CBBA6; + extern s16 D_801CBBA8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018F3C8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CBBAC; + s16 *p78C = &D_801CBBA4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CBBAE; + v798 = D_801CBBB0; + v78C = *p78C; + v78E = D_801CBBA6; + v790 = D_801CBBA8; + __asm__ __volatile__(""); + D_801CBD18 = 1; + D_801CBB34 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CBB34; +extern s16 D_801CBBAC; +extern s16 D_801CBBAE; +extern s16 D_801CBBB0; +extern s16 D_801CBBA4; +extern s16 D_801CBBA6; +extern s16 D_801CBBA8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CBB34 = 0; + D_801CBBAC = (s16) D_80114F30; + D_801CBBAE = (s16) D_80114F34; + D_801CBBB0 = (s16) D_80114F38; + D_801CBBA4 = (s16) D_80114F24; + D_801CBBA6 = (s16) D_80114F28; + D_801CBBA8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CBBC4; +extern s16 D_801CBBC6; +extern s16 D_801CBBC8; +extern s16 D_801CBBCC; +extern s16 D_801CBBCE; +extern s16 D_801CBBD0; + +void func_8017B824(void) { + D_801CBBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CBBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CBBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CBBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CBBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CBBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CBBC4; +extern s16 D_801CBBC6; +extern s16 D_801CBBC8; +extern s16 D_801CBBCC; +extern s16 D_801CBBCE; +extern s16 D_801CBBD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CBBC4; + D_80114F34 = D_801CBBC6; + D_80114F38 = D_801CBBC8; + D_80114F24 = D_801CBBCC; + D_80114F28 = D_801CBBCE; + D_80114F2C = D_801CBBD0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CBBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801CBBA4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CBBAC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CBBA4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CBBB4; +extern u16 D_801CBBB6; +extern u16 D_801CBBB8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CBB34; +extern short D_801CBBBC; +extern short D_801CBBBE; +extern short D_801CBBC0; +extern s16 D_801CBBAC; +extern s16 D_801CBBAE; +extern s16 D_801CBBB0; +extern s16 D_801CBBA4; +extern s16 D_801CBBA6; +extern s16 D_801CBBA8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CBBB4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CBBB6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CBBB8); + (*(s16 *)&D_801CBBBC) = buf[0]; + (*(s16 *)&D_801CBBBE) = buf[1]; + (*(s16 *)&D_801CBBC0) = buf[2]; + D_801CBBAC = D_80114F30 + buf[0]; + D_801CBB34 = 0; + D_801CBBAE = D_80114F34 + buf[1]; + D_801CBBB0 = D_80114F38 + buf[2]; + D_801CBBA4 = D_80114F24 + buf[0]; + D_801CBBA6 = D_80114F28 + buf[1]; + D_801CBBA8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CBB54; +extern SV4 D_801CBB5C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CBB5C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CBB54 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CBB5C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CBB5C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CBB54) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CBB5C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CBB7C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CBB7C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CBB34; +extern s16 D_801CBD18; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CBB34 = D_801CBB34 + 1; + if (D_801CBB34 >= 0x1F) { + D_801CBD18 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CBB34; +extern s16 D_801CBD18; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CBB34 = D_801CBB34 + 1; + if (0x18 < D_801CBB34) { + func_8012A4BC(); + D_801CBD18 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CBB34; +extern void (*D_801CBB78)(void); +extern short D_801CBBBC; +extern short D_801CBBBE; +extern short D_801CBBC0; +extern s16 D_801CBD18; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CBB34 = D_801CBB34 + 1; + if (D_801CBB34 >= 0x19) { + if (D_801CBB78 != 0) { + (*D_801CBB78)(); + } else { + D_80114F30 = D_80114F30 + D_801CBBBC; + D_80114F34 = D_80114F34 + D_801CBBBE; + D_80114F38 = D_80114F38 + D_801CBBC0; + D_80114F24 = D_80114F24 + D_801CBBBC; + D_80114F28 = D_80114F28 + D_801CBBBE; + D_80114F2C = D_80114F2C + D_801CBBC0; + func_8012A4BC(); + } + D_801CBD18 = 0; + } +} + + + +extern void (*D_8018F468[])(void); + +void func_8017BE60(void *a0) { + D_8018F468[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018F4A0[])(void); + +void func_8017BEF8(void *a0) { + D_8018F4A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C218); + + +extern void (*D_8018F4B4[])(void); + +void func_8017C524(void *a0) { + D_8018F4B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C770); + + +extern void (*D_8018F4C8[])(void); + +void func_8017C7C4(void *a0) { + D_8018F4C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180D88); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180DC8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180E08); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180E48); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180E88); + + +extern void (*D_8018F6F0[])(void); + +void func_80180EC8(void *a0) { + D_8018F6F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180F04); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180F48(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018F6F8[])(void); + +void func_80180F6C(void *a0) { + D_8018F6F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80180FA8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180FE8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_80181064(void) { + ((s32 (*)(void))func_800D1EBC)(); + } + + + +extern void (*D_8018F704[])(void); + +void func_80181084(void *a0) { + D_8018F704[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801810C0); + + +extern void (*D_8018F710[])(void); + +void func_80181134(void *a0) { + D_8018F710[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181170); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801811B4); + + +extern void (*D_8018F718[])(void); + +void func_801811F4(void *a0) { + D_8018F718[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181230); + +s32 func_8018126C(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181274); + +extern void func_800D1EBC(void); + void func_801812D4(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801812F4); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F72C; + +void func_8018131C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F72C, 0x1000000); +} + + + +extern void (*D_8018F740[])(void); + +void func_80181344(void *a0) { + D_8018F740[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181380); + +void func_801813C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801813D0); + +extern s32 func_8014C050(s32 arg0, s32 arg1); + extern void func_80171928(void *a0); + void func_80181414(void *a0) { + if (!func_8014C050((s32)a0, 0x1A)) { + ((void (*)(void *))func_80171928)(a0); + } + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018F738; + +void func_80181450(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F738, 0x1000000); +} + + + +extern void (*D_8018F758[])(void); + +void func_80181478(void *a0) { + D_8018F758[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801814B4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801814FC); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018F750; + +void func_80181550(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018F750, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181578); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181614); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801816AC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181744); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801817DC); + + +extern void (*D_8018F760[])(void); + +void func_80181874(void *a0) { + D_8018F760[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801818B0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181970); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181AA0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181B50); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181C80); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181D30); + +void func_80181EC8(void) { +} + +extern void func_8013B7F4(void *a0, int a1); +extern unsigned char D_8018F7A8[]; + +int func_80181ED0(int param_1) +{ + register int iVar1 __asm__("$4"); + iVar1 = *(int *)(D_8018F7A8 + param_1 * 4); + __asm__ __volatile__("" ::: "memory"); + func_8013B7F4((void *)iVar1, 0); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181F00); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181F84); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80181FA4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018223C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801823C4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80182870); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80182A04); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80182DB4); + + +extern void (*D_801A0FC4[])(void); + +void func_80182EA0(void *a0) { + D_801A0FC4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A1078[])(void); + +void func_80182EDC(void *a0) { + D_801A1078[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_80182F18(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80182F30); + +void func_80182FD4(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80182FF0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183074); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801830B0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801830E0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183164); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183228); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183308); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183378); + +void func_80183454(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018345C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183514); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801835D8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018362C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801836A8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018378C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183858); + + +extern void (*D_801A2EF8[])(void); + +void func_80183930(void *a0) { + D_801A2EF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018396C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801839C4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183B98); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183BF0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183C3C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183C80); + +void func_80183CC4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183CCC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183D48); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183E14); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80183EC4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018400C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184060); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801840C0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801841A4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018440C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018455C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184588); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801846E4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184734); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184750); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018480C); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801A2FB0[]; + s32 func_8018485C(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A2FB0[0], &D_801A2FB0[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184888); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184958); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184998); + +extern u8 D_80078EC1; + s32 func_80184A04(void) { + return *(u8 *)&D_80078EC1 == 0x15; + } + + + +extern void (*D_801A3030[])(void); + +void func_80184A1C(void *a0) { + D_801A3030[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184A58); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184B30); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184C74); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184D74); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80184E20(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184E58); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80184E84); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185138); + +void func_80185178(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_80185198(s32 arg0) { + if (arg0 != 0) { + M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801851B8); + + +extern void (*D_801A31A8[])(void); + +void func_8018525C(void *a0) { + D_801A31A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185298); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185354); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185484); + + +extern void (*D_801A31B8[])(void); + +void func_8018555C(void *a0) { + D_801A31B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185598); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185934); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801859A8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185A34); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185BA0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185BE4); + +extern s32 func_8012B030(u8 *a0); + void func_80185F7C(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 1; + *(s16 *)((s32)a0 + 0x2) = 4; + ((void (*)(void))func_8012B030)(); + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80185FA8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186020); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186074); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186224); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801862F0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186554); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186568); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801867C8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186874); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186944); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186AAC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186B00); + + +extern void (*D_801A5C14[])(void); + +void func_80186D04(void *a0) { + D_801A5C14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186D40); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186E24); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186E78); + +extern void func_801292C8(u8 *a0); + s32 func_80186F84(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186FB8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80186FF8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187050); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801870EC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187240); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187318); + + +extern void (*D_801A5CA8[])(void); + +void func_80187378(void *a0) { + D_801A5CA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801873B4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801873DC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018745C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801874BC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187598); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801875E4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801877B8); + +void func_801879A8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801879B0); + +void func_801879D8(s32 *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801879E4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187AD4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187AF8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187B44); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187C64); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187CBC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187D70); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187F4C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80187FD8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018805C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801880F0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80188274); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80188498); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018884C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80188A8C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80188CF4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80188E9C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801890E8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189234); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801892EC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189440); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801894EC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018959C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189684); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801897A0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189880); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189958); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801899C0(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_801899FC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189AA0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189B60); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189B94); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80189BF0(void *a0) { + if (func_80153BD8((s32)a0)) { + ((void (*)(s32))func_80153BF0)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189C28); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189C84); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189D5C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189DF0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189EBC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_80189F94); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A030); + +void func_8018A088(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A090); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A130); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A184); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A218); + + +extern s32 func_8012BEE8(s32 a0); + +void func_8018A260(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A288); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A2D4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A3C0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A444); + +extern void func_8012CBCC(s32 a0); + void func_8018A550(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A588); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A5F4); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A84C); + + +extern void (*D_801C9098[])(void); + +void func_8018A8A0(void *a0) { + D_801C9098[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A8DC); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018A9C8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018AA88); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018AAD8); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018ABC0); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018AC0C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B028); + +void func_8018B548(void) { +} + + +extern void (*D_801C9184[])(void); + +void func_8018B550(void *a0) { + D_801C9184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B58C); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B780); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B830); + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B8E0); + +void func_8018B990(void) { +} + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80178D40", func_8018B998); + + diff --git a/src/ov_SC03_091/ov_SC03_091_jr_801734BC.c b/src/ov_SC03_091/ov_SC03_091_jr_801734BC.c index 797f49473..4e4a9aa18 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_801734BC.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_801734BC.c @@ -3105,976 +3105,3 @@ void func_80178D18(void) { D_801D26DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D221C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D221C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D221C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D221C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D2244; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D2244 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D2200; - -s32 func_8017A3B0(void) { - switch (D_801D2200) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D223C; -extern short D_801D2238; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D223C) { - case 0: - func_800D0CA0(1); - D_801D223C = D_801D223C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D2238; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D223C = D_801D223C + 1; - if (D_801D223C < 0x1E) { - return 0; - } - D_801D223C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D227C; - extern s16 D_801D227E; - extern s16 D_801D2280; - extern s16 D_801D2274; - extern s16 D_801D2276; - extern s16 D_801D2278; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D227C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D227E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D2280, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D2274, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D2276, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D2278, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D2204; -extern u16 D_801D2284; -extern u16 D_801D2286; -extern u16 D_801D2288; -extern s16 D_801D2668; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D2668 = 0; - D_801D2204 = 0; - D_801D2284 = D_80126B5E; - D_801D2286 = D_80126B62; - D_801D2288 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190270[]; - extern s16 D_801D227C; - extern s16 D_801D2274; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190270[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190270[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D227C; - s16 *p78C = &D_801D2274; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D2668 = 1; - D_801D2204 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D2224; - extern SV4_8017B368 D_801D222C; - extern s16 D_801D227C; - extern s16 D_801D2274; - extern u16 D_80190270; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D2224; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D222C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190270)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190270)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D227C) = loc0; - (*(SV4_8017B368 *)&D_801D2274) = loc1; - D_801D2668 = 1; - D_801D2204 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190270[]; - extern s16 D_801D227C; - extern s16 D_801D227E; - extern s16 D_801D2280; - extern s16 D_801D2274; - extern s16 D_801D2276; - extern s16 D_801D2278; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190270[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190270[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D227C; - s16 *p78C = &D_801D2274; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D227E; - v798 = D_801D2280; - v78C = *p78C; - v78E = D_801D2276; - v790 = D_801D2278; - __asm__ __volatile__(""); - D_801D2668 = 1; - D_801D2204 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D2204; -extern s16 D_801D227C; -extern s16 D_801D227E; -extern s16 D_801D2280; -extern s16 D_801D2274; -extern s16 D_801D2276; -extern s16 D_801D2278; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D2204 = 0; - D_801D227C = (s16) D_80114F30; - D_801D227E = (s16) D_80114F34; - D_801D2280 = (s16) D_80114F38; - D_801D2274 = (s16) D_80114F24; - D_801D2276 = (s16) D_80114F28; - D_801D2278 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D2294; -extern s16 D_801D2296; -extern s16 D_801D2298; -extern s16 D_801D229C; -extern s16 D_801D229E; -extern s16 D_801D22A0; - -void func_8017B824(void) { - D_801D2294 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D2296 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D2298 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D229C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D229E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D22A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D2294; -extern s16 D_801D2296; -extern s16 D_801D2298; -extern s16 D_801D229C; -extern s16 D_801D229E; -extern s16 D_801D22A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D2294; - D_80114F34 = D_801D2296; - D_80114F38 = D_801D2298; - D_80114F24 = D_801D229C; - D_80114F28 = D_801D229E; - D_80114F2C = D_801D22A0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D227C), src[8..15] -> (*(S8_8017B8E8 *)&D_801D2274) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D227C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D2274) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D2284; -extern u16 D_801D2286; -extern u16 D_801D2288; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D2204; -extern short D_801D228C; -extern short D_801D228E; -extern short D_801D2290; -extern s16 D_801D227C; -extern s16 D_801D227E; -extern s16 D_801D2280; -extern s16 D_801D2274; -extern s16 D_801D2276; -extern s16 D_801D2278; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D2284); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D2286); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D2288); - (*(s16 *)&D_801D228C) = buf[0]; - (*(s16 *)&D_801D228E) = buf[1]; - (*(s16 *)&D_801D2290) = buf[2]; - D_801D227C = D_80114F30 + buf[0]; - D_801D2204 = 0; - D_801D227E = D_80114F34 + buf[1]; - D_801D2280 = D_80114F38 + buf[2]; - D_801D2274 = D_80114F24 + buf[0]; - D_801D2276 = D_80114F28 + buf[1]; - D_801D2278 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D2224; -extern SV4 D_801D222C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D222C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D2224 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D222C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D222C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D2224) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D222C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D224C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D224C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D2204; -extern s16 D_801D2668; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D2204 = D_801D2204 + 1; - if (D_801D2204 >= 0x1F) { - D_801D2668 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D2204; -extern s16 D_801D2668; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D2204 = D_801D2204 + 1; - if (0x18 < D_801D2204) { - func_8012A4BC(); - D_801D2668 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D2204; -extern void (*D_801D2248)(void); -extern short D_801D228C; -extern short D_801D228E; -extern short D_801D2290; -extern s16 D_801D2668; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D2204 = D_801D2204 + 1; - if (D_801D2204 >= 0x19) { - if (D_801D2248 != 0) { - (*D_801D2248)(); - } else { - D_80114F30 = D_80114F30 + D_801D228C; - D_80114F34 = D_80114F34 + D_801D228E; - D_80114F38 = D_80114F38 + D_801D2290; - D_80114F24 = D_80114F24 + D_801D228C; - D_80114F28 = D_80114F28 + D_801D228E; - D_80114F2C = D_80114F2C + D_801D2290; - func_8012A4BC(); - } - D_801D2668 = 0; - } -} - - - -extern void (*D_80190310[])(void); - -void func_8017BE60(void *a0) { - D_80190310[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017C738); - - -extern void (*D_8019042C[])(void); - -void func_8017C8B8(void *a0) { - D_8019042C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CCD4); - - -extern void (*D_80190484[])(void); - -void func_8017CD10(void *a0) { - D_80190484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D030); - - -extern void (*D_80190498[])(void); - -void func_8017D33C(void *a0) { - D_80190498[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D588); - - -extern void (*D_801904AC[])(void); - -void func_8017D5DC(void *a0) { - D_801904AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181BA0); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181BE0); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181C20); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181C60); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181CA0); - - -extern void (*D_8019068C[])(void); - -void func_80181CE0(void *a0) { - D_8019068C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181D1C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80181D60(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80190694[])(void); - -void func_80181D84(void *a0) { - D_80190694[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181DC0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80181E00(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181E7C); - - -extern void (*D_801906A0[])(void); - -void func_80181E9C(void *a0) { - D_801906A0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181ED8); - - -extern void (*D_801906AC[])(void); - -void func_80181F4C(void *a0) { - D_801906AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181F88); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80181FCC); - - -extern void (*D_801906B4[])(void); - -void func_8018200C(void *a0) { - D_801906B4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80182048); - -s32 func_80182084(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_8018208C); - -extern void func_800D1EBC(void); - void func_801820EC(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_801906C4; - -void func_8018210C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801906C4, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_801906C8; - void func_80182134(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801906C8, 0x1000000); - } - - -extern void (*D_801906DC[])(void); - -void func_8018215C(u8 *a0) { - D_801906DC[a0[0x216]](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_80182198); - -void func_801821E0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_801734BC", func_801821E8); - - -extern s32 func_8014C050(s32 arg0, s32 arg1); - extern void func_80171928(void *a0); - void func_8018222C(void *a0) { - if (!func_8014C050((s32)a0, 0x1A)) { - ((void (*)(void *))func_80171928)(a0); - } - } diff --git a/src/ov_SC03_091/ov_SC03_091_jr_80178D40.c b/src/ov_SC03_091/ov_SC03_091_jr_80178D40.c new file mode 100644 index 000000000..fedd8d02c --- /dev/null +++ b/src/ov_SC03_091/ov_SC03_091_jr_80178D40.c @@ -0,0 +1,4443 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018FB18[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D1570; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018FB0C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018FB50[]; +extern unsigned short D_8018FB58[]; +extern unsigned short D_8018FB60[]; +extern unsigned char D_801D1578[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D1570; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018FB68[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D16AC; +extern M2C_UNK D_801D16B0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D1638; +extern void (*D_8018FB98[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D16B4[]; +extern u8 D_801D16BC[]; +extern u8 D_801D166C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018FBA0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018FBBC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018FBC4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018FC2C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018FBD0; +extern u8 D_8018FBDC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018FC60[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018FC68[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018FCBC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018FCF0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018FCE0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018FD0C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018FD84[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018FD8C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018FD94[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018FD9C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018FDA4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018FDAC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018FDB8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018FDC4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018FDD0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018FDE0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018FDF0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018FDF8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018FE00[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018FE08[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018FE10[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018FE18[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018FE20[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018FE28[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018FE30[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018FE38[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018FE40[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018FE48[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018FE50[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018FE58[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018FE60[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018FE68[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018FE70[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018FE78[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018FE80[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018FE88[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018FE90[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018FE98[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018FEA0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018FEE4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018FEA8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018FF14[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018FF50[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018FFA8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018FFB8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018FFC0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80190128[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190134[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D0C1C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D2668; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D1DF0; +extern short D_801D26DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D26DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D26DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D1DF0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D26DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D2638 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D2638 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D26DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D26DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D224C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D1DF4; + extern s32 D_801D2208; + extern s16 D_801D220C; + extern s16 D_801D2210; + extern s16 D_801D2214; + extern s16 D_801D2218; + extern s32 D_801D2220; + extern s32 D_801D2224; + extern s32 D_801D2234; + extern s16 D_801D2238; + extern s16 D_801D223C; + extern s32 D_801D2240; + extern s32 D_801D2248; + extern s32 D_801D224C[10]; + extern s32 D_801D2580; + extern s16 D_801D2638; + extern s32 D_801D2664; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D2638; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D2208); + D_801D2208 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D2214, D_801D2218 ? 0x48 : 0x40); + (*(s16*)&D_801D26DC) = 2; + break; + case 0: + func_80179B28(D_801D2208); + D_801D2208 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D220C, D_801D2210 ? 0x48 : 0x40); + (*(s16*)&D_801D26DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D2580 != 0) { + func_80179B28(D_801D2208); + D_801D2208 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D220C, D_801D2210 ? 0x48 : 0x40); + (*(s16*)&D_801D26DC) = 1; + } else { + (*(s16*)&D_801D26DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801D2208); + D_801D2208 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D220C, + D_801D2210 ? 0x48 : 0x40); + (*(s16*)&D_801D26DC) = 1; + break; + case 2: + func_80179B28(D_801D2208); + if (D_801D2220 != 0) { + D_801D1DF0 = D_801D2220; + D_801D2220 = 0; + (*(s16*)&D_801D26DC) = 3; + return; + } + (*(s16*)&D_801D26DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D26DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D26DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D26DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D26DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D26DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x1B: + D_801D2240 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D26DC) = 4; + D_801D1DF4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D26DC) = 5; + D_801D2234 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D2234 = (s32)func_8017A3B0; + (*(s16*)&D_801D26DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x24: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D26DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D26DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D26DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D26DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D26DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D26DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D26DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D26DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D26DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D2224); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D2224); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D2224); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D2224); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x4E: + D_801D2248 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D26DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D2664 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x34: + (*(s16*)&D_801D26DC) = 3; + D_801D1DF0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D2220 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D26DC) = 3; + D_801D1DF0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D26DC) = 3; + D_801D1DF0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D1DF0 = *(s32 *)(D_801D1DF0 + 4); + return; + case 0x37: + (*(s16*)&D_801D26DC) = 3; + D_801D220C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D2210 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D26DC) = 3; + D_801D2214 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D2218 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D26DC) = 3; + D_801D220C = w1; + D_801D2210 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D26DC) = 3; + D_801D2214 = w2; + D_801D2218 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x43: + D_801D2234 = (s32)func_8017A3D8; + D_801D223C = 0; + (*(s16*)&D_801D26DC) = 5; + D_801D2238 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D26DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D26DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D224C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D26DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D224C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D26DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D224C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D26DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D224C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D26DC) = 3; + break; + default: + break; + } +Lend: + D_801D1DF0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D221C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D221C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D221C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D221C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D2244; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D2244 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D2200; + +s32 func_8017A3B0(void) { + switch (D_801D2200) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D223C; +extern short D_801D2238; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D223C) { + case 0: + func_800D0CA0(1); + D_801D223C = D_801D223C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D2238; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D223C = D_801D223C + 1; + if (D_801D223C < 0x1E) { + return 0; + } + D_801D223C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D227C; + extern s16 D_801D227E; + extern s16 D_801D2280; + extern s16 D_801D2274; + extern s16 D_801D2276; + extern s16 D_801D2278; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D227C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D227E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D2280, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D2274, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D2276, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D2278, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D2204; +extern u16 D_801D2284; +extern u16 D_801D2286; +extern u16 D_801D2288; +extern s16 D_801D2668; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D2668 = 0; + D_801D2204 = 0; + D_801D2284 = D_80126B5E; + D_801D2286 = D_80126B62; + D_801D2288 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190270[]; + extern s16 D_801D227C; + extern s16 D_801D2274; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190270[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190270[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D227C; + s16 *p78C = &D_801D2274; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D2668 = 1; + D_801D2204 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D2224; + extern SV4_8017B368 D_801D222C; + extern s16 D_801D227C; + extern s16 D_801D2274; + extern u16 D_80190270; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D2224; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D222C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190270)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190270)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D227C) = loc0; + (*(SV4_8017B368 *)&D_801D2274) = loc1; + D_801D2668 = 1; + D_801D2204 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190270[]; + extern s16 D_801D227C; + extern s16 D_801D227E; + extern s16 D_801D2280; + extern s16 D_801D2274; + extern s16 D_801D2276; + extern s16 D_801D2278; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190270[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190270[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D227C; + s16 *p78C = &D_801D2274; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D227E; + v798 = D_801D2280; + v78C = *p78C; + v78E = D_801D2276; + v790 = D_801D2278; + __asm__ __volatile__(""); + D_801D2668 = 1; + D_801D2204 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D2204; +extern s16 D_801D227C; +extern s16 D_801D227E; +extern s16 D_801D2280; +extern s16 D_801D2274; +extern s16 D_801D2276; +extern s16 D_801D2278; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D2204 = 0; + D_801D227C = (s16) D_80114F30; + D_801D227E = (s16) D_80114F34; + D_801D2280 = (s16) D_80114F38; + D_801D2274 = (s16) D_80114F24; + D_801D2276 = (s16) D_80114F28; + D_801D2278 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D2294; +extern s16 D_801D2296; +extern s16 D_801D2298; +extern s16 D_801D229C; +extern s16 D_801D229E; +extern s16 D_801D22A0; + +void func_8017B824(void) { + D_801D2294 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D2296 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D2298 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D229C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D229E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D22A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D2294; +extern s16 D_801D2296; +extern s16 D_801D2298; +extern s16 D_801D229C; +extern s16 D_801D229E; +extern s16 D_801D22A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D2294; + D_80114F34 = D_801D2296; + D_80114F38 = D_801D2298; + D_80114F24 = D_801D229C; + D_80114F28 = D_801D229E; + D_80114F2C = D_801D22A0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D227C), src[8..15] -> (*(S8_8017B8E8 *)&D_801D2274) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D227C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D2274) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D2284; +extern u16 D_801D2286; +extern u16 D_801D2288; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D2204; +extern short D_801D228C; +extern short D_801D228E; +extern short D_801D2290; +extern s16 D_801D227C; +extern s16 D_801D227E; +extern s16 D_801D2280; +extern s16 D_801D2274; +extern s16 D_801D2276; +extern s16 D_801D2278; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D2284); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D2286); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D2288); + (*(s16 *)&D_801D228C) = buf[0]; + (*(s16 *)&D_801D228E) = buf[1]; + (*(s16 *)&D_801D2290) = buf[2]; + D_801D227C = D_80114F30 + buf[0]; + D_801D2204 = 0; + D_801D227E = D_80114F34 + buf[1]; + D_801D2280 = D_80114F38 + buf[2]; + D_801D2274 = D_80114F24 + buf[0]; + D_801D2276 = D_80114F28 + buf[1]; + D_801D2278 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D2224; +extern SV4 D_801D222C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D222C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D2224 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D222C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D222C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D2224) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D222C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D224C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D224C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D2204; +extern s16 D_801D2668; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D2204 = D_801D2204 + 1; + if (D_801D2204 >= 0x1F) { + D_801D2668 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D2204; +extern s16 D_801D2668; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D2204 = D_801D2204 + 1; + if (0x18 < D_801D2204) { + func_8012A4BC(); + D_801D2668 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D2204; +extern void (*D_801D2248)(void); +extern short D_801D228C; +extern short D_801D228E; +extern short D_801D2290; +extern s16 D_801D2668; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D2204 = D_801D2204 + 1; + if (D_801D2204 >= 0x19) { + if (D_801D2248 != 0) { + (*D_801D2248)(); + } else { + D_80114F30 = D_80114F30 + D_801D228C; + D_80114F34 = D_80114F34 + D_801D228E; + D_80114F38 = D_80114F38 + D_801D2290; + D_80114F24 = D_80114F24 + D_801D228C; + D_80114F28 = D_80114F28 + D_801D228E; + D_80114F2C = D_80114F2C + D_801D2290; + func_8012A4BC(); + } + D_801D2668 = 0; + } +} + + + +extern void (*D_80190310[])(void); + +void func_8017BE60(void *a0) { + D_80190310[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017C738); + + +extern void (*D_8019042C[])(void); + +void func_8017C8B8(void *a0) { + D_8019042C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CCD4); + + +extern void (*D_80190484[])(void); + +void func_8017CD10(void *a0) { + D_80190484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D030); + + +extern void (*D_80190498[])(void); + +void func_8017D33C(void *a0) { + D_80190498[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D588); + + +extern void (*D_801904AC[])(void); + +void func_8017D5DC(void *a0) { + D_801904AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181BA0); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181BE0); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181C20); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181C60); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181CA0); + + +extern void (*D_8019068C[])(void); + +void func_80181CE0(void *a0) { + D_8019068C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181D1C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80181D60(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80190694[])(void); + +void func_80181D84(void *a0) { + D_80190694[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181DC0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80181E00(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181E7C); + + +extern void (*D_801906A0[])(void); + +void func_80181E9C(void *a0) { + D_801906A0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181ED8); + + +extern void (*D_801906AC[])(void); + +void func_80181F4C(void *a0) { + D_801906AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181F88); + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80181FCC); + + +extern void (*D_801906B4[])(void); + +void func_8018200C(void *a0) { + D_801906B4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80182048); + +s32 func_80182084(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_8018208C); + +extern void func_800D1EBC(void); + void func_801820EC(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801906C4; + +void func_8018210C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801906C4, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_801906C8; + void func_80182134(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801906C8, 0x1000000); + } + + +extern void (*D_801906DC[])(void); + +void func_8018215C(u8 *a0) { + D_801906DC[a0[0x216]](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_80182198); + +void func_801821E0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80178D40", func_801821E8); + + +extern s32 func_8014C050(s32 arg0, s32 arg1); + extern void func_80171928(void *a0); + void func_8018222C(void *a0) { + if (!func_8014C050((s32)a0, 0x1A)) { + ((void (*)(void *))func_80171928)(a0); + } + } + diff --git a/src/ov_SC03_092/ov_SC03_092_jr_801734BC.c b/src/ov_SC03_092/ov_SC03_092_jr_801734BC.c index fb508cefa..d8949d83c 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_801734BC.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_801734BC.c @@ -3105,1525 +3105,3 @@ void func_80178D18(void) { D_801B3084 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B2DE4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B2DE4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B2DE4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B2DE4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B2E0C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B2E0C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B2DC8; - -s32 func_8017A3B0(void) { - switch (D_801B2DC8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B2E04; -extern short D_801B2E00; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B2E04) { - case 0: - func_800D0CA0(1); - D_801B2E04 = D_801B2E04 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B2E00; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B2E04 = D_801B2E04 + 1; - if (D_801B2E04 < 0x1E) { - return 0; - } - D_801B2E04 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B2E44; - extern s16 D_801B2E46; - extern s16 D_801B2E48; - extern s16 D_801B2E3C; - extern s16 D_801B2E3E; - extern s16 D_801B2E40; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B2E44, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B2E46, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B2E48, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B2E3C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B2E3E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B2E40, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B2DCC; -extern u16 D_801B2E4C; -extern u16 D_801B2E4E; -extern u16 D_801B2E50; -extern s16 D_801B3010; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B3010 = 0; - D_801B2DCC = 0; - D_801B2E4C = D_80126B5E; - D_801B2E4E = D_80126B62; - D_801B2E50 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188640[]; - extern s16 D_801B2E44; - extern s16 D_801B2E3C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188640[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188640[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B2E44; - s16 *p78C = &D_801B2E3C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B3010 = 1; - D_801B2DCC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B2DEC; - extern SV4_8017B368 D_801B2DF4; - extern s16 D_801B2E44; - extern s16 D_801B2E3C; - extern u16 D_80188640; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B2DEC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B2DF4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80188640)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80188640)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B2E44) = loc0; - (*(SV4_8017B368 *)&D_801B2E3C) = loc1; - D_801B3010 = 1; - D_801B2DCC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188640[]; - extern s16 D_801B2E44; - extern s16 D_801B2E46; - extern s16 D_801B2E48; - extern s16 D_801B2E3C; - extern s16 D_801B2E3E; - extern s16 D_801B2E40; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188640[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188640[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B2E44; - s16 *p78C = &D_801B2E3C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B2E46; - v798 = D_801B2E48; - v78C = *p78C; - v78E = D_801B2E3E; - v790 = D_801B2E40; - __asm__ __volatile__(""); - D_801B3010 = 1; - D_801B2DCC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B2DCC; -extern s16 D_801B2E44; -extern s16 D_801B2E46; -extern s16 D_801B2E48; -extern s16 D_801B2E3C; -extern s16 D_801B2E3E; -extern s16 D_801B2E40; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B2DCC = 0; - D_801B2E44 = (s16) D_80114F30; - D_801B2E46 = (s16) D_80114F34; - D_801B2E48 = (s16) D_80114F38; - D_801B2E3C = (s16) D_80114F24; - D_801B2E3E = (s16) D_80114F28; - D_801B2E40 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B2E5C; -extern s16 D_801B2E5E; -extern s16 D_801B2E60; -extern s16 D_801B2E64; -extern s16 D_801B2E66; -extern s16 D_801B2E68; - -void func_8017B824(void) { - D_801B2E5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B2E5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B2E60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B2E64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B2E66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B2E68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B2E5C; -extern s16 D_801B2E5E; -extern s16 D_801B2E60; -extern s16 D_801B2E64; -extern s16 D_801B2E66; -extern s16 D_801B2E68; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B2E5C; - D_80114F34 = D_801B2E5E; - D_80114F38 = D_801B2E60; - D_80114F24 = D_801B2E64; - D_80114F28 = D_801B2E66; - D_80114F2C = D_801B2E68; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B2E44), src[8..15] -> (*(S8_8017B8E8 *)&D_801B2E3C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B2E44) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B2E3C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B2E4C; -extern u16 D_801B2E4E; -extern u16 D_801B2E50; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B2DCC; -extern short D_801B2E54; -extern short D_801B2E56; -extern short D_801B2E58; -extern s16 D_801B2E44; -extern s16 D_801B2E46; -extern s16 D_801B2E48; -extern s16 D_801B2E3C; -extern s16 D_801B2E3E; -extern s16 D_801B2E40; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B2E4C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B2E4E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B2E50); - (*(s16 *)&D_801B2E54) = buf[0]; - (*(s16 *)&D_801B2E56) = buf[1]; - (*(s16 *)&D_801B2E58) = buf[2]; - D_801B2E44 = D_80114F30 + buf[0]; - D_801B2DCC = 0; - D_801B2E46 = D_80114F34 + buf[1]; - D_801B2E48 = D_80114F38 + buf[2]; - D_801B2E3C = D_80114F24 + buf[0]; - D_801B2E3E = D_80114F28 + buf[1]; - D_801B2E40 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B2DEC; -extern SV4 D_801B2DF4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B2DF4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B2DEC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B2DF4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B2DF4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B2DEC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B2DF4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B2E14[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B2E14; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B2DCC; -extern s16 D_801B3010; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B2DCC = D_801B2DCC + 1; - if (D_801B2DCC >= 0x1F) { - D_801B3010 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B2DCC; -extern s16 D_801B3010; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B2DCC = D_801B2DCC + 1; - if (0x18 < D_801B2DCC) { - func_8012A4BC(); - D_801B3010 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B2DCC; -extern void (*D_801B2E10)(void); -extern short D_801B2E54; -extern short D_801B2E56; -extern short D_801B2E58; -extern s16 D_801B3010; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B2DCC = D_801B2DCC + 1; - if (D_801B2DCC >= 0x19) { - if (D_801B2E10 != 0) { - (*D_801B2E10)(); - } else { - D_80114F30 = D_80114F30 + D_801B2E54; - D_80114F34 = D_80114F34 + D_801B2E56; - D_80114F38 = D_80114F38 + D_801B2E58; - D_80114F24 = D_80114F24 + D_801B2E54; - D_80114F28 = D_80114F28 + D_801B2E56; - D_80114F2C = D_80114F2C + D_801B2E58; - func_8012A4BC(); - } - D_801B3010 = 0; - } -} - - - -extern void (*D_801886E0[])(void); - -void func_8017BE60(void *a0) { - D_801886E0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017BEBC); - - -extern void (*D_80188718[])(void); - -void func_8017BEF8(void *a0) { - D_80188718[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C218); - - -extern void (*D_8018872C[])(void); - -void func_8017C524(void *a0) { - D_8018872C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C770); - - -extern void (*D_80188740[])(void); - -void func_8017C7C4(void *a0) { - D_80188740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017C910); - - -extern void (*D_80188760[])(void); - -void func_8017CA80(void *a0) { - D_80188760[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017CABC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017CC80); - - -extern void (*D_80188768[])(void); - -void func_8017CD14(void *a0) { - D_80188768[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80188754; - -void func_8017CD50(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80188754, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017CE58); - - -extern void (*D_80188918[])(void); - -void func_8017D9CC(void *a0) { - D_80188918[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DA08); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DA4C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188920[])(void); - -void func_8017DA70(void *a0) { - D_80188920[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DAAC); - - -extern void (*D_80188928[])(void); - -void func_8017DAF0(void *a0) { - D_80188928[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DB2C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DB6C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DBE8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188934[])(void); - -void func_8017DC08(void *a0) { - D_80188934[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DC44); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DC88); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DCC8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DCF0); - - -extern void (*D_80188954[])(void); - -void func_8017DD18(void *a0) { - D_80188954[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DD54); - -void func_8017DD9C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DDA4); - - -extern s32 func_8014C050(s32 arg0, s32 arg1); - extern void func_80171928(void *a0); - void func_8017DDE8(void *a0) { - if (!func_8014C050((s32)a0, 0x1A)) { - ((void (*)(void *))func_80171928)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DE4C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DE74); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017DF40); - - -extern void (*D_801889B4[])(void); - -void func_8017E008(void *a0) { - D_801889B4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E044); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E2FC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E524); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E580); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E60C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E6A0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E754); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017E780); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EAA0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EBD0); - - -extern void (*D_80188C70[])(void); - -void func_8017ECFC(void *a0) { - D_80188C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017ED38); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EDDC); - -void func_8017EE38(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EE40); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EE8C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017EF54); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F01C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F088); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F0A8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F214); - - -extern void func_8017E754(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017F250(void) { - func_8017E754(); - ((s32 (*)(s32, s32))func_8002D4C8)(0xB16, 0); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F27C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F29C); - - -extern void (*D_80188E48[])(void); - -void func_8017F2BC(void *a0) { - D_80188E48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F2F8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F49C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F4BC); - -s32 func_8017F4F4(s32 *a0) { - return *(u16 *)((s32)a0 + 0x2) == 0x3; - } - - - -extern void (*D_80188EE8[])(void); - -void func_8017F508(void *a0) { - D_80188EE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F544); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F5B8); - -void func_8017F5F8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F600); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F704); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F7FC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F87C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017F8D8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FA74); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FC44); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FE04); - - -extern void (*D_801893A0[])(void); - -void func_8017FE4C(void *a0) { - D_801893A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FE88); - -extern void func_80029514(s32 arg); - void func_8017FF34(void) { - func_80029514(0x14A); - } - - - -extern s32 D_801B2E70; - -void func_8017FF54(void) { - D_801B2E70 = 1; -} - - - -extern s32 D_801B2E70; - -void func_8017FF68(void) { - D_801B2E70 = 2; -} - - - -extern s32 D_801B2E70; - -void func_8017FF7C(void) { - D_801B2E70 = 3; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FF90); - - -extern s32 D_801B2E70; - -void func_8017FFA0(void) { - D_801B2E70 = 4; -} - - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017FFB4(void) { - func_80029124(0x100, 1); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8017FFD8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180074); - - - -extern s32 func_8012E57C(s32 arg0, s32 arg1); - void func_801800A8(void) { - s32 r; - s32 p; - r = func_8012E57C(0x1af, 0x1); - if (r != 0) { - *(s16 *)(r + 0xFC) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801800DC); - -extern void func_80029514(s32 arg); - void func_8018010C(void) { - func_80029514(0x17C); - } - - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8018012C(void) { - func_80029124(0x105, 1); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180150); - -void func_801801EC(void) { -} - - -extern void (*D_8018944C[])(void); - -void func_801801F4(void *a0) { - D_8018944C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180230); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180298); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801802EC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180380); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801803F4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801804C0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018052C); - - -extern void (*D_80189488[])(void); - -void func_80180584(void *a0) { - D_80189488[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801805C0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180614); - -extern void func_8018074C(s32 a0, s32 a1); - void func_8018064C(s32 arg0) { - func_8018074C(arg0, arg0 + 0x24); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018066C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018074C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180874); - -extern s32 func_80180A10(void); - void func_801809F0(void) { - func_80180A10(); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180A10); - -extern s32 func_80180A9C(void); - -s32 func_80180A9C(void) { - return 0x36; -} - - - -extern void (*D_80189518[])(void); - -void func_80180AA4(void *a0) { - D_80189518[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180AE0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180B28); - -void func_80180BF4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180BFC); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801AC620[]; - -extern s32 func_80180EC8(s32 a0); - -void func_80180D80(int param_1) -{ - D_801AC620[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80180EC8)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180DD0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180E50); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180EC8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80180F08); - - -extern void (*D_801AC67C[])(void); - -void func_80181124(void *a0) { - D_801AC67C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80181160(void) { -} - -void func_80181168(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80181170); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80181274); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018150C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80181694); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80181B40); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80181CD4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182084); - -extern void (*D_801AD7C8[])(void); - -void func_80182170(void *a0) { - D_801AD7C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_801AD87C[])(void); - -void func_801821AC(void *a0) { - D_801AD87C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801821E8(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182200); - -void func_801822A4(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801822C0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182344); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182380); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801823B0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182434); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801824F8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801825D8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182648); - -void func_80182724(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018272C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801827E4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801828A8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801828FC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182978); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182A5C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182B28); - -extern void (*D_801AFEA0[])(void); - -void func_80182C00(void *a0) { - D_801AFEA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182C3C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182E30); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182EE0); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80182F90); - -void func_80183040(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183048); - - -extern void (*D_801B01E8[])(void); - -void func_801830EC(void *a0) { - D_801B01E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183128); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801831FC); - -void func_80183224(void) { -} - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018322C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183378); - -extern void func_8012C218(void *a0); - void func_80183498(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((s32 (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801834C4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801834D4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801834E4); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80183524(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183558); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018357C); - - -extern void (*D_801B0210[])(void); - -void func_801835E0(void *a0) { - D_801B0210[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018361C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801836A4); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183764); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801837D4); - - -extern void (*D_801B033C[])(void); - -void func_801838CC(void *a0) { - D_801B033C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183908); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801839E0); - -void func_80183A08(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801B02EC; - void func_80183A10(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801B02EC); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183A3C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183A7C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183B3C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183BA8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183BB8); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183BC8); - -extern void func_800296F8(void *a0); - s32 func_80183BE0(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183C04); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183D58); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80183FB0); - -extern void (*D_801B0404[])(void); - -void func_80184004(void *a0) { - D_801B0404[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80184040); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018412C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_801841EC); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018423C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80184324); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_80184370); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_801734BC", func_8018478C); - -void func_80184CAC(void) { -} - diff --git a/src/ov_SC03_092/ov_SC03_092_jr_80178D40.c b/src/ov_SC03_092/ov_SC03_092_jr_80178D40.c new file mode 100644 index 000000000..0af429c32 --- /dev/null +++ b/src/ov_SC03_092/ov_SC03_092_jr_80178D40.c @@ -0,0 +1,4992 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187EE8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B2138; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187EDC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187F20[]; +extern unsigned short D_80187F28[]; +extern unsigned short D_80187F30[]; +extern unsigned char D_801B2140[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B2138; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187F38[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B2274; +extern M2C_UNK D_801B2278; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B2200; +extern void (*D_80187F68[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B227C[]; +extern u8 D_801B2284[]; +extern u8 D_801B2234[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187F70[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187F8C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187F94[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187FFC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187FA0; +extern u8 D_80187FAC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188030[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188038[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018808C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801880C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801880B0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801880DC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188154[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018815C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188164[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018816C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188174[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018817C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188188[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188194[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801881A0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801881B0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801881C0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801881C8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801881D0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801881D8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801881E0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801881E8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801881F0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801881F8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188200[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188208[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188210[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188218[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188220[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188228[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188230[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188238[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188240[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188248[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188250[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188258[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188260[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188268[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188270[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801882B4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188278; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801882E4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188320[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188378[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188388[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188390[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801884F8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188504[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B17F4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B3010; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B29B8; +extern short D_801B3084; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B3084) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B3084)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B29B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B3084) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B2FE0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B2FE0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B3084) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B3084) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B2E14[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B29BC; + extern s32 D_801B2DD0; + extern s16 D_801B2DD4; + extern s16 D_801B2DD8; + extern s16 D_801B2DDC; + extern s16 D_801B2DE0; + extern s32 D_801B2DE8; + extern s32 D_801B2DEC; + extern s32 D_801B2DFC; + extern s16 D_801B2E00; + extern s16 D_801B2E04; + extern s32 D_801B2E08; + extern s32 D_801B2E10; + extern s32 D_801B2E14[10]; + extern s32 D_801B2F28; + extern s16 D_801B2FE0; + extern s32 D_801B300C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B2FE0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B2DD0); + D_801B2DD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B2DDC, D_801B2DE0 ? 0x48 : 0x40); + (*(s16*)&D_801B3084) = 2; + break; + case 0: + func_80179B28(D_801B2DD0); + D_801B2DD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B2DD4, D_801B2DD8 ? 0x48 : 0x40); + (*(s16*)&D_801B3084) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B2F28 != 0) { + func_80179B28(D_801B2DD0); + D_801B2DD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B2DD4, D_801B2DD8 ? 0x48 : 0x40); + (*(s16*)&D_801B3084) = 1; + } else { + (*(s16*)&D_801B3084) = 3; + } + break; + case 0x32: + func_80179B28(D_801B2DD0); + D_801B2DD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B2DD4, + D_801B2DD8 ? 0x48 : 0x40); + (*(s16*)&D_801B3084) = 1; + break; + case 2: + func_80179B28(D_801B2DD0); + if (D_801B2DE8 != 0) { + D_801B29B8 = D_801B2DE8; + D_801B2DE8 = 0; + (*(s16*)&D_801B3084) = 3; + return; + } + (*(s16*)&D_801B3084) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B3084) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B3084) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B3084) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B3084) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B3084) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B3084) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B3084) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B3084) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B3084) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B3084) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B3084) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x1B: + D_801B2E08 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B3084) = 4; + D_801B29BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B3084) = 5; + D_801B2DFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B2DFC = (s32)func_8017A3B0; + (*(s16*)&D_801B3084) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x24: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B3084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B3084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B3084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3084) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3084) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3084) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B3084) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B3084) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B3084) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B2DEC); + (*(s16*)&D_801B3084) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B2DEC); + (*(s16*)&D_801B3084) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B2DEC); + (*(s16*)&D_801B3084) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B2DEC); + (*(s16*)&D_801B3084) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + break; + case 0x4E: + D_801B2E10 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x2B: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B3084) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B300C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B3084) = 3; + break; + case 0x34: + (*(s16*)&D_801B3084) = 3; + D_801B29B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B2DE8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B3084) = 3; + D_801B29B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B3084) = 3; + D_801B29B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B29B8 = *(s32 *)(D_801B29B8 + 4); + return; + case 0x37: + (*(s16*)&D_801B3084) = 3; + D_801B2DD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B2DD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B3084) = 3; + D_801B2DDC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B2DE0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B3084) = 3; + D_801B2DD4 = w1; + D_801B2DD8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B3084) = 3; + D_801B2DDC = w2; + D_801B2DE0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + case 0x43: + D_801B2DFC = (s32)func_8017A3D8; + D_801B2E04 = 0; + (*(s16*)&D_801B3084) = 5; + D_801B2E00 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3084) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3084) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3084) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B2E14; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B3084) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B2E14; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B3084) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B2E14[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B3084) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B2E14; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B3084) = 3; + break; + default: + break; + } +Lend: + D_801B29B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B2DE4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B2DE4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B2DE4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B2DE4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B2E0C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B2E0C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B2DC8; + +s32 func_8017A3B0(void) { + switch (D_801B2DC8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B2E04; +extern short D_801B2E00; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B2E04) { + case 0: + func_800D0CA0(1); + D_801B2E04 = D_801B2E04 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B2E00; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B2E04 = D_801B2E04 + 1; + if (D_801B2E04 < 0x1E) { + return 0; + } + D_801B2E04 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B2E44; + extern s16 D_801B2E46; + extern s16 D_801B2E48; + extern s16 D_801B2E3C; + extern s16 D_801B2E3E; + extern s16 D_801B2E40; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B2E44, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B2E46, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B2E48, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B2E3C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B2E3E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B2E40, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B2DCC; +extern u16 D_801B2E4C; +extern u16 D_801B2E4E; +extern u16 D_801B2E50; +extern s16 D_801B3010; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B3010 = 0; + D_801B2DCC = 0; + D_801B2E4C = D_80126B5E; + D_801B2E4E = D_80126B62; + D_801B2E50 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188640[]; + extern s16 D_801B2E44; + extern s16 D_801B2E3C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188640[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188640[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B2E44; + s16 *p78C = &D_801B2E3C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B3010 = 1; + D_801B2DCC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B2DEC; + extern SV4_8017B368 D_801B2DF4; + extern s16 D_801B2E44; + extern s16 D_801B2E3C; + extern u16 D_80188640; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B2DEC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B2DF4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80188640)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80188640)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B2E44) = loc0; + (*(SV4_8017B368 *)&D_801B2E3C) = loc1; + D_801B3010 = 1; + D_801B2DCC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188640[]; + extern s16 D_801B2E44; + extern s16 D_801B2E46; + extern s16 D_801B2E48; + extern s16 D_801B2E3C; + extern s16 D_801B2E3E; + extern s16 D_801B2E40; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188640[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188640[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B2E44; + s16 *p78C = &D_801B2E3C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B2E46; + v798 = D_801B2E48; + v78C = *p78C; + v78E = D_801B2E3E; + v790 = D_801B2E40; + __asm__ __volatile__(""); + D_801B3010 = 1; + D_801B2DCC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B2DCC; +extern s16 D_801B2E44; +extern s16 D_801B2E46; +extern s16 D_801B2E48; +extern s16 D_801B2E3C; +extern s16 D_801B2E3E; +extern s16 D_801B2E40; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B2DCC = 0; + D_801B2E44 = (s16) D_80114F30; + D_801B2E46 = (s16) D_80114F34; + D_801B2E48 = (s16) D_80114F38; + D_801B2E3C = (s16) D_80114F24; + D_801B2E3E = (s16) D_80114F28; + D_801B2E40 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B2E5C; +extern s16 D_801B2E5E; +extern s16 D_801B2E60; +extern s16 D_801B2E64; +extern s16 D_801B2E66; +extern s16 D_801B2E68; + +void func_8017B824(void) { + D_801B2E5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B2E5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B2E60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B2E64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B2E66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B2E68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B2E5C; +extern s16 D_801B2E5E; +extern s16 D_801B2E60; +extern s16 D_801B2E64; +extern s16 D_801B2E66; +extern s16 D_801B2E68; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B2E5C; + D_80114F34 = D_801B2E5E; + D_80114F38 = D_801B2E60; + D_80114F24 = D_801B2E64; + D_80114F28 = D_801B2E66; + D_80114F2C = D_801B2E68; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B2E44), src[8..15] -> (*(S8_8017B8E8 *)&D_801B2E3C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B2E44) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B2E3C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B2E4C; +extern u16 D_801B2E4E; +extern u16 D_801B2E50; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B2DCC; +extern short D_801B2E54; +extern short D_801B2E56; +extern short D_801B2E58; +extern s16 D_801B2E44; +extern s16 D_801B2E46; +extern s16 D_801B2E48; +extern s16 D_801B2E3C; +extern s16 D_801B2E3E; +extern s16 D_801B2E40; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B2E4C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B2E4E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B2E50); + (*(s16 *)&D_801B2E54) = buf[0]; + (*(s16 *)&D_801B2E56) = buf[1]; + (*(s16 *)&D_801B2E58) = buf[2]; + D_801B2E44 = D_80114F30 + buf[0]; + D_801B2DCC = 0; + D_801B2E46 = D_80114F34 + buf[1]; + D_801B2E48 = D_80114F38 + buf[2]; + D_801B2E3C = D_80114F24 + buf[0]; + D_801B2E3E = D_80114F28 + buf[1]; + D_801B2E40 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B2DEC; +extern SV4 D_801B2DF4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B2DF4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B2DEC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B2DF4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B2DF4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B2DEC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B2DF4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B2E14[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B2E14; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B2DCC; +extern s16 D_801B3010; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B2DCC = D_801B2DCC + 1; + if (D_801B2DCC >= 0x1F) { + D_801B3010 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B2DCC; +extern s16 D_801B3010; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B2DCC = D_801B2DCC + 1; + if (0x18 < D_801B2DCC) { + func_8012A4BC(); + D_801B3010 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B2DCC; +extern void (*D_801B2E10)(void); +extern short D_801B2E54; +extern short D_801B2E56; +extern short D_801B2E58; +extern s16 D_801B3010; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B2DCC = D_801B2DCC + 1; + if (D_801B2DCC >= 0x19) { + if (D_801B2E10 != 0) { + (*D_801B2E10)(); + } else { + D_80114F30 = D_80114F30 + D_801B2E54; + D_80114F34 = D_80114F34 + D_801B2E56; + D_80114F38 = D_80114F38 + D_801B2E58; + D_80114F24 = D_80114F24 + D_801B2E54; + D_80114F28 = D_80114F28 + D_801B2E56; + D_80114F2C = D_80114F2C + D_801B2E58; + func_8012A4BC(); + } + D_801B3010 = 0; + } +} + + + +extern void (*D_801886E0[])(void); + +void func_8017BE60(void *a0) { + D_801886E0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017BEBC); + + +extern void (*D_80188718[])(void); + +void func_8017BEF8(void *a0) { + D_80188718[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C218); + + +extern void (*D_8018872C[])(void); + +void func_8017C524(void *a0) { + D_8018872C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C770); + + +extern void (*D_80188740[])(void); + +void func_8017C7C4(void *a0) { + D_80188740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017C910); + + +extern void (*D_80188760[])(void); + +void func_8017CA80(void *a0) { + D_80188760[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017CABC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017CC80); + + +extern void (*D_80188768[])(void); + +void func_8017CD14(void *a0) { + D_80188768[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80188754; + +void func_8017CD50(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80188754, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017CE58); + + +extern void (*D_80188918[])(void); + +void func_8017D9CC(void *a0) { + D_80188918[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DA08); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DA4C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188920[])(void); + +void func_8017DA70(void *a0) { + D_80188920[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DAAC); + + +extern void (*D_80188928[])(void); + +void func_8017DAF0(void *a0) { + D_80188928[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DB2C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DB6C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DBE8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188934[])(void); + +void func_8017DC08(void *a0) { + D_80188934[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DC44); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DC88); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DCC8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DCF0); + + +extern void (*D_80188954[])(void); + +void func_8017DD18(void *a0) { + D_80188954[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DD54); + +void func_8017DD9C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DDA4); + + +extern s32 func_8014C050(s32 arg0, s32 arg1); + extern void func_80171928(void *a0); + void func_8017DDE8(void *a0) { + if (!func_8014C050((s32)a0, 0x1A)) { + ((void (*)(void *))func_80171928)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DE4C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DE74); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017DF40); + + +extern void (*D_801889B4[])(void); + +void func_8017E008(void *a0) { + D_801889B4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E044); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E2FC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E524); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E580); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E60C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E6A0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E754); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017E780); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EAA0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EBD0); + + +extern void (*D_80188C70[])(void); + +void func_8017ECFC(void *a0) { + D_80188C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017ED38); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EDDC); + +void func_8017EE38(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EE40); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EE8C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017EF54); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F01C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F088); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F0A8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F214); + + +extern void func_8017E754(void); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8017F250(void) { + func_8017E754(); + ((s32 (*)(s32, s32))func_8002D4C8)(0xB16, 0); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F27C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F29C); + + +extern void (*D_80188E48[])(void); + +void func_8017F2BC(void *a0) { + D_80188E48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F2F8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F49C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F4BC); + +s32 func_8017F4F4(s32 *a0) { + return *(u16 *)((s32)a0 + 0x2) == 0x3; + } + + + +extern void (*D_80188EE8[])(void); + +void func_8017F508(void *a0) { + D_80188EE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F544); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F5B8); + +void func_8017F5F8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F600); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F704); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F7FC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F87C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017F8D8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FA74); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FC44); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FE04); + + +extern void (*D_801893A0[])(void); + +void func_8017FE4C(void *a0) { + D_801893A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FE88); + +extern void func_80029514(s32 arg); + void func_8017FF34(void) { + func_80029514(0x14A); + } + + + +extern s32 D_801B2E70; + +void func_8017FF54(void) { + D_801B2E70 = 1; +} + + + +extern s32 D_801B2E70; + +void func_8017FF68(void) { + D_801B2E70 = 2; +} + + + +extern s32 D_801B2E70; + +void func_8017FF7C(void) { + D_801B2E70 = 3; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FF90); + + +extern s32 D_801B2E70; + +void func_8017FFA0(void) { + D_801B2E70 = 4; +} + + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017FFB4(void) { + func_80029124(0x100, 1); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8017FFD8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180074); + + + +extern s32 func_8012E57C(s32 arg0, s32 arg1); + void func_801800A8(void) { + s32 r; + s32 p; + r = func_8012E57C(0x1af, 0x1); + if (r != 0) { + *(s16 *)(r + 0xFC) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801800DC); + +extern void func_80029514(s32 arg); + void func_8018010C(void) { + func_80029514(0x17C); + } + + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8018012C(void) { + func_80029124(0x105, 1); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180150); + +void func_801801EC(void) { +} + + +extern void (*D_8018944C[])(void); + +void func_801801F4(void *a0) { + D_8018944C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180230); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180298); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801802EC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180380); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801803F4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801804C0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018052C); + + +extern void (*D_80189488[])(void); + +void func_80180584(void *a0) { + D_80189488[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801805C0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180614); + +extern void func_8018074C(s32 a0, s32 a1); + void func_8018064C(s32 arg0) { + func_8018074C(arg0, arg0 + 0x24); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018066C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018074C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180874); + +extern s32 func_80180A10(void); + void func_801809F0(void) { + func_80180A10(); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180A10); + +extern s32 func_80180A9C(void); + +s32 func_80180A9C(void) { + return 0x36; +} + + + +extern void (*D_80189518[])(void); + +void func_80180AA4(void *a0) { + D_80189518[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180AE0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180B28); + +void func_80180BF4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180BFC); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801AC620[]; + +extern s32 func_80180EC8(s32 a0); + +void func_80180D80(int param_1) +{ + D_801AC620[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80180EC8)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180DD0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180E50); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180EC8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80180F08); + + +extern void (*D_801AC67C[])(void); + +void func_80181124(void *a0) { + D_801AC67C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80181160(void) { +} + +void func_80181168(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80181170); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80181274); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018150C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80181694); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80181B40); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80181CD4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182084); + +extern void (*D_801AD7C8[])(void); + +void func_80182170(void *a0) { + D_801AD7C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_801AD87C[])(void); + +void func_801821AC(void *a0) { + D_801AD87C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801821E8(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182200); + +void func_801822A4(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801822C0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182344); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182380); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801823B0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182434); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801824F8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801825D8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182648); + +void func_80182724(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018272C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801827E4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801828A8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801828FC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182978); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182A5C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182B28); + +extern void (*D_801AFEA0[])(void); + +void func_80182C00(void *a0) { + D_801AFEA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182C3C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182E30); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182EE0); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80182F90); + +void func_80183040(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183048); + + +extern void (*D_801B01E8[])(void); + +void func_801830EC(void *a0) { + D_801B01E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183128); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801831FC); + +void func_80183224(void) { +} + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018322C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183378); + +extern void func_8012C218(void *a0); + void func_80183498(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((s32 (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801834C4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801834D4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801834E4); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80183524(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183558); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018357C); + + +extern void (*D_801B0210[])(void); + +void func_801835E0(void *a0) { + D_801B0210[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018361C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801836A4); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183764); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801837D4); + + +extern void (*D_801B033C[])(void); + +void func_801838CC(void *a0) { + D_801B033C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183908); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801839E0); + +void func_80183A08(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801B02EC; + void func_80183A10(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801B02EC); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183A3C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183A7C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183B3C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183BA8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183BB8); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183BC8); + +extern void func_800296F8(void *a0); + s32 func_80183BE0(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183C04); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183D58); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80183FB0); + +extern void (*D_801B0404[])(void); + +void func_80184004(void *a0) { + D_801B0404[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80184040); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018412C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_801841EC); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018423C); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80184324); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_80184370); + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_80178D40", func_8018478C); + +void func_80184CAC(void) { +} + + diff --git a/src/ov_SC03_093/ov_SC03_093_jr_801734BC.c b/src/ov_SC03_093/ov_SC03_093_jr_801734BC.c index 3e50ef27a..e591be425 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_801734BC.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_801734BC.c @@ -3105,1335 +3105,3 @@ void func_80178D18(void) { D_801CC6DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CC254; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CC254 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CC254; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CC254 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CC27C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CC27C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CC238; - -s32 func_8017A3B0(void) { - switch (D_801CC238) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CC274; -extern short D_801CC270; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CC274) { - case 0: - func_800D0CA0(1); - D_801CC274 = D_801CC274 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CC270; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CC274 = D_801CC274 + 1; - if (D_801CC274 < 0x1E) { - return 0; - } - D_801CC274 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CC2B4; - extern s16 D_801CC2B6; - extern s16 D_801CC2B8; - extern s16 D_801CC2AC; - extern s16 D_801CC2AE; - extern s16 D_801CC2B0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CC2B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CC2B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CC2B8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CC2AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CC2AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CC2B0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CC23C; -extern u16 D_801CC2BC; -extern u16 D_801CC2BE; -extern u16 D_801CC2C0; -extern s16 D_801CC668; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CC668 = 0; - D_801CC23C = 0; - D_801CC2BC = D_80126B5E; - D_801CC2BE = D_80126B62; - D_801CC2C0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189818[]; - extern s16 D_801CC2B4; - extern s16 D_801CC2AC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189818[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189818[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CC2B4; - s16 *p78C = &D_801CC2AC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CC668 = 1; - D_801CC23C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CC25C; - extern SV4_8017B368 D_801CC264; - extern s16 D_801CC2B4; - extern s16 D_801CC2AC; - extern u16 D_80189818; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CC25C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CC264; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80189818)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80189818)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CC2B4) = loc0; - (*(SV4_8017B368 *)&D_801CC2AC) = loc1; - D_801CC668 = 1; - D_801CC23C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189818[]; - extern s16 D_801CC2B4; - extern s16 D_801CC2B6; - extern s16 D_801CC2B8; - extern s16 D_801CC2AC; - extern s16 D_801CC2AE; - extern s16 D_801CC2B0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189818[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189818[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CC2B4; - s16 *p78C = &D_801CC2AC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CC2B6; - v798 = D_801CC2B8; - v78C = *p78C; - v78E = D_801CC2AE; - v790 = D_801CC2B0; - __asm__ __volatile__(""); - D_801CC668 = 1; - D_801CC23C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CC23C; -extern s16 D_801CC2B4; -extern s16 D_801CC2B6; -extern s16 D_801CC2B8; -extern s16 D_801CC2AC; -extern s16 D_801CC2AE; -extern s16 D_801CC2B0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CC23C = 0; - D_801CC2B4 = (s16) D_80114F30; - D_801CC2B6 = (s16) D_80114F34; - D_801CC2B8 = (s16) D_80114F38; - D_801CC2AC = (s16) D_80114F24; - D_801CC2AE = (s16) D_80114F28; - D_801CC2B0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CC2CC; -extern s16 D_801CC2CE; -extern s16 D_801CC2D0; -extern s16 D_801CC2D4; -extern s16 D_801CC2D6; -extern s16 D_801CC2D8; - -void func_8017B824(void) { - D_801CC2CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CC2CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CC2D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CC2D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CC2D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CC2D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CC2CC; -extern s16 D_801CC2CE; -extern s16 D_801CC2D0; -extern s16 D_801CC2D4; -extern s16 D_801CC2D6; -extern s16 D_801CC2D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CC2CC; - D_80114F34 = D_801CC2CE; - D_80114F38 = D_801CC2D0; - D_80114F24 = D_801CC2D4; - D_80114F28 = D_801CC2D6; - D_80114F2C = D_801CC2D8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CC2B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CC2AC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CC2B4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CC2AC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CC2BC; -extern u16 D_801CC2BE; -extern u16 D_801CC2C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CC23C; -extern short D_801CC2C4; -extern short D_801CC2C6; -extern short D_801CC2C8; -extern s16 D_801CC2B4; -extern s16 D_801CC2B6; -extern s16 D_801CC2B8; -extern s16 D_801CC2AC; -extern s16 D_801CC2AE; -extern s16 D_801CC2B0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CC2BC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CC2BE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CC2C0); - (*(s16 *)&D_801CC2C4) = buf[0]; - (*(s16 *)&D_801CC2C6) = buf[1]; - (*(s16 *)&D_801CC2C8) = buf[2]; - D_801CC2B4 = D_80114F30 + buf[0]; - D_801CC23C = 0; - D_801CC2B6 = D_80114F34 + buf[1]; - D_801CC2B8 = D_80114F38 + buf[2]; - D_801CC2AC = D_80114F24 + buf[0]; - D_801CC2AE = D_80114F28 + buf[1]; - D_801CC2B0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CC25C; -extern SV4 D_801CC264; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CC264) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CC25C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CC264 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CC264)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CC25C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CC264) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CC284[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CC284; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CC23C; -extern s16 D_801CC668; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CC23C = D_801CC23C + 1; - if (D_801CC23C >= 0x1F) { - D_801CC668 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CC23C; -extern s16 D_801CC668; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CC23C = D_801CC23C + 1; - if (0x18 < D_801CC23C) { - func_8012A4BC(); - D_801CC668 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CC23C; -extern void (*D_801CC280)(void); -extern short D_801CC2C4; -extern short D_801CC2C6; -extern short D_801CC2C8; -extern s16 D_801CC668; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CC23C = D_801CC23C + 1; - if (D_801CC23C >= 0x19) { - if (D_801CC280 != 0) { - (*D_801CC280)(); - } else { - D_80114F30 = D_80114F30 + D_801CC2C4; - D_80114F34 = D_80114F34 + D_801CC2C6; - D_80114F38 = D_80114F38 + D_801CC2C8; - D_80114F24 = D_80114F24 + D_801CC2C4; - D_80114F28 = D_80114F28 + D_801CC2C6; - D_80114F2C = D_80114F2C + D_801CC2C8; - func_8012A4BC(); - } - D_801CC668 = 0; - } -} - - - -extern void (*D_801898B8[])(void); - -void func_8017BE60(void *a0) { - D_801898B8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017C738); - - -extern void (*D_801899D4[])(void); - -void func_8017C8B8(void *a0) { - D_801899D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CCD4); - - -extern void (*D_80189A2C[])(void); - -void func_8017CD10(void *a0) { - D_80189A2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D030); - - -extern void (*D_80189A40[])(void); - -void func_8017D33C(void *a0) { - D_80189A40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D588); - - -extern void (*D_80189A54[])(void); - -void func_8017D5DC(void *a0) { - D_80189A54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E7F8); - - -extern void (*D_80189B9C[])(void); - -void func_8017E838(void *a0) { - D_80189B9C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E874); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E8B8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80189BA4[])(void); - -void func_8017E8DC(void *a0) { - D_80189BA4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E918); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E958(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017E9D4); - - -extern void (*D_80189BB0[])(void); - -void func_8017E9F4(void *a0) { - D_80189BB0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EA30); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EAA4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EACC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EAF4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EB8C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EC24); - - -extern void (*D_80189BC4[])(void); - -void func_8017ECBC(void *a0) { - D_80189BC4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017ECF8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017ED98); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EE38); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017EF20); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F0B8); - - -extern void (*D_80189C74[])(void); - -void func_8017F0E8(void *a0) { - D_80189C74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F124); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F1E8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F23C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F2B8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F2D8); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017F374(void *a0) { - *(s16 *)((char *)a0 + 0xFC) = 0; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F398); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F548); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F570); - -extern s32 D_801CC560; - void func_8017F708(void) { - D_801CC560 = 1; - } - - -extern s32 D_801CC560; - void func_8017F71C(void) { - D_801CC560 = 0; - } - - - -extern void (*D_801A1234[])(void); - -void func_8017F72C(void *a0) { - D_801A1234[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F768); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F7D0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F834); - - -extern void (*D_801A124C[])(void); - -void func_8017F89C(void *a0) { - D_801A124C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F8D8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017F970); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017FA00); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017FA54); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017FCEC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8017FE74); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180320); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801804B4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180864); - - -extern void (*D_801A2608[])(void); - -void func_80180950(void *a0) { - D_801A2608[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A26BC[])(void); - -void func_8018098C(void *a0) { - D_801A26BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801809C8(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801809E0); - - -void func_80180A84(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180AA0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180B24); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180B60); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180B90); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180C14); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180CD8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180DB8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180E28); - -void func_80180F04(void) { -} - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180F0C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80180FC4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181088); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801810DC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181158); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018123C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181308); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801813E0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181470); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801815FC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018164C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801816C8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018171C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801818F0); - -void func_80181B84(void) { -} - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181B8C); - -extern void func_80182144(void *a0); - void func_80181BC0(u8 *param_1) { - *(short *)(param_1 + 0x5c) = 0; - *(int *)(param_1 + 0x1c) = 0; - ((void (*)(int))func_80182144)(*(int *)(param_1 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181BEC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181CD8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181D04); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181D60); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181DC0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181ED4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80181F88); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182000); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018208C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801820C0); - -void func_80182124(s32 arg0) { - if (arg0 != 0) { - *(s32 *)((s32)arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_80182144(void *a0) { - if ((s32)a0 != 0) { - *(s32 *)((char *)a0 + 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182164); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182208); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182288); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018232C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182434); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801825B8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801827DC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182B90); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80182DD0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183038); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801831E0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018342C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183578); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183630); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183784); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183830); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801838E0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801839C8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183AE4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183BC4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183C9C); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80183D04(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183D40); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183DE4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183EA4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183ED8); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80183F34(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183F6C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80183FC8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801840A0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184134); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184200); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801842D8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184374); - -void func_801843CC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801843D4); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184474); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801844C8); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018455C); - -extern s32 func_8012BEE8(s32 a0); - -void func_801845A4(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (iVar1 == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801845CC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184618); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184704); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184788); - -extern void func_8012CBCC(s32 a0); - void func_80184894(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801848CC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184938); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80184F90); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185344); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018547C); - - -extern void (*D_801C5EE8[])(void); - -void func_801856E4(void *a0) { - D_801C5EE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801C5EFC[])(void); - -void func_80185720(void *a0) { - D_801C5EFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018575C); - -void func_80185804(void *a0) { - *(u16 *)((char *)a0 + 0xdc) -= 1; - if (*(s16 *)((char *)a0 + 0xdc) == 0) { - *(u16 *)((char *)a0 + 0xdc) = 0x1e; - *(u16 *)((char *)a0 + 0x2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185834); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801858A0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_8018591C); - -extern void func_8017F708(void); - void func_80185960(void) { - func_8017F708(); - } - - -extern void func_8017F71C(void); - void func_80185980(void) { - func_8017F71C(); - } - - - -extern void (*D_801C987C[])(void); - -void func_801859A0(void *a0) { - D_801C987C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_801859DC); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185BD0); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185C80); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185D30); - -void func_80185DE0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_801734BC", func_80185DE8); - diff --git a/src/ov_SC03_093/ov_SC03_093_jr_80178D40.c b/src/ov_SC03_093/ov_SC03_093_jr_80178D40.c new file mode 100644 index 000000000..e62e58a2d --- /dev/null +++ b/src/ov_SC03_093/ov_SC03_093_jr_80178D40.c @@ -0,0 +1,4802 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801890C0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CB5A8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801890B4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801890F8[]; +extern unsigned short D_80189100[]; +extern unsigned short D_80189108[]; +extern unsigned char D_801CB5B0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CB5A8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189110[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CB6E4; +extern M2C_UNK D_801CB6E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CB670; +extern void (*D_80189140[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CB6EC[]; +extern u8 D_801CB6F4[]; +extern u8 D_801CB6A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189148[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189164[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018916C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801891D4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189178; +extern u8 D_80189184; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80189208[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189210[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189264[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189298[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189288[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801892B4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018932C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189334[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018933C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189344[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018934C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189354[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189360[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018936C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189378[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189388[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189398[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801893A0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801893A8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801893B0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801893B8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801893C0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801893C8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801893D0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801893D8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801893E0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801893E8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801893F0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801893F8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189400[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80189408[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189410[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80189418[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189420[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80189428[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189430[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80189438[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189440[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189448[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018948C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189450; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801894BC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801894F8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189550[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189560[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189568[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801896D0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801896DC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CAC48; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CC668; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CBE28; +extern short D_801CC6DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CC6DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CC6DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CBE28 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CC6DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CC638 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CC638 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CC6DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CC6DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CC284[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CBE2C; + extern s32 D_801CC240; + extern s16 D_801CC244; + extern s16 D_801CC248; + extern s16 D_801CC24C; + extern s16 D_801CC250; + extern s32 D_801CC258; + extern s32 D_801CC25C; + extern s32 D_801CC26C; + extern s16 D_801CC270; + extern s16 D_801CC274; + extern s32 D_801CC278; + extern s32 D_801CC280; + extern s32 D_801CC284[10]; + extern s32 D_801CC580; + extern s16 D_801CC638; + extern s32 D_801CC664; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CC638; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CC240); + D_801CC240 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CC24C, D_801CC250 ? 0x48 : 0x40); + (*(s16*)&D_801CC6DC) = 2; + break; + case 0: + func_80179B28(D_801CC240); + D_801CC240 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CC244, D_801CC248 ? 0x48 : 0x40); + (*(s16*)&D_801CC6DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CC580 != 0) { + func_80179B28(D_801CC240); + D_801CC240 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CC244, D_801CC248 ? 0x48 : 0x40); + (*(s16*)&D_801CC6DC) = 1; + } else { + (*(s16*)&D_801CC6DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801CC240); + D_801CC240 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CC244, + D_801CC248 ? 0x48 : 0x40); + (*(s16*)&D_801CC6DC) = 1; + break; + case 2: + func_80179B28(D_801CC240); + if (D_801CC258 != 0) { + D_801CBE28 = D_801CC258; + D_801CC258 = 0; + (*(s16*)&D_801CC6DC) = 3; + return; + } + (*(s16*)&D_801CC6DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CC6DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CC6DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CC6DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x1B: + D_801CC278 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CC6DC) = 4; + D_801CBE2C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CC6DC) = 5; + D_801CC26C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CC26C = (s32)func_8017A3B0; + (*(s16*)&D_801CC6DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x24: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CC6DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CC6DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CC6DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CC6DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CC6DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CC6DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CC6DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CC25C); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CC25C); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CC25C); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CC25C); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x4E: + D_801CC280 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CC6DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CC664 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x34: + (*(s16*)&D_801CC6DC) = 3; + D_801CBE28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CC258 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CC6DC) = 3; + D_801CBE28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CC6DC) = 3; + D_801CBE28 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CBE28 = *(s32 *)(D_801CBE28 + 4); + return; + case 0x37: + (*(s16*)&D_801CC6DC) = 3; + D_801CC244 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CC248 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CC6DC) = 3; + D_801CC24C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CC250 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CC6DC) = 3; + D_801CC244 = w1; + D_801CC248 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CC6DC) = 3; + D_801CC24C = w2; + D_801CC250 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x43: + D_801CC26C = (s32)func_8017A3D8; + D_801CC274 = 0; + (*(s16*)&D_801CC6DC) = 5; + D_801CC270 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CC6DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CC6DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CC284; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CC6DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CC284; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CC6DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CC284[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CC6DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CC284; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CC6DC) = 3; + break; + default: + break; + } +Lend: + D_801CBE28 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CC254; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CC254 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CC254; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CC254 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CC27C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CC27C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CC238; + +s32 func_8017A3B0(void) { + switch (D_801CC238) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CC274; +extern short D_801CC270; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CC274) { + case 0: + func_800D0CA0(1); + D_801CC274 = D_801CC274 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CC270; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CC274 = D_801CC274 + 1; + if (D_801CC274 < 0x1E) { + return 0; + } + D_801CC274 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CC2B4; + extern s16 D_801CC2B6; + extern s16 D_801CC2B8; + extern s16 D_801CC2AC; + extern s16 D_801CC2AE; + extern s16 D_801CC2B0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CC2B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CC2B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CC2B8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CC2AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CC2AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CC2B0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CC23C; +extern u16 D_801CC2BC; +extern u16 D_801CC2BE; +extern u16 D_801CC2C0; +extern s16 D_801CC668; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CC668 = 0; + D_801CC23C = 0; + D_801CC2BC = D_80126B5E; + D_801CC2BE = D_80126B62; + D_801CC2C0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189818[]; + extern s16 D_801CC2B4; + extern s16 D_801CC2AC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189818[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189818[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CC2B4; + s16 *p78C = &D_801CC2AC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CC668 = 1; + D_801CC23C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CC25C; + extern SV4_8017B368 D_801CC264; + extern s16 D_801CC2B4; + extern s16 D_801CC2AC; + extern u16 D_80189818; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CC25C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CC264; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80189818)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80189818)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CC2B4) = loc0; + (*(SV4_8017B368 *)&D_801CC2AC) = loc1; + D_801CC668 = 1; + D_801CC23C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189818[]; + extern s16 D_801CC2B4; + extern s16 D_801CC2B6; + extern s16 D_801CC2B8; + extern s16 D_801CC2AC; + extern s16 D_801CC2AE; + extern s16 D_801CC2B0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189818[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189818[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CC2B4; + s16 *p78C = &D_801CC2AC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CC2B6; + v798 = D_801CC2B8; + v78C = *p78C; + v78E = D_801CC2AE; + v790 = D_801CC2B0; + __asm__ __volatile__(""); + D_801CC668 = 1; + D_801CC23C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CC23C; +extern s16 D_801CC2B4; +extern s16 D_801CC2B6; +extern s16 D_801CC2B8; +extern s16 D_801CC2AC; +extern s16 D_801CC2AE; +extern s16 D_801CC2B0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CC23C = 0; + D_801CC2B4 = (s16) D_80114F30; + D_801CC2B6 = (s16) D_80114F34; + D_801CC2B8 = (s16) D_80114F38; + D_801CC2AC = (s16) D_80114F24; + D_801CC2AE = (s16) D_80114F28; + D_801CC2B0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CC2CC; +extern s16 D_801CC2CE; +extern s16 D_801CC2D0; +extern s16 D_801CC2D4; +extern s16 D_801CC2D6; +extern s16 D_801CC2D8; + +void func_8017B824(void) { + D_801CC2CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CC2CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CC2D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CC2D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CC2D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CC2D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CC2CC; +extern s16 D_801CC2CE; +extern s16 D_801CC2D0; +extern s16 D_801CC2D4; +extern s16 D_801CC2D6; +extern s16 D_801CC2D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CC2CC; + D_80114F34 = D_801CC2CE; + D_80114F38 = D_801CC2D0; + D_80114F24 = D_801CC2D4; + D_80114F28 = D_801CC2D6; + D_80114F2C = D_801CC2D8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CC2B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CC2AC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CC2B4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CC2AC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CC2BC; +extern u16 D_801CC2BE; +extern u16 D_801CC2C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CC23C; +extern short D_801CC2C4; +extern short D_801CC2C6; +extern short D_801CC2C8; +extern s16 D_801CC2B4; +extern s16 D_801CC2B6; +extern s16 D_801CC2B8; +extern s16 D_801CC2AC; +extern s16 D_801CC2AE; +extern s16 D_801CC2B0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CC2BC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CC2BE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CC2C0); + (*(s16 *)&D_801CC2C4) = buf[0]; + (*(s16 *)&D_801CC2C6) = buf[1]; + (*(s16 *)&D_801CC2C8) = buf[2]; + D_801CC2B4 = D_80114F30 + buf[0]; + D_801CC23C = 0; + D_801CC2B6 = D_80114F34 + buf[1]; + D_801CC2B8 = D_80114F38 + buf[2]; + D_801CC2AC = D_80114F24 + buf[0]; + D_801CC2AE = D_80114F28 + buf[1]; + D_801CC2B0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CC25C; +extern SV4 D_801CC264; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CC264) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CC25C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CC264 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CC264)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CC25C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CC264) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CC284[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CC284; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CC23C; +extern s16 D_801CC668; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CC23C = D_801CC23C + 1; + if (D_801CC23C >= 0x1F) { + D_801CC668 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CC23C; +extern s16 D_801CC668; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CC23C = D_801CC23C + 1; + if (0x18 < D_801CC23C) { + func_8012A4BC(); + D_801CC668 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CC23C; +extern void (*D_801CC280)(void); +extern short D_801CC2C4; +extern short D_801CC2C6; +extern short D_801CC2C8; +extern s16 D_801CC668; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CC23C = D_801CC23C + 1; + if (D_801CC23C >= 0x19) { + if (D_801CC280 != 0) { + (*D_801CC280)(); + } else { + D_80114F30 = D_80114F30 + D_801CC2C4; + D_80114F34 = D_80114F34 + D_801CC2C6; + D_80114F38 = D_80114F38 + D_801CC2C8; + D_80114F24 = D_80114F24 + D_801CC2C4; + D_80114F28 = D_80114F28 + D_801CC2C6; + D_80114F2C = D_80114F2C + D_801CC2C8; + func_8012A4BC(); + } + D_801CC668 = 0; + } +} + + + +extern void (*D_801898B8[])(void); + +void func_8017BE60(void *a0) { + D_801898B8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017C738); + + +extern void (*D_801899D4[])(void); + +void func_8017C8B8(void *a0) { + D_801899D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CCD4); + + +extern void (*D_80189A2C[])(void); + +void func_8017CD10(void *a0) { + D_80189A2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D030); + + +extern void (*D_80189A40[])(void); + +void func_8017D33C(void *a0) { + D_80189A40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D588); + + +extern void (*D_80189A54[])(void); + +void func_8017D5DC(void *a0) { + D_80189A54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E7F8); + + +extern void (*D_80189B9C[])(void); + +void func_8017E838(void *a0) { + D_80189B9C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E874); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E8B8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80189BA4[])(void); + +void func_8017E8DC(void *a0) { + D_80189BA4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E918); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E958(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017E9D4); + + +extern void (*D_80189BB0[])(void); + +void func_8017E9F4(void *a0) { + D_80189BB0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EA30); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EAA4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EACC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EAF4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EB8C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EC24); + + +extern void (*D_80189BC4[])(void); + +void func_8017ECBC(void *a0) { + D_80189BC4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017ECF8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017ED98); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EE38); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017EF20); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F0B8); + + +extern void (*D_80189C74[])(void); + +void func_8017F0E8(void *a0) { + D_80189C74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F124); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F1E8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F23C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F2B8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F2D8); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F374(void *a0) { + *(s16 *)((char *)a0 + 0xFC) = 0; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F398); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F548); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F570); + +extern s32 D_801CC560; + void func_8017F708(void) { + D_801CC560 = 1; + } + + +extern s32 D_801CC560; + void func_8017F71C(void) { + D_801CC560 = 0; + } + + + +extern void (*D_801A1234[])(void); + +void func_8017F72C(void *a0) { + D_801A1234[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F768); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F7D0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F834); + + +extern void (*D_801A124C[])(void); + +void func_8017F89C(void *a0) { + D_801A124C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F8D8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017F970); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017FA00); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017FA54); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017FCEC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8017FE74); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180320); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801804B4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180864); + + +extern void (*D_801A2608[])(void); + +void func_80180950(void *a0) { + D_801A2608[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A26BC[])(void); + +void func_8018098C(void *a0) { + D_801A26BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801809C8(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801809E0); + + +void func_80180A84(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180AA0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180B24); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180B60); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180B90); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180C14); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180CD8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180DB8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180E28); + +void func_80180F04(void) { +} + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180F0C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80180FC4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181088); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801810DC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181158); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018123C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181308); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801813E0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181470); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801815FC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018164C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801816C8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018171C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801818F0); + +void func_80181B84(void) { +} + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181B8C); + +extern void func_80182144(void *a0); + void func_80181BC0(u8 *param_1) { + *(short *)(param_1 + 0x5c) = 0; + *(int *)(param_1 + 0x1c) = 0; + ((void (*)(int))func_80182144)(*(int *)(param_1 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181BEC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181CD8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181D04); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181D60); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181DC0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181ED4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80181F88); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182000); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018208C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801820C0); + +void func_80182124(s32 arg0) { + if (arg0 != 0) { + *(s32 *)((s32)arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_80182144(void *a0) { + if ((s32)a0 != 0) { + *(s32 *)((char *)a0 + 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182164); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182208); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182288); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018232C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182434); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801825B8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801827DC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182B90); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80182DD0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183038); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801831E0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018342C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183578); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183630); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183784); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183830); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801838E0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801839C8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183AE4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183BC4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183C9C); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80183D04(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183D40); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183DE4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183EA4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183ED8); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80183F34(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183F6C); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80183FC8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801840A0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184134); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184200); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801842D8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184374); + +void func_801843CC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801843D4); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184474); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801844C8); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018455C); + +extern s32 func_8012BEE8(s32 a0); + +void func_801845A4(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (iVar1 == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801845CC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184618); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184704); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184788); + +extern void func_8012CBCC(s32 a0); + void func_80184894(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801848CC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184938); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80184F90); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185344); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018547C); + + +extern void (*D_801C5EE8[])(void); + +void func_801856E4(void *a0) { + D_801C5EE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801C5EFC[])(void); + +void func_80185720(void *a0) { + D_801C5EFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018575C); + +void func_80185804(void *a0) { + *(u16 *)((char *)a0 + 0xdc) -= 1; + if (*(s16 *)((char *)a0 + 0xdc) == 0) { + *(u16 *)((char *)a0 + 0xdc) = 0x1e; + *(u16 *)((char *)a0 + 0x2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185834); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801858A0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_8018591C); + +extern void func_8017F708(void); + void func_80185960(void) { + func_8017F708(); + } + + +extern void func_8017F71C(void); + void func_80185980(void) { + func_8017F71C(); + } + + + +extern void (*D_801C987C[])(void); + +void func_801859A0(void *a0) { + D_801C987C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_801859DC); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185BD0); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185C80); + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185D30); + +void func_80185DE0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_80178D40", func_80185DE8); + + diff --git a/src/ov_SC03_094/ov_SC03_094_jr_801734BC.c b/src/ov_SC03_094/ov_SC03_094_jr_801734BC.c index c2d3af1c5..270a4055b 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_801734BC.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_801734BC.c @@ -3105,1344 +3105,3 @@ void func_80178D18(void) { D_801D3294 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D3094; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D3094 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D3094; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D3094 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D30BC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D30BC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D3078; - -s32 func_8017A3B0(void) { - switch (D_801D3078) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D30B4; -extern short D_801D30B0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D30B4) { - case 0: - func_800D0CA0(1); - D_801D30B4 = D_801D30B4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D30B0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D30B4 = D_801D30B4 + 1; - if (D_801D30B4 < 0x1E) { - return 0; - } - D_801D30B4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D30F4; - extern s16 D_801D30F6; - extern s16 D_801D30F8; - extern s16 D_801D30EC; - extern s16 D_801D30EE; - extern s16 D_801D30F0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D30F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D30F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D30F8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D30EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D30EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D30F0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D307C; -extern u16 D_801D30FC; -extern u16 D_801D30FE; -extern u16 D_801D3100; -extern s16 D_801D3220; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D3220 = 0; - D_801D307C = 0; - D_801D30FC = D_80126B5E; - D_801D30FE = D_80126B62; - D_801D3100 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B214[]; - extern s16 D_801D30F4; - extern s16 D_801D30EC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B214[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B214[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D30F4; - s16 *p78C = &D_801D30EC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D3220 = 1; - D_801D307C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D309C; - extern SV4_8017B368 D_801D30A4; - extern s16 D_801D30F4; - extern s16 D_801D30EC; - extern u16 D_8018B214; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D309C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D30A4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B214)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B214)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D30F4) = loc0; - (*(SV4_8017B368 *)&D_801D30EC) = loc1; - D_801D3220 = 1; - D_801D307C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B214[]; - extern s16 D_801D30F4; - extern s16 D_801D30F6; - extern s16 D_801D30F8; - extern s16 D_801D30EC; - extern s16 D_801D30EE; - extern s16 D_801D30F0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B214[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B214[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D30F4; - s16 *p78C = &D_801D30EC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D30F6; - v798 = D_801D30F8; - v78C = *p78C; - v78E = D_801D30EE; - v790 = D_801D30F0; - __asm__ __volatile__(""); - D_801D3220 = 1; - D_801D307C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D307C; -extern s16 D_801D30F4; -extern s16 D_801D30F6; -extern s16 D_801D30F8; -extern s16 D_801D30EC; -extern s16 D_801D30EE; -extern s16 D_801D30F0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D307C = 0; - D_801D30F4 = (s16) D_80114F30; - D_801D30F6 = (s16) D_80114F34; - D_801D30F8 = (s16) D_80114F38; - D_801D30EC = (s16) D_80114F24; - D_801D30EE = (s16) D_80114F28; - D_801D30F0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D310C; -extern s16 D_801D310E; -extern s16 D_801D3110; -extern s16 D_801D3114; -extern s16 D_801D3116; -extern s16 D_801D3118; - -void func_8017B824(void) { - D_801D310C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D310E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D3110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D3114 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D3116 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D3118 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D310C; -extern s16 D_801D310E; -extern s16 D_801D3110; -extern s16 D_801D3114; -extern s16 D_801D3116; -extern s16 D_801D3118; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D310C; - D_80114F34 = D_801D310E; - D_80114F38 = D_801D3110; - D_80114F24 = D_801D3114; - D_80114F28 = D_801D3116; - D_80114F2C = D_801D3118; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D30F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801D30EC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D30F4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D30EC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D30FC; -extern u16 D_801D30FE; -extern u16 D_801D3100; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D307C; -extern short D_801D3104; -extern short D_801D3106; -extern short D_801D3108; -extern s16 D_801D30F4; -extern s16 D_801D30F6; -extern s16 D_801D30F8; -extern s16 D_801D30EC; -extern s16 D_801D30EE; -extern s16 D_801D30F0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D30FC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D30FE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D3100); - (*(s16 *)&D_801D3104) = buf[0]; - (*(s16 *)&D_801D3106) = buf[1]; - (*(s16 *)&D_801D3108) = buf[2]; - D_801D30F4 = D_80114F30 + buf[0]; - D_801D307C = 0; - D_801D30F6 = D_80114F34 + buf[1]; - D_801D30F8 = D_80114F38 + buf[2]; - D_801D30EC = D_80114F24 + buf[0]; - D_801D30EE = D_80114F28 + buf[1]; - D_801D30F0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D309C; -extern SV4 D_801D30A4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D30A4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D309C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D30A4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D30A4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D309C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D30A4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D30C4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D30C4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D307C; -extern s16 D_801D3220; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D307C = D_801D307C + 1; - if (D_801D307C >= 0x1F) { - D_801D3220 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D307C; -extern s16 D_801D3220; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D307C = D_801D307C + 1; - if (0x18 < D_801D307C) { - func_8012A4BC(); - D_801D3220 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D307C; -extern void (*D_801D30C0)(void); -extern short D_801D3104; -extern short D_801D3106; -extern short D_801D3108; -extern s16 D_801D3220; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D307C = D_801D307C + 1; - if (D_801D307C >= 0x19) { - if (D_801D30C0 != 0) { - (*D_801D30C0)(); - } else { - D_80114F30 = D_80114F30 + D_801D3104; - D_80114F34 = D_80114F34 + D_801D3106; - D_80114F38 = D_80114F38 + D_801D3108; - D_80114F24 = D_80114F24 + D_801D3104; - D_80114F28 = D_80114F28 + D_801D3106; - D_80114F2C = D_80114F2C + D_801D3108; - func_8012A4BC(); - } - D_801D3220 = 0; - } -} - - - -extern void (*D_8018B2B4[])(void); - -void func_8017BE60(void *a0) { - D_8018B2B4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CDDC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CE1C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CE5C); - - -extern void (*D_8018B450[])(void); - -void func_8017CE9C(void *a0) { - D_8018B450[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CED8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CF1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CF40); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF80(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017CFFC); - - -extern void (*D_8018B464[])(void); - -void func_8017D01C(void *a0) { - D_8018B464[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D058); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D0CC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D0F4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D11C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D1B4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D24C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D2E4); - - -extern void (*D_8018B478[])(void); - -void func_8017D37C(void *a0) { - D_8018B478[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D458); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D544); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D630); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D6D0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D868); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017DAC8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017DEBC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E0FC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E254); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E3B0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E52C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E7B0); - - -extern void (*D_8018B664[])(void); - -void func_8017E810(void *a0) { - D_8018B664[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018B6F4[])(void); - -void func_8017E84C(void *a0) { - D_8018B6F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017E888(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E890); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E990); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017E9D4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EA74); - -void func_8017EAE4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EAEC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EBAC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EC00); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EC7C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EC9C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017EF34); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017F0BC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017F568); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017F6FC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FAAC); - - -extern void (*D_801A6D44[])(void); - -void func_8017FB98(void *a0) { - D_801A6D44[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A6DF8[])(void); - -void func_8017FBD4(void *a0) { - D_801A6DF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017FC10(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FC28); - - -void func_8017FCCC(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FCE8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FD6C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FDA8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FDD8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FE5C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8017FF20); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180070); - -void func_8018014C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180154); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018020C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801802D0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180324); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801803A0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180484); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180550); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180628); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801806B4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180820); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180864); - - -extern s32 func_8012B030(u8 *a0); - void func_80180BFC(s32 arg0) { - *(s32 *)(arg0 + 0x1c) = 1; - *(s16 *)(arg0 + 0x2) = 0x4; - ((s32 (*)(void *))func_8012B030)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180C28); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180CA0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180CF4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180EA4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80180F70); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801811E8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181448); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801814F4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801815C4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018172C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181780); - - -extern void (*D_801A8DB8[])(void); - -void func_80181984(void *a0) { - D_801A8DB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801819C0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181AA4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181AF8); - - -extern void func_801292C8(u8 *a0); - s32 func_80181C04(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181C38); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181C78); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181CD0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181D6C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181EC0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80181F98); - - -extern void (*D_801A8E4C[])(void); - -void func_80181FF8(void *a0) { - D_801A8E4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182034); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018205C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801820DC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182158); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182218); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182340); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801824B0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182644); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182898); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801829A4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182B40); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182BFC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182C88); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801AC1C0[]; - s32 func_80182CC0(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801AC1C0[0], &D_801AC1C0[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182CEC); - - -extern u8 D_80078EC1; - s32 func_80182D98(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182DB0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182E1C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80182EAC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183038); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183088); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183104); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183158); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018332C); - -void func_801835C0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801835C8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801835FC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183628); - -extern void func_80183B80(s32); - void func_80183714(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - func_80183B80(*(s32 *)((char *)arg0 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183740); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018379C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801837FC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183910); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801839C4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183A3C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183AC8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183AFC); - -void func_80183B60(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_80183B80(s32 arg0) { - if (arg0 != 0) { - *(s32 *)((char *)arg0 + 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183BA0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183C44); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183CC4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183D68); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80183E70); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801844C8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018487C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801849B4); - - -extern void (*D_801B2C28[])(void); - -void func_80184C1C(void *a0) { - D_801B2C28[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_801B2C3C[])(void); - -void func_80184C58(void *a0) { - D_801B2C3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80184C94); - -void func_80184D3C(void *a0) { - *(u16 *)((char *)a0 + 0xdc) -= 1; - if (*(s16 *)((char *)a0 + 0xdc) == 0) { - *(u16 *)((char *)a0 + 0xdc) = 0x1e; - *(u16 *)((char *)a0 + 2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80184D6C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80184DD8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80184E54); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80184E98); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018501C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185240); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801855F4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185834); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185A9C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185C44); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185E90); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80185FDC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186094); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801861E8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186294); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186344); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018642C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186548); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186628); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186700); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80186768(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801867A4); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186848); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186908); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018693C); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80186998(void *a0) { - if (func_80153BD8((s32)a0)) { - ((void (*)(s32))func_80153BF0)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801869D0); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186A2C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186B04); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186B98); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186C64); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186D3C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186DD8); - -void func_80186E30(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186E38); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186ED8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186F2C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80186FC0); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80187008(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80187030); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018707C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80187168); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801871EC); - - -extern void func_8012CBCC(s32 a0); - void func_801872F8(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((u8 *)a0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_80187330); - - -extern void (*D_801D06B8[])(void); - -void func_8018739C(void *a0) { - D_801D06B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801873D8); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801875CC); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018767C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_8018772C); - -void func_801877DC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_801734BC", func_801877E4); - diff --git a/src/ov_SC03_094/ov_SC03_094_jr_80178D40.c b/src/ov_SC03_094/ov_SC03_094_jr_80178D40.c new file mode 100644 index 000000000..8f3cedde3 --- /dev/null +++ b/src/ov_SC03_094/ov_SC03_094_jr_80178D40.c @@ -0,0 +1,4811 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018AABC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D23E8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018AAB0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018AAF4[]; +extern unsigned short D_8018AAFC[]; +extern unsigned short D_8018AB04[]; +extern unsigned char D_801D23F0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D23E8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018AB0C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D2524; +extern M2C_UNK D_801D2528; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D24B0; +extern void (*D_8018AB3C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D252C[]; +extern u8 D_801D2534[]; +extern u8 D_801D24E4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018AB44[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018AB60[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018AB68[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ABD0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018AB74; +extern u8 D_8018AB80; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018AC04[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018AC0C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018AC60[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018AC94[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018AC84[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018ACB0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018AD28[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018AD30[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018AD38[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018AD40[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018AD48[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018AD50[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018AD5C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018AD68[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018AD74[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018AD84[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018AD94[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018AD9C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018ADA4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018ADAC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018ADB4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018ADBC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018ADC4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018ADCC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018ADD4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018ADDC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018ADE4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018ADEC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018ADF4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018ADFC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018AE04[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018AE0C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018AE14[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018AE1C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018AE24[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018AE2C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018AE34[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018AE3C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018AE44[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018AE88[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018AE4C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018AEB8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018AEF4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018AF4C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018AF5C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018AF64[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018B0CC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018B0D8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D1A84; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D3220; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D2C68; +extern short D_801D3294; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D3294) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D3294)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D2C68 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D3294) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D31F0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D31F0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D3294) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D3294) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D30C4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D2C6C; + extern s32 D_801D3080; + extern s16 D_801D3084; + extern s16 D_801D3088; + extern s16 D_801D308C; + extern s16 D_801D3090; + extern s32 D_801D3098; + extern s32 D_801D309C; + extern s32 D_801D30AC; + extern s16 D_801D30B0; + extern s16 D_801D30B4; + extern s32 D_801D30B8; + extern s32 D_801D30C0; + extern s32 D_801D30C4[10]; + extern s32 D_801D3138; + extern s16 D_801D31F0; + extern s32 D_801D321C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D31F0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D3080); + D_801D3080 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D308C, D_801D3090 ? 0x48 : 0x40); + (*(s16*)&D_801D3294) = 2; + break; + case 0: + func_80179B28(D_801D3080); + D_801D3080 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D3084, D_801D3088 ? 0x48 : 0x40); + (*(s16*)&D_801D3294) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D3138 != 0) { + func_80179B28(D_801D3080); + D_801D3080 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D3084, D_801D3088 ? 0x48 : 0x40); + (*(s16*)&D_801D3294) = 1; + } else { + (*(s16*)&D_801D3294) = 3; + } + break; + case 0x32: + func_80179B28(D_801D3080); + D_801D3080 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D3084, + D_801D3088 ? 0x48 : 0x40); + (*(s16*)&D_801D3294) = 1; + break; + case 2: + func_80179B28(D_801D3080); + if (D_801D3098 != 0) { + D_801D2C68 = D_801D3098; + D_801D3098 = 0; + (*(s16*)&D_801D3294) = 3; + return; + } + (*(s16*)&D_801D3294) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D3294) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D3294) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D3294) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D3294) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D3294) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D3294) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D3294) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D3294) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D3294) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D3294) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D3294) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x1B: + D_801D30B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D3294) = 4; + D_801D2C6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D3294) = 5; + D_801D30AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D30AC = (s32)func_8017A3B0; + (*(s16*)&D_801D3294) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x24: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D3294) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D3294) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D3294) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D3294) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D3294) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D3294) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D3294) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D3294) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D3294) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D309C); + (*(s16*)&D_801D3294) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D309C); + (*(s16*)&D_801D3294) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D309C); + (*(s16*)&D_801D3294) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D309C); + (*(s16*)&D_801D3294) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + break; + case 0x4E: + D_801D30C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x2B: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D3294) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D321C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D3294) = 3; + break; + case 0x34: + (*(s16*)&D_801D3294) = 3; + D_801D2C68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D3098 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D3294) = 3; + D_801D2C68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D3294) = 3; + D_801D2C68 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D2C68 = *(s32 *)(D_801D2C68 + 4); + return; + case 0x37: + (*(s16*)&D_801D3294) = 3; + D_801D3084 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D3088 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D3294) = 3; + D_801D308C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D3090 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D3294) = 3; + D_801D3084 = w1; + D_801D3088 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D3294) = 3; + D_801D308C = w2; + D_801D3090 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + case 0x43: + D_801D30AC = (s32)func_8017A3D8; + D_801D30B4 = 0; + (*(s16*)&D_801D3294) = 5; + D_801D30B0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D3294) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D3294) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D3294) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D30C4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D3294) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D30C4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D3294) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D30C4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D3294) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D30C4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D3294) = 3; + break; + default: + break; + } +Lend: + D_801D2C68 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D3094; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D3094 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D3094; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D3094 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D30BC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D30BC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D3078; + +s32 func_8017A3B0(void) { + switch (D_801D3078) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D30B4; +extern short D_801D30B0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D30B4) { + case 0: + func_800D0CA0(1); + D_801D30B4 = D_801D30B4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D30B0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D30B4 = D_801D30B4 + 1; + if (D_801D30B4 < 0x1E) { + return 0; + } + D_801D30B4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D30F4; + extern s16 D_801D30F6; + extern s16 D_801D30F8; + extern s16 D_801D30EC; + extern s16 D_801D30EE; + extern s16 D_801D30F0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D30F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D30F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D30F8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D30EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D30EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D30F0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D307C; +extern u16 D_801D30FC; +extern u16 D_801D30FE; +extern u16 D_801D3100; +extern s16 D_801D3220; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D3220 = 0; + D_801D307C = 0; + D_801D30FC = D_80126B5E; + D_801D30FE = D_80126B62; + D_801D3100 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B214[]; + extern s16 D_801D30F4; + extern s16 D_801D30EC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B214[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B214[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D30F4; + s16 *p78C = &D_801D30EC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D3220 = 1; + D_801D307C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D309C; + extern SV4_8017B368 D_801D30A4; + extern s16 D_801D30F4; + extern s16 D_801D30EC; + extern u16 D_8018B214; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D309C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D30A4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B214)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B214)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D30F4) = loc0; + (*(SV4_8017B368 *)&D_801D30EC) = loc1; + D_801D3220 = 1; + D_801D307C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B214[]; + extern s16 D_801D30F4; + extern s16 D_801D30F6; + extern s16 D_801D30F8; + extern s16 D_801D30EC; + extern s16 D_801D30EE; + extern s16 D_801D30F0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B214[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B214[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D30F4; + s16 *p78C = &D_801D30EC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D30F6; + v798 = D_801D30F8; + v78C = *p78C; + v78E = D_801D30EE; + v790 = D_801D30F0; + __asm__ __volatile__(""); + D_801D3220 = 1; + D_801D307C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D307C; +extern s16 D_801D30F4; +extern s16 D_801D30F6; +extern s16 D_801D30F8; +extern s16 D_801D30EC; +extern s16 D_801D30EE; +extern s16 D_801D30F0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D307C = 0; + D_801D30F4 = (s16) D_80114F30; + D_801D30F6 = (s16) D_80114F34; + D_801D30F8 = (s16) D_80114F38; + D_801D30EC = (s16) D_80114F24; + D_801D30EE = (s16) D_80114F28; + D_801D30F0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D310C; +extern s16 D_801D310E; +extern s16 D_801D3110; +extern s16 D_801D3114; +extern s16 D_801D3116; +extern s16 D_801D3118; + +void func_8017B824(void) { + D_801D310C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D310E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D3110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D3114 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D3116 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D3118 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D310C; +extern s16 D_801D310E; +extern s16 D_801D3110; +extern s16 D_801D3114; +extern s16 D_801D3116; +extern s16 D_801D3118; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D310C; + D_80114F34 = D_801D310E; + D_80114F38 = D_801D3110; + D_80114F24 = D_801D3114; + D_80114F28 = D_801D3116; + D_80114F2C = D_801D3118; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D30F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801D30EC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D30F4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D30EC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D30FC; +extern u16 D_801D30FE; +extern u16 D_801D3100; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D307C; +extern short D_801D3104; +extern short D_801D3106; +extern short D_801D3108; +extern s16 D_801D30F4; +extern s16 D_801D30F6; +extern s16 D_801D30F8; +extern s16 D_801D30EC; +extern s16 D_801D30EE; +extern s16 D_801D30F0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D30FC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D30FE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D3100); + (*(s16 *)&D_801D3104) = buf[0]; + (*(s16 *)&D_801D3106) = buf[1]; + (*(s16 *)&D_801D3108) = buf[2]; + D_801D30F4 = D_80114F30 + buf[0]; + D_801D307C = 0; + D_801D30F6 = D_80114F34 + buf[1]; + D_801D30F8 = D_80114F38 + buf[2]; + D_801D30EC = D_80114F24 + buf[0]; + D_801D30EE = D_80114F28 + buf[1]; + D_801D30F0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D309C; +extern SV4 D_801D30A4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D30A4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D309C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D30A4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D30A4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D309C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D30A4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D30C4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D30C4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D307C; +extern s16 D_801D3220; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D307C = D_801D307C + 1; + if (D_801D307C >= 0x1F) { + D_801D3220 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D307C; +extern s16 D_801D3220; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D307C = D_801D307C + 1; + if (0x18 < D_801D307C) { + func_8012A4BC(); + D_801D3220 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D307C; +extern void (*D_801D30C0)(void); +extern short D_801D3104; +extern short D_801D3106; +extern short D_801D3108; +extern s16 D_801D3220; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D307C = D_801D307C + 1; + if (D_801D307C >= 0x19) { + if (D_801D30C0 != 0) { + (*D_801D30C0)(); + } else { + D_80114F30 = D_80114F30 + D_801D3104; + D_80114F34 = D_80114F34 + D_801D3106; + D_80114F38 = D_80114F38 + D_801D3108; + D_80114F24 = D_80114F24 + D_801D3104; + D_80114F28 = D_80114F28 + D_801D3106; + D_80114F2C = D_80114F2C + D_801D3108; + func_8012A4BC(); + } + D_801D3220 = 0; + } +} + + + +extern void (*D_8018B2B4[])(void); + +void func_8017BE60(void *a0) { + D_8018B2B4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CDDC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CE1C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CE5C); + + +extern void (*D_8018B450[])(void); + +void func_8017CE9C(void *a0) { + D_8018B450[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CED8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CF1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CF40); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF80(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017CFFC); + + +extern void (*D_8018B464[])(void); + +void func_8017D01C(void *a0) { + D_8018B464[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D058); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D0CC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D0F4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D11C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D1B4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D24C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D2E4); + + +extern void (*D_8018B478[])(void); + +void func_8017D37C(void *a0) { + D_8018B478[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D458); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D544); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D630); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D6D0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D868); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017DAC8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017DEBC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E0FC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E254); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E3B0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E52C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E7B0); + + +extern void (*D_8018B664[])(void); + +void func_8017E810(void *a0) { + D_8018B664[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018B6F4[])(void); + +void func_8017E84C(void *a0) { + D_8018B6F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017E888(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E890); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E990); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017E9D4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EA74); + +void func_8017EAE4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EAEC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EBAC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EC00); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EC7C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EC9C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017EF34); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017F0BC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017F568); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017F6FC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FAAC); + + +extern void (*D_801A6D44[])(void); + +void func_8017FB98(void *a0) { + D_801A6D44[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A6DF8[])(void); + +void func_8017FBD4(void *a0) { + D_801A6DF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017FC10(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FC28); + + +void func_8017FCCC(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FCE8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FD6C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FDA8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FDD8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FE5C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8017FF20); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180070); + +void func_8018014C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180154); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018020C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801802D0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180324); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801803A0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180484); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180550); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180628); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801806B4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180820); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180864); + + +extern s32 func_8012B030(u8 *a0); + void func_80180BFC(s32 arg0) { + *(s32 *)(arg0 + 0x1c) = 1; + *(s16 *)(arg0 + 0x2) = 0x4; + ((s32 (*)(void *))func_8012B030)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180C28); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180CA0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180CF4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180EA4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80180F70); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801811E8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181448); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801814F4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801815C4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018172C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181780); + + +extern void (*D_801A8DB8[])(void); + +void func_80181984(void *a0) { + D_801A8DB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801819C0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181AA4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181AF8); + + +extern void func_801292C8(u8 *a0); + s32 func_80181C04(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181C38); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181C78); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181CD0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181D6C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181EC0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80181F98); + + +extern void (*D_801A8E4C[])(void); + +void func_80181FF8(void *a0) { + D_801A8E4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182034); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018205C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801820DC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182158); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182218); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182340); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801824B0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182644); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182898); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801829A4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182B40); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182BFC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182C88); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801AC1C0[]; + s32 func_80182CC0(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801AC1C0[0], &D_801AC1C0[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182CEC); + + +extern u8 D_80078EC1; + s32 func_80182D98(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182DB0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182E1C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80182EAC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183038); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183088); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183104); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183158); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018332C); + +void func_801835C0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801835C8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801835FC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183628); + +extern void func_80183B80(s32); + void func_80183714(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + func_80183B80(*(s32 *)((char *)arg0 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183740); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018379C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801837FC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183910); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801839C4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183A3C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183AC8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183AFC); + +void func_80183B60(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_80183B80(s32 arg0) { + if (arg0 != 0) { + *(s32 *)((char *)arg0 + 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183BA0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183C44); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183CC4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183D68); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80183E70); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801844C8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018487C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801849B4); + + +extern void (*D_801B2C28[])(void); + +void func_80184C1C(void *a0) { + D_801B2C28[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_801B2C3C[])(void); + +void func_80184C58(void *a0) { + D_801B2C3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80184C94); + +void func_80184D3C(void *a0) { + *(u16 *)((char *)a0 + 0xdc) -= 1; + if (*(s16 *)((char *)a0 + 0xdc) == 0) { + *(u16 *)((char *)a0 + 0xdc) = 0x1e; + *(u16 *)((char *)a0 + 2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80184D6C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80184DD8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80184E54); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80184E98); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018501C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185240); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801855F4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185834); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185A9C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185C44); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185E90); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80185FDC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186094); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801861E8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186294); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186344); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018642C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186548); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186628); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186700); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80186768(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801867A4); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186848); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186908); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018693C); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80186998(void *a0) { + if (func_80153BD8((s32)a0)) { + ((void (*)(s32))func_80153BF0)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801869D0); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186A2C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186B04); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186B98); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186C64); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186D3C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186DD8); + +void func_80186E30(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186E38); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186ED8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186F2C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80186FC0); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80187008(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80187030); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018707C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80187168); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801871EC); + + +extern void func_8012CBCC(s32 a0); + void func_801872F8(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((u8 *)a0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_80187330); + + +extern void (*D_801D06B8[])(void); + +void func_8018739C(void *a0) { + D_801D06B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801873D8); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801875CC); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018767C); + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_8018772C); + +void func_801877DC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_80178D40", func_801877E4); + + diff --git a/src/ov_SC03_095/ov_SC03_095_jr_801734BC.c b/src/ov_SC03_095/ov_SC03_095_jr_801734BC.c index 5dc156187..0bab6d9a1 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_801734BC.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_801734BC.c @@ -3105,1068 +3105,3 @@ void func_80178D18(void) { D_8019BE94 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019BC8C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019BC8C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019BC8C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019BC8C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019BCB4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019BCB4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019BC70; - -s32 func_8017A3B0(void) { - switch (D_8019BC70) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019BCAC; -extern short D_8019BCA8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019BCAC) { - case 0: - func_800D0CA0(1); - D_8019BCAC = D_8019BCAC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019BCA8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019BCAC = D_8019BCAC + 1; - if (D_8019BCAC < 0x1E) { - return 0; - } - D_8019BCAC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019BCEC; - extern s16 D_8019BCEE; - extern s16 D_8019BCF0; - extern s16 D_8019BCE4; - extern s16 D_8019BCE6; - extern s16 D_8019BCE8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019BCEC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019BCEE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019BCF0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019BCE4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019BCE6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019BCE8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019BC74; -extern u16 D_8019BCF4; -extern u16 D_8019BCF6; -extern u16 D_8019BCF8; -extern s16 D_8019BE20; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019BE20 = 0; - D_8019BC74 = 0; - D_8019BCF4 = D_80126B5E; - D_8019BCF6 = D_80126B62; - D_8019BCF8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184874[]; - extern s16 D_8019BCEC; - extern s16 D_8019BCE4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184874[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184874[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019BCEC; - s16 *p78C = &D_8019BCE4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019BE20 = 1; - D_8019BC74 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019BC94; - extern SV4_8017B368 D_8019BC9C; - extern s16 D_8019BCEC; - extern s16 D_8019BCE4; - extern u16 D_80184874; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019BC94; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019BC9C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80184874)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80184874)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019BCEC) = loc0; - (*(SV4_8017B368 *)&D_8019BCE4) = loc1; - D_8019BE20 = 1; - D_8019BC74 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184874[]; - extern s16 D_8019BCEC; - extern s16 D_8019BCEE; - extern s16 D_8019BCF0; - extern s16 D_8019BCE4; - extern s16 D_8019BCE6; - extern s16 D_8019BCE8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184874[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184874[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019BCEC; - s16 *p78C = &D_8019BCE4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019BCEE; - v798 = D_8019BCF0; - v78C = *p78C; - v78E = D_8019BCE6; - v790 = D_8019BCE8; - __asm__ __volatile__(""); - D_8019BE20 = 1; - D_8019BC74 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019BC74; -extern s16 D_8019BCEC; -extern s16 D_8019BCEE; -extern s16 D_8019BCF0; -extern s16 D_8019BCE4; -extern s16 D_8019BCE6; -extern s16 D_8019BCE8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019BC74 = 0; - D_8019BCEC = (s16) D_80114F30; - D_8019BCEE = (s16) D_80114F34; - D_8019BCF0 = (s16) D_80114F38; - D_8019BCE4 = (s16) D_80114F24; - D_8019BCE6 = (s16) D_80114F28; - D_8019BCE8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019BD04; -extern s16 D_8019BD06; -extern s16 D_8019BD08; -extern s16 D_8019BD0C; -extern s16 D_8019BD0E; -extern s16 D_8019BD10; - -void func_8017B824(void) { - D_8019BD04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019BD06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019BD08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019BD0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019BD0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019BD10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019BD04; -extern s16 D_8019BD06; -extern s16 D_8019BD08; -extern s16 D_8019BD0C; -extern s16 D_8019BD0E; -extern s16 D_8019BD10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019BD04; - D_80114F34 = D_8019BD06; - D_80114F38 = D_8019BD08; - D_80114F24 = D_8019BD0C; - D_80114F28 = D_8019BD0E; - D_80114F2C = D_8019BD10; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019BCEC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019BCE4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019BCEC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019BCE4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019BCF4; -extern u16 D_8019BCF6; -extern u16 D_8019BCF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019BC74; -extern short D_8019BCFC; -extern short D_8019BCFE; -extern short D_8019BD00; -extern s16 D_8019BCEC; -extern s16 D_8019BCEE; -extern s16 D_8019BCF0; -extern s16 D_8019BCE4; -extern s16 D_8019BCE6; -extern s16 D_8019BCE8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019BCF4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019BCF6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019BCF8); - (*(s16 *)&D_8019BCFC) = buf[0]; - (*(s16 *)&D_8019BCFE) = buf[1]; - (*(s16 *)&D_8019BD00) = buf[2]; - D_8019BCEC = D_80114F30 + buf[0]; - D_8019BC74 = 0; - D_8019BCEE = D_80114F34 + buf[1]; - D_8019BCF0 = D_80114F38 + buf[2]; - D_8019BCE4 = D_80114F24 + buf[0]; - D_8019BCE6 = D_80114F28 + buf[1]; - D_8019BCE8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019BC94; -extern SV4 D_8019BC9C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019BC9C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019BC94 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019BC9C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019BC9C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019BC94) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019BC9C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019BCBC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019BCBC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019BC74; -extern s16 D_8019BE20; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019BC74 = D_8019BC74 + 1; - if (D_8019BC74 >= 0x1F) { - D_8019BE20 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019BC74; -extern s16 D_8019BE20; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019BC74 = D_8019BC74 + 1; - if (0x18 < D_8019BC74) { - func_8012A4BC(); - D_8019BE20 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019BC74; -extern void (*D_8019BCB8)(void); -extern short D_8019BCFC; -extern short D_8019BCFE; -extern short D_8019BD00; -extern s16 D_8019BE20; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019BC74 = D_8019BC74 + 1; - if (D_8019BC74 >= 0x19) { - if (D_8019BCB8 != 0) { - (*D_8019BCB8)(); - } else { - D_80114F30 = D_80114F30 + D_8019BCFC; - D_80114F34 = D_80114F34 + D_8019BCFE; - D_80114F38 = D_80114F38 + D_8019BD00; - D_80114F24 = D_80114F24 + D_8019BCFC; - D_80114F28 = D_80114F28 + D_8019BCFE; - D_80114F2C = D_80114F2C + D_8019BD00; - func_8012A4BC(); - } - D_8019BE20 = 0; - } -} - - - -extern void (*D_80184914[])(void); - -void func_8017BE60(void *a0) { - D_80184914[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CDDC); - - -extern void (*D_801849C0[])(void); - -void func_8017CE1C(void *a0) { - D_801849C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CE58); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE9C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CEC0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF00(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CF7C); - - -extern void (*D_801849D4[])(void); - -void func_8017CF9C(void *a0) { - D_801849D4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017CFD8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D04C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D074); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D09C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D134); - - -extern void (*D_801849E8[])(void); - -void func_8017D1CC(void *a0) { - D_801849E8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D208); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D2A8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D390); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D528); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D558); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D704); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D758); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D7B0); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D880); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D8A0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017D93C(u8 *a0) { - *(s16 *)(a0 + 0xFC) = 0; - ((void (*)(void *, s32))func_8012AD44)(a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017D960); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017DB10(s32 a0) { - *(s16 *)(a0 + 0xFC) = 1; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DB38); - -extern s32 D_8019BD18; - void func_8017DCD0(void) { - D_8019BD18 = 1; - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DCE4); - - -extern void (*D_80191B78[])(void); - -void func_8017DCF4(void *a0) { - D_80191B78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DD30); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DD98); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DDFC); - - -extern void (*D_80191B90[])(void); - -void func_8017DE64(void *a0) { - D_80191B90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DEA0); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DF38); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017DFC8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017E01C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017E2B4); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017E43C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017EA7C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017EE2C); - - -extern void (*D_80192F4C[])(void); - -void func_8017EF18(void *a0) { - D_80192F4C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80193000[])(void); - -void func_8017EF54(void *a0) { - D_80193000[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8017EF90(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017EFA8); - - -void func_8017F04C(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F068); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F0EC); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F128); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F158); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F1DC); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F2A0); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F380); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F3F0); - -void func_8017F4CC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F4D4); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F58C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F650); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F6A4); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F720); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F804); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F8D0); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017F9A8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FA38); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FBC4); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FC14); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FC90); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FCE4); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8017FEB8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", listCdBuffer); - -void func_8018014C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180154); - - -extern void func_8018070C(void *a0); - void func_80180188(u8 *param_1) { - *(short *)(param_1 + 0x5c) = 0; - *(int *)(param_1 + 0x1c) = 0; - ((void (*)(int))func_8018070C)(*(int *)(param_1 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_801801B4); - -extern void func_8018070C(void *a0); - void func_801802A0(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - ((void (*)(s32))func_8018070C)(*(s32 *)((char *)arg0 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_801802CC); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180328); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180388); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8018049C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180550); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_801805C8); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180654); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180688); - -void func_801806EC(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_8018070C(void *a0) { - if ((s32)a0 != 0) { - *(s32 *)((s32)a0 + 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_8018072C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_801807D0); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180850); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_801808F4); - - -extern void (*D_801992E4[])(void); - -void func_801809FC(void *a0) { - D_801992E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180A38); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180C2C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180CDC); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180D8C); - -void func_80180E3C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_801734BC", func_80180E44); - diff --git a/src/ov_SC03_095/ov_SC03_095_jr_80178D40.c b/src/ov_SC03_095/ov_SC03_095_jr_80178D40.c new file mode 100644 index 000000000..0d3edaae3 --- /dev/null +++ b/src/ov_SC03_095/ov_SC03_095_jr_80178D40.c @@ -0,0 +1,4535 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018411C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019AFE0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184110[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80184154[]; +extern unsigned short D_8018415C[]; +extern unsigned short D_80184164[]; +extern unsigned char D_8019AFE8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019AFE0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018416C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019B11C; +extern M2C_UNK D_8019B120; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019B0A8; +extern void (*D_8018419C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019B124[]; +extern u8 D_8019B12C[]; +extern u8 D_8019B0DC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801841A4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801841C0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801841C8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184230[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801841D4; +extern u8 D_801841E0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80184264[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018426C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801842C0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801842F4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801842E4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80184310; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80184388[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80184390[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80184398[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801843A0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801843A8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801843B0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801843BC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801843C8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801843D4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801843E4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801843F4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801843FC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80184404[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018440C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184414[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018441C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184424[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018442C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80184434[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018443C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80184444[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018444C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80184454[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018445C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80184464[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018446C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80184474[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018447C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80184484[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018448C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184494[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018449C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801844A4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801844E8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801844AC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184518[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80184554[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801845AC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801845BC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801845C4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018472C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184738[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019A6B0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019BE20; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019B860; +extern short D_8019BE94; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019BE94) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019BE94)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019B860 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019BE94) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019BDF0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019BDF0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019BE94) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019BE94) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019BCBC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019B864; + extern s32 D_8019BC78; + extern s16 D_8019BC7C; + extern s16 D_8019BC80; + extern s16 D_8019BC84; + extern s16 D_8019BC88; + extern s32 D_8019BC90; + extern s32 D_8019BC94; + extern s32 D_8019BCA4; + extern s16 D_8019BCA8; + extern s16 D_8019BCAC; + extern s32 D_8019BCB0; + extern s32 D_8019BCB8; + extern s32 D_8019BCBC[10]; + extern s32 D_8019BD38; + extern s16 D_8019BDF0; + extern s32 D_8019BE1C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019BDF0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019BC78); + D_8019BC78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019BC84, D_8019BC88 ? 0x48 : 0x40); + (*(s16*)&D_8019BE94) = 2; + break; + case 0: + func_80179B28(D_8019BC78); + D_8019BC78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019BC7C, D_8019BC80 ? 0x48 : 0x40); + (*(s16*)&D_8019BE94) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019BD38 != 0) { + func_80179B28(D_8019BC78); + D_8019BC78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019BC7C, D_8019BC80 ? 0x48 : 0x40); + (*(s16*)&D_8019BE94) = 1; + } else { + (*(s16*)&D_8019BE94) = 3; + } + break; + case 0x32: + func_80179B28(D_8019BC78); + D_8019BC78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019BC7C, + D_8019BC80 ? 0x48 : 0x40); + (*(s16*)&D_8019BE94) = 1; + break; + case 2: + func_80179B28(D_8019BC78); + if (D_8019BC90 != 0) { + D_8019B860 = D_8019BC90; + D_8019BC90 = 0; + (*(s16*)&D_8019BE94) = 3; + return; + } + (*(s16*)&D_8019BE94) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019BE94) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019BE94) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BE94) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019BE94) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BE94) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x1B: + D_8019BCB0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019BE94) = 4; + D_8019B864 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019BE94) = 5; + D_8019BCA4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019BCA4 = (s32)func_8017A3B0; + (*(s16*)&D_8019BE94) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x24: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BE94) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BE94) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019BE94) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BE94) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BE94) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BE94) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BE94) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BE94) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019BE94) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019BC94); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019BC94); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019BC94); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019BC94); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x4E: + D_8019BCB8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x2B: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019BE94) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019BE1C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x34: + (*(s16*)&D_8019BE94) = 3; + D_8019B860 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019BC90 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019BE94) = 3; + D_8019B860 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019BE94) = 3; + D_8019B860 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019B860 = *(s32 *)(D_8019B860 + 4); + return; + case 0x37: + (*(s16*)&D_8019BE94) = 3; + D_8019BC7C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019BC80 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019BE94) = 3; + D_8019BC84 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019BC88 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019BE94) = 3; + D_8019BC7C = w1; + D_8019BC80 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019BE94) = 3; + D_8019BC84 = w2; + D_8019BC88 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x43: + D_8019BCA4 = (s32)func_8017A3D8; + D_8019BCAC = 0; + (*(s16*)&D_8019BE94) = 5; + D_8019BCA8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BE94) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BE94) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019BCBC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019BE94) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019BCBC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019BE94) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019BCBC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019BE94) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019BCBC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019BE94) = 3; + break; + default: + break; + } +Lend: + D_8019B860 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019BC8C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019BC8C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019BC8C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019BC8C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019BCB4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019BCB4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019BC70; + +s32 func_8017A3B0(void) { + switch (D_8019BC70) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019BCAC; +extern short D_8019BCA8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019BCAC) { + case 0: + func_800D0CA0(1); + D_8019BCAC = D_8019BCAC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019BCA8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019BCAC = D_8019BCAC + 1; + if (D_8019BCAC < 0x1E) { + return 0; + } + D_8019BCAC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019BCEC; + extern s16 D_8019BCEE; + extern s16 D_8019BCF0; + extern s16 D_8019BCE4; + extern s16 D_8019BCE6; + extern s16 D_8019BCE8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019BCEC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019BCEE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019BCF0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019BCE4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019BCE6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019BCE8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019BC74; +extern u16 D_8019BCF4; +extern u16 D_8019BCF6; +extern u16 D_8019BCF8; +extern s16 D_8019BE20; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019BE20 = 0; + D_8019BC74 = 0; + D_8019BCF4 = D_80126B5E; + D_8019BCF6 = D_80126B62; + D_8019BCF8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184874[]; + extern s16 D_8019BCEC; + extern s16 D_8019BCE4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184874[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184874[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019BCEC; + s16 *p78C = &D_8019BCE4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019BE20 = 1; + D_8019BC74 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019BC94; + extern SV4_8017B368 D_8019BC9C; + extern s16 D_8019BCEC; + extern s16 D_8019BCE4; + extern u16 D_80184874; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019BC94; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019BC9C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80184874)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80184874)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019BCEC) = loc0; + (*(SV4_8017B368 *)&D_8019BCE4) = loc1; + D_8019BE20 = 1; + D_8019BC74 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184874[]; + extern s16 D_8019BCEC; + extern s16 D_8019BCEE; + extern s16 D_8019BCF0; + extern s16 D_8019BCE4; + extern s16 D_8019BCE6; + extern s16 D_8019BCE8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184874[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184874[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019BCEC; + s16 *p78C = &D_8019BCE4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019BCEE; + v798 = D_8019BCF0; + v78C = *p78C; + v78E = D_8019BCE6; + v790 = D_8019BCE8; + __asm__ __volatile__(""); + D_8019BE20 = 1; + D_8019BC74 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019BC74; +extern s16 D_8019BCEC; +extern s16 D_8019BCEE; +extern s16 D_8019BCF0; +extern s16 D_8019BCE4; +extern s16 D_8019BCE6; +extern s16 D_8019BCE8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019BC74 = 0; + D_8019BCEC = (s16) D_80114F30; + D_8019BCEE = (s16) D_80114F34; + D_8019BCF0 = (s16) D_80114F38; + D_8019BCE4 = (s16) D_80114F24; + D_8019BCE6 = (s16) D_80114F28; + D_8019BCE8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019BD04; +extern s16 D_8019BD06; +extern s16 D_8019BD08; +extern s16 D_8019BD0C; +extern s16 D_8019BD0E; +extern s16 D_8019BD10; + +void func_8017B824(void) { + D_8019BD04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019BD06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019BD08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019BD0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019BD0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019BD10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019BD04; +extern s16 D_8019BD06; +extern s16 D_8019BD08; +extern s16 D_8019BD0C; +extern s16 D_8019BD0E; +extern s16 D_8019BD10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019BD04; + D_80114F34 = D_8019BD06; + D_80114F38 = D_8019BD08; + D_80114F24 = D_8019BD0C; + D_80114F28 = D_8019BD0E; + D_80114F2C = D_8019BD10; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019BCEC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019BCE4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019BCEC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019BCE4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019BCF4; +extern u16 D_8019BCF6; +extern u16 D_8019BCF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019BC74; +extern short D_8019BCFC; +extern short D_8019BCFE; +extern short D_8019BD00; +extern s16 D_8019BCEC; +extern s16 D_8019BCEE; +extern s16 D_8019BCF0; +extern s16 D_8019BCE4; +extern s16 D_8019BCE6; +extern s16 D_8019BCE8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019BCF4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019BCF6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019BCF8); + (*(s16 *)&D_8019BCFC) = buf[0]; + (*(s16 *)&D_8019BCFE) = buf[1]; + (*(s16 *)&D_8019BD00) = buf[2]; + D_8019BCEC = D_80114F30 + buf[0]; + D_8019BC74 = 0; + D_8019BCEE = D_80114F34 + buf[1]; + D_8019BCF0 = D_80114F38 + buf[2]; + D_8019BCE4 = D_80114F24 + buf[0]; + D_8019BCE6 = D_80114F28 + buf[1]; + D_8019BCE8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019BC94; +extern SV4 D_8019BC9C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019BC9C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019BC94 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019BC9C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019BC9C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019BC94) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019BC9C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019BCBC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019BCBC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019BC74; +extern s16 D_8019BE20; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019BC74 = D_8019BC74 + 1; + if (D_8019BC74 >= 0x1F) { + D_8019BE20 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019BC74; +extern s16 D_8019BE20; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019BC74 = D_8019BC74 + 1; + if (0x18 < D_8019BC74) { + func_8012A4BC(); + D_8019BE20 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019BC74; +extern void (*D_8019BCB8)(void); +extern short D_8019BCFC; +extern short D_8019BCFE; +extern short D_8019BD00; +extern s16 D_8019BE20; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019BC74 = D_8019BC74 + 1; + if (D_8019BC74 >= 0x19) { + if (D_8019BCB8 != 0) { + (*D_8019BCB8)(); + } else { + D_80114F30 = D_80114F30 + D_8019BCFC; + D_80114F34 = D_80114F34 + D_8019BCFE; + D_80114F38 = D_80114F38 + D_8019BD00; + D_80114F24 = D_80114F24 + D_8019BCFC; + D_80114F28 = D_80114F28 + D_8019BCFE; + D_80114F2C = D_80114F2C + D_8019BD00; + func_8012A4BC(); + } + D_8019BE20 = 0; + } +} + + + +extern void (*D_80184914[])(void); + +void func_8017BE60(void *a0) { + D_80184914[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CDDC); + + +extern void (*D_801849C0[])(void); + +void func_8017CE1C(void *a0) { + D_801849C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CE58); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE9C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CEC0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF00(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CF7C); + + +extern void (*D_801849D4[])(void); + +void func_8017CF9C(void *a0) { + D_801849D4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017CFD8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D04C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D074); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D09C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D134); + + +extern void (*D_801849E8[])(void); + +void func_8017D1CC(void *a0) { + D_801849E8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D208); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D2A8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D390); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D528); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D558); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D704); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D758); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D7B0); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D880); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D8A0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017D93C(u8 *a0) { + *(s16 *)(a0 + 0xFC) = 0; + ((void (*)(void *, s32))func_8012AD44)(a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017D960); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017DB10(s32 a0) { + *(s16 *)(a0 + 0xFC) = 1; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DB38); + +extern s32 D_8019BD18; + void func_8017DCD0(void) { + D_8019BD18 = 1; + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DCE4); + + +extern void (*D_80191B78[])(void); + +void func_8017DCF4(void *a0) { + D_80191B78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DD30); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DD98); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DDFC); + + +extern void (*D_80191B90[])(void); + +void func_8017DE64(void *a0) { + D_80191B90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DEA0); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DF38); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017DFC8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017E01C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017E2B4); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017E43C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017EA7C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017EE2C); + + +extern void (*D_80192F4C[])(void); + +void func_8017EF18(void *a0) { + D_80192F4C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80193000[])(void); + +void func_8017EF54(void *a0) { + D_80193000[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8017EF90(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017EFA8); + + +void func_8017F04C(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F068); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F0EC); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F128); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F158); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F1DC); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F2A0); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F380); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F3F0); + +void func_8017F4CC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F4D4); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F58C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F650); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F6A4); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F720); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F804); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F8D0); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017F9A8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FA38); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FBC4); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FC14); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FC90); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FCE4); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8017FEB8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", listCdBuffer); + +void func_8018014C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180154); + + +extern void func_8018070C(void *a0); + void func_80180188(u8 *param_1) { + *(short *)(param_1 + 0x5c) = 0; + *(int *)(param_1 + 0x1c) = 0; + ((void (*)(int))func_8018070C)(*(int *)(param_1 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_801801B4); + +extern void func_8018070C(void *a0); + void func_801802A0(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + ((void (*)(s32))func_8018070C)(*(s32 *)((char *)arg0 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_801802CC); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180328); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180388); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8018049C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180550); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_801805C8); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180654); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180688); + +void func_801806EC(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_8018070C(void *a0) { + if ((s32)a0 != 0) { + *(s32 *)((s32)a0 + 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_8018072C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_801807D0); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180850); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_801808F4); + + +extern void (*D_801992E4[])(void); + +void func_801809FC(void *a0) { + D_801992E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180A38); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180C2C); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180CDC); + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180D8C); + +void func_80180E3C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_80178D40", func_80180E44); + + diff --git a/src/ov_SC03_096/ov_SC03_096_jr_801734BC.c b/src/ov_SC03_096/ov_SC03_096_jr_801734BC.c index 03d2b2c80..eee0b65a1 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_801734BC.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_801734BC.c @@ -3105,1046 +3105,3 @@ void func_80178D18(void) { D_8019A94C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019A744; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019A744 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019A744; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019A744 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019A76C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019A76C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019A728; - -s32 func_8017A3B0(void) { - switch (D_8019A728) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019A764; -extern short D_8019A760; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019A764) { - case 0: - func_800D0CA0(1); - D_8019A764 = D_8019A764 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019A760; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019A764 = D_8019A764 + 1; - if (D_8019A764 < 0x1E) { - return 0; - } - D_8019A764 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019A7A4; - extern s16 D_8019A7A6; - extern s16 D_8019A7A8; - extern s16 D_8019A79C; - extern s16 D_8019A79E; - extern s16 D_8019A7A0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019A7A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019A7A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019A7A8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019A79C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019A79E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019A7A0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019A72C; -extern u16 D_8019A7AC; -extern u16 D_8019A7AE; -extern u16 D_8019A7B0; -extern s16 D_8019A8D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019A8D8 = 0; - D_8019A72C = 0; - D_8019A7AC = D_80126B5E; - D_8019A7AE = D_80126B62; - D_8019A7B0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801843F4[]; - extern s16 D_8019A7A4; - extern s16 D_8019A79C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801843F4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801843F4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019A7A4; - s16 *p78C = &D_8019A79C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019A8D8 = 1; - D_8019A72C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019A74C; - extern SV4_8017B368 D_8019A754; - extern s16 D_8019A7A4; - extern s16 D_8019A79C; - extern u16 D_801843F4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019A74C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019A754; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801843F4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801843F4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019A7A4) = loc0; - (*(SV4_8017B368 *)&D_8019A79C) = loc1; - D_8019A8D8 = 1; - D_8019A72C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801843F4[]; - extern s16 D_8019A7A4; - extern s16 D_8019A7A6; - extern s16 D_8019A7A8; - extern s16 D_8019A79C; - extern s16 D_8019A79E; - extern s16 D_8019A7A0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801843F4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801843F4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019A7A4; - s16 *p78C = &D_8019A79C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019A7A6; - v798 = D_8019A7A8; - v78C = *p78C; - v78E = D_8019A79E; - v790 = D_8019A7A0; - __asm__ __volatile__(""); - D_8019A8D8 = 1; - D_8019A72C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A72C; -extern s16 D_8019A7A4; -extern s16 D_8019A7A6; -extern s16 D_8019A7A8; -extern s16 D_8019A79C; -extern s16 D_8019A79E; -extern s16 D_8019A7A0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019A72C = 0; - D_8019A7A4 = (s16) D_80114F30; - D_8019A7A6 = (s16) D_80114F34; - D_8019A7A8 = (s16) D_80114F38; - D_8019A79C = (s16) D_80114F24; - D_8019A79E = (s16) D_80114F28; - D_8019A7A0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019A7BC; -extern s16 D_8019A7BE; -extern s16 D_8019A7C0; -extern s16 D_8019A7C4; -extern s16 D_8019A7C6; -extern s16 D_8019A7C8; - -void func_8017B824(void) { - D_8019A7BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019A7BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019A7C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019A7C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019A7C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019A7C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019A7BC; -extern s16 D_8019A7BE; -extern s16 D_8019A7C0; -extern s16 D_8019A7C4; -extern s16 D_8019A7C6; -extern s16 D_8019A7C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019A7BC; - D_80114F34 = D_8019A7BE; - D_80114F38 = D_8019A7C0; - D_80114F24 = D_8019A7C4; - D_80114F28 = D_8019A7C6; - D_80114F2C = D_8019A7C8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019A7A4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019A79C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019A7A4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019A79C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019A7AC; -extern u16 D_8019A7AE; -extern u16 D_8019A7B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A72C; -extern short D_8019A7B4; -extern short D_8019A7B6; -extern short D_8019A7B8; -extern s16 D_8019A7A4; -extern s16 D_8019A7A6; -extern s16 D_8019A7A8; -extern s16 D_8019A79C; -extern s16 D_8019A79E; -extern s16 D_8019A7A0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019A7AC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019A7AE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019A7B0); - (*(s16 *)&D_8019A7B4) = buf[0]; - (*(s16 *)&D_8019A7B6) = buf[1]; - (*(s16 *)&D_8019A7B8) = buf[2]; - D_8019A7A4 = D_80114F30 + buf[0]; - D_8019A72C = 0; - D_8019A7A6 = D_80114F34 + buf[1]; - D_8019A7A8 = D_80114F38 + buf[2]; - D_8019A79C = D_80114F24 + buf[0]; - D_8019A79E = D_80114F28 + buf[1]; - D_8019A7A0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019A74C; -extern SV4 D_8019A754; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019A754) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019A74C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019A754 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019A754)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019A74C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019A754) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019A774[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019A774; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019A72C; -extern s16 D_8019A8D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019A72C = D_8019A72C + 1; - if (D_8019A72C >= 0x1F) { - D_8019A8D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019A72C; -extern s16 D_8019A8D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A72C = D_8019A72C + 1; - if (0x18 < D_8019A72C) { - func_8012A4BC(); - D_8019A8D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019A72C; -extern void (*D_8019A770)(void); -extern short D_8019A7B4; -extern short D_8019A7B6; -extern short D_8019A7B8; -extern s16 D_8019A8D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A72C = D_8019A72C + 1; - if (D_8019A72C >= 0x19) { - if (D_8019A770 != 0) { - (*D_8019A770)(); - } else { - D_80114F30 = D_80114F30 + D_8019A7B4; - D_80114F34 = D_80114F34 + D_8019A7B6; - D_80114F38 = D_80114F38 + D_8019A7B8; - D_80114F24 = D_80114F24 + D_8019A7B4; - D_80114F28 = D_80114F28 + D_8019A7B6; - D_80114F2C = D_80114F2C + D_8019A7B8; - func_8012A4BC(); - } - D_8019A8D8 = 0; - } -} - - - -extern void (*D_80184494[])(void); - -void func_8017BE60(void *a0) { - D_80184494[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017CD9C); - - -extern void (*D_801844F0[])(void); - -void func_8017CDDC(void *a0) { - D_801844F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017CE18); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE5C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017CE80); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEC0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017CF3C); - - -extern void (*D_80184504[])(void); - -void func_8017CF5C(void *a0) { - D_80184504[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017CF98); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D00C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D034); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D05C); - - -extern void (*D_80184518[])(void); - -void func_8017D0F4(void *a0) { - D_80184518[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D130); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D238); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D3D0); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D400); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D420); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D6B8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017D840); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017DCEC); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017DE80); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E230); - -extern void (*D_80190940[])(void); - -void func_8017E31C(void *a0) { - D_80190940[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801909F4[])(void); - -void func_8017E358(void *a0) { - D_801909F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017E394(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E3AC); - - -void func_8017E450(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E46C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E4F0); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E52C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E55C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E5E0); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E6A4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E784); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E7F4); - -void func_8017E8D0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E8D8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017E990); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EA54); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EAA8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EB24); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EC08); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017ECD4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EDAC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017EE48(s32 a0) { - *(s16 *)(a0 + 0xFC) = 0; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017EE6C); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017F01C(s32 a0) { - *(s16 *)(a0 + 0xFC) = 1; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F044); - -extern s32 D_8019A7D0; - void func_8017F1DC(void) { - D_8019A7D0 = 1; - } - - -extern s32 D_8019A7D0; - -void func_8017F1F0(void) { - D_8019A7D0 = 0; -} - - -extern void (*D_80192A4C[])(void); - -void func_8017F200(void *a0) { - D_80192A4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F23C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F2A4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F308); - - -extern void (*D_80192A64[])(void); - -void func_8017F370(void *a0) { - D_80192A64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F3AC); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F444); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F4D4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F528); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F5B8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F744); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F794); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F810); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017F864); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FA38); - -void func_8017FCCC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FCD4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FD08); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FD34); - - -extern void func_8018028C(s32); - void func_8017FE20(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - func_8018028C(*(s32 *)((char *)arg0 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FE4C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FEA8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8017FF08); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8018001C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801800D0); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80180148); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801801D4); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80180208); - -void func_8018026C(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_8018028C(s32 arg0) { - if (arg0 != 0) { - *(s32 *)((s32)arg0 + 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801802AC); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80180350); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801803D0); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_80180474); - - -extern void (*D_80197D98[])(void); - -void func_8018057C(void *a0) { - D_80197D98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801805B8); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801807AC); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8018085C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_8018090C); - -void func_801809BC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_801734BC", func_801809C4); - diff --git a/src/ov_SC03_096/ov_SC03_096_jr_80178D40.c b/src/ov_SC03_096/ov_SC03_096_jr_80178D40.c new file mode 100644 index 000000000..619235013 --- /dev/null +++ b/src/ov_SC03_096/ov_SC03_096_jr_80178D40.c @@ -0,0 +1,4513 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183C9C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80199A98; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80183C90[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183CD4[]; +extern unsigned short D_80183CDC[]; +extern unsigned short D_80183CE4[]; +extern unsigned char D_80199AA0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80199A98; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183CEC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199BD4; +extern M2C_UNK D_80199BD8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199B60; +extern void (*D_80183D1C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80199BDC[]; +extern u8 D_80199BE4[]; +extern u8 D_80199B94[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80183D24[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183D40[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80183D48[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183DB0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183D54; +extern u8 D_80183D60; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183DE4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183DEC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80183E40[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80183E74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80183E64[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80183E90; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183F08[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183F10[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183F18[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183F20[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80183F28[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183F30[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80183F3C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80183F48[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80183F54[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80183F64[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80183F74[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80183F7C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80183F84[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183F8C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80183F94[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183F9C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80183FA4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80183FAC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80183FB4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183FBC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183FC4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183FCC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183FD4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183FDC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183FE4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183FEC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183FF4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183FFC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80184004[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018400C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184014[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018401C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80184024[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80184068[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018402C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184098[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801840D4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018412C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018413C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80184144[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801842AC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801842B8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80199164; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019A8D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019A318; +extern short D_8019A94C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019A94C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019A94C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019A318 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019A94C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019A8A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019A8A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019A94C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019A94C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019A774[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019A31C; + extern s32 D_8019A730; + extern s16 D_8019A734; + extern s16 D_8019A738; + extern s16 D_8019A73C; + extern s16 D_8019A740; + extern s32 D_8019A748; + extern s32 D_8019A74C; + extern s32 D_8019A75C; + extern s16 D_8019A760; + extern s16 D_8019A764; + extern s32 D_8019A768; + extern s32 D_8019A770; + extern s32 D_8019A774[10]; + extern s32 D_8019A7F0; + extern s16 D_8019A8A8; + extern s32 D_8019A8D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019A8A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019A730); + D_8019A730 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A73C, D_8019A740 ? 0x48 : 0x40); + (*(s16*)&D_8019A94C) = 2; + break; + case 0: + func_80179B28(D_8019A730); + D_8019A730 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A734, D_8019A738 ? 0x48 : 0x40); + (*(s16*)&D_8019A94C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019A7F0 != 0) { + func_80179B28(D_8019A730); + D_8019A730 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019A734, D_8019A738 ? 0x48 : 0x40); + (*(s16*)&D_8019A94C) = 1; + } else { + (*(s16*)&D_8019A94C) = 3; + } + break; + case 0x32: + func_80179B28(D_8019A730); + D_8019A730 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019A734, + D_8019A738 ? 0x48 : 0x40); + (*(s16*)&D_8019A94C) = 1; + break; + case 2: + func_80179B28(D_8019A730); + if (D_8019A748 != 0) { + D_8019A318 = D_8019A748; + D_8019A748 = 0; + (*(s16*)&D_8019A94C) = 3; + return; + } + (*(s16*)&D_8019A94C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019A94C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019A94C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019A94C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019A94C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019A94C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x1B: + D_8019A768 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019A94C) = 4; + D_8019A31C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019A94C) = 5; + D_8019A75C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019A75C = (s32)func_8017A3B0; + (*(s16*)&D_8019A94C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x24: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019A94C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019A94C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019A94C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A94C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A94C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A94C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019A94C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019A94C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019A94C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019A74C); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019A74C); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019A74C); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019A74C); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x4E: + D_8019A770 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019A94C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019A8D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x34: + (*(s16*)&D_8019A94C) = 3; + D_8019A318 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019A748 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019A94C) = 3; + D_8019A318 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019A94C) = 3; + D_8019A318 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019A318 = *(s32 *)(D_8019A318 + 4); + return; + case 0x37: + (*(s16*)&D_8019A94C) = 3; + D_8019A734 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019A738 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019A94C) = 3; + D_8019A73C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019A740 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019A94C) = 3; + D_8019A734 = w1; + D_8019A738 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019A94C) = 3; + D_8019A73C = w2; + D_8019A740 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x43: + D_8019A75C = (s32)func_8017A3D8; + D_8019A764 = 0; + (*(s16*)&D_8019A94C) = 5; + D_8019A760 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A94C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A94C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019A774; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019A94C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019A774; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019A94C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019A774[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019A94C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019A774; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019A94C) = 3; + break; + default: + break; + } +Lend: + D_8019A318 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019A744; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019A744 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019A744; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019A744 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019A76C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019A76C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019A728; + +s32 func_8017A3B0(void) { + switch (D_8019A728) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019A764; +extern short D_8019A760; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019A764) { + case 0: + func_800D0CA0(1); + D_8019A764 = D_8019A764 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019A760; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019A764 = D_8019A764 + 1; + if (D_8019A764 < 0x1E) { + return 0; + } + D_8019A764 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019A7A4; + extern s16 D_8019A7A6; + extern s16 D_8019A7A8; + extern s16 D_8019A79C; + extern s16 D_8019A79E; + extern s16 D_8019A7A0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019A7A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019A7A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019A7A8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019A79C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019A79E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019A7A0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019A72C; +extern u16 D_8019A7AC; +extern u16 D_8019A7AE; +extern u16 D_8019A7B0; +extern s16 D_8019A8D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019A8D8 = 0; + D_8019A72C = 0; + D_8019A7AC = D_80126B5E; + D_8019A7AE = D_80126B62; + D_8019A7B0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801843F4[]; + extern s16 D_8019A7A4; + extern s16 D_8019A79C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801843F4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801843F4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019A7A4; + s16 *p78C = &D_8019A79C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019A8D8 = 1; + D_8019A72C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019A74C; + extern SV4_8017B368 D_8019A754; + extern s16 D_8019A7A4; + extern s16 D_8019A79C; + extern u16 D_801843F4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019A74C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019A754; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801843F4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801843F4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019A7A4) = loc0; + (*(SV4_8017B368 *)&D_8019A79C) = loc1; + D_8019A8D8 = 1; + D_8019A72C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801843F4[]; + extern s16 D_8019A7A4; + extern s16 D_8019A7A6; + extern s16 D_8019A7A8; + extern s16 D_8019A79C; + extern s16 D_8019A79E; + extern s16 D_8019A7A0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801843F4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801843F4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019A7A4; + s16 *p78C = &D_8019A79C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019A7A6; + v798 = D_8019A7A8; + v78C = *p78C; + v78E = D_8019A79E; + v790 = D_8019A7A0; + __asm__ __volatile__(""); + D_8019A8D8 = 1; + D_8019A72C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A72C; +extern s16 D_8019A7A4; +extern s16 D_8019A7A6; +extern s16 D_8019A7A8; +extern s16 D_8019A79C; +extern s16 D_8019A79E; +extern s16 D_8019A7A0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019A72C = 0; + D_8019A7A4 = (s16) D_80114F30; + D_8019A7A6 = (s16) D_80114F34; + D_8019A7A8 = (s16) D_80114F38; + D_8019A79C = (s16) D_80114F24; + D_8019A79E = (s16) D_80114F28; + D_8019A7A0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019A7BC; +extern s16 D_8019A7BE; +extern s16 D_8019A7C0; +extern s16 D_8019A7C4; +extern s16 D_8019A7C6; +extern s16 D_8019A7C8; + +void func_8017B824(void) { + D_8019A7BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019A7BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019A7C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019A7C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019A7C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019A7C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019A7BC; +extern s16 D_8019A7BE; +extern s16 D_8019A7C0; +extern s16 D_8019A7C4; +extern s16 D_8019A7C6; +extern s16 D_8019A7C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019A7BC; + D_80114F34 = D_8019A7BE; + D_80114F38 = D_8019A7C0; + D_80114F24 = D_8019A7C4; + D_80114F28 = D_8019A7C6; + D_80114F2C = D_8019A7C8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019A7A4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019A79C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019A7A4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019A79C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019A7AC; +extern u16 D_8019A7AE; +extern u16 D_8019A7B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A72C; +extern short D_8019A7B4; +extern short D_8019A7B6; +extern short D_8019A7B8; +extern s16 D_8019A7A4; +extern s16 D_8019A7A6; +extern s16 D_8019A7A8; +extern s16 D_8019A79C; +extern s16 D_8019A79E; +extern s16 D_8019A7A0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019A7AC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019A7AE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019A7B0); + (*(s16 *)&D_8019A7B4) = buf[0]; + (*(s16 *)&D_8019A7B6) = buf[1]; + (*(s16 *)&D_8019A7B8) = buf[2]; + D_8019A7A4 = D_80114F30 + buf[0]; + D_8019A72C = 0; + D_8019A7A6 = D_80114F34 + buf[1]; + D_8019A7A8 = D_80114F38 + buf[2]; + D_8019A79C = D_80114F24 + buf[0]; + D_8019A79E = D_80114F28 + buf[1]; + D_8019A7A0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019A74C; +extern SV4 D_8019A754; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019A754) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019A74C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019A754 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019A754)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019A74C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019A754) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019A774[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019A774; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019A72C; +extern s16 D_8019A8D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019A72C = D_8019A72C + 1; + if (D_8019A72C >= 0x1F) { + D_8019A8D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019A72C; +extern s16 D_8019A8D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A72C = D_8019A72C + 1; + if (0x18 < D_8019A72C) { + func_8012A4BC(); + D_8019A8D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019A72C; +extern void (*D_8019A770)(void); +extern short D_8019A7B4; +extern short D_8019A7B6; +extern short D_8019A7B8; +extern s16 D_8019A8D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A72C = D_8019A72C + 1; + if (D_8019A72C >= 0x19) { + if (D_8019A770 != 0) { + (*D_8019A770)(); + } else { + D_80114F30 = D_80114F30 + D_8019A7B4; + D_80114F34 = D_80114F34 + D_8019A7B6; + D_80114F38 = D_80114F38 + D_8019A7B8; + D_80114F24 = D_80114F24 + D_8019A7B4; + D_80114F28 = D_80114F28 + D_8019A7B6; + D_80114F2C = D_80114F2C + D_8019A7B8; + func_8012A4BC(); + } + D_8019A8D8 = 0; + } +} + + + +extern void (*D_80184494[])(void); + +void func_8017BE60(void *a0) { + D_80184494[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017CD9C); + + +extern void (*D_801844F0[])(void); + +void func_8017CDDC(void *a0) { + D_801844F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017CE18); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE5C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017CE80); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEC0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017CF3C); + + +extern void (*D_80184504[])(void); + +void func_8017CF5C(void *a0) { + D_80184504[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017CF98); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D00C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D034); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D05C); + + +extern void (*D_80184518[])(void); + +void func_8017D0F4(void *a0) { + D_80184518[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D130); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D238); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D3D0); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D400); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D420); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D6B8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017D840); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017DCEC); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017DE80); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E230); + +extern void (*D_80190940[])(void); + +void func_8017E31C(void *a0) { + D_80190940[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801909F4[])(void); + +void func_8017E358(void *a0) { + D_801909F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017E394(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E3AC); + + +void func_8017E450(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E46C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E4F0); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E52C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E55C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E5E0); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E6A4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E784); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E7F4); + +void func_8017E8D0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E8D8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017E990); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EA54); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EAA8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EB24); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EC08); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017ECD4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EDAC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017EE48(s32 a0) { + *(s16 *)(a0 + 0xFC) = 0; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017EE6C); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F01C(s32 a0) { + *(s16 *)(a0 + 0xFC) = 1; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 2); + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F044); + +extern s32 D_8019A7D0; + void func_8017F1DC(void) { + D_8019A7D0 = 1; + } + + +extern s32 D_8019A7D0; + +void func_8017F1F0(void) { + D_8019A7D0 = 0; +} + + +extern void (*D_80192A4C[])(void); + +void func_8017F200(void *a0) { + D_80192A4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F23C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F2A4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F308); + + +extern void (*D_80192A64[])(void); + +void func_8017F370(void *a0) { + D_80192A64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F3AC); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F444); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F4D4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F528); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F5B8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F744); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F794); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F810); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017F864); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FA38); + +void func_8017FCCC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FCD4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FD08); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FD34); + + +extern void func_8018028C(s32); + void func_8017FE20(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + func_8018028C(*(s32 *)((char *)arg0 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FE4C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FEA8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8017FF08); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8018001C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801800D0); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_80180148); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801801D4); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_80180208); + +void func_8018026C(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_8018028C(s32 arg0) { + if (arg0 != 0) { + *(s32 *)((s32)arg0 + 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801802AC); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_80180350); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801803D0); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_80180474); + + +extern void (*D_80197D98[])(void); + +void func_8018057C(void *a0) { + D_80197D98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801805B8); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801807AC); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8018085C); + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_8018090C); + +void func_801809BC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_80178D40", func_801809C4); + + diff --git a/src/ov_SC03_097/ov_SC03_097_jr_801734BC.c b/src/ov_SC03_097/ov_SC03_097_jr_801734BC.c index 38d2bc2ea..2bfaa3759 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_801734BC.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_801734BC.c @@ -3105,1475 +3105,3 @@ void func_80178D18(void) { D_801AAECC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AA7CC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AA7CC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AA7CC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AA7CC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AA7F4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AA7F4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AA7B0; - -s32 func_8017A3B0(void) { - switch (D_801AA7B0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AA7EC; -extern short D_801AA7E8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AA7EC) { - case 0: - func_800D0CA0(1); - D_801AA7EC = D_801AA7EC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AA7E8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AA7EC = D_801AA7EC + 1; - if (D_801AA7EC < 0x1E) { - return 0; - } - D_801AA7EC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AA82C; - extern s16 D_801AA82E; - extern s16 D_801AA830; - extern s16 D_801AA824; - extern s16 D_801AA826; - extern s16 D_801AA828; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AA82C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AA82E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AA830, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AA824, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AA826, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AA828, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AA7B4; -extern u16 D_801AA834; -extern u16 D_801AA836; -extern u16 D_801AA838; -extern s16 D_801AAE58; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AAE58 = 0; - D_801AA7B4 = 0; - D_801AA834 = D_80126B5E; - D_801AA836 = D_80126B62; - D_801AA838 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801897D4[]; - extern s16 D_801AA82C; - extern s16 D_801AA824; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801897D4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801897D4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AA82C; - s16 *p78C = &D_801AA824; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AAE58 = 1; - D_801AA7B4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AA7D4; - extern SV4_8017B368 D_801AA7DC; - extern s16 D_801AA82C; - extern s16 D_801AA824; - extern u16 D_801897D4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AA7D4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AA7DC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801897D4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801897D4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AA82C) = loc0; - (*(SV4_8017B368 *)&D_801AA824) = loc1; - D_801AAE58 = 1; - D_801AA7B4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801897D4[]; - extern s16 D_801AA82C; - extern s16 D_801AA82E; - extern s16 D_801AA830; - extern s16 D_801AA824; - extern s16 D_801AA826; - extern s16 D_801AA828; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801897D4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801897D4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AA82C; - s16 *p78C = &D_801AA824; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AA82E; - v798 = D_801AA830; - v78C = *p78C; - v78E = D_801AA826; - v790 = D_801AA828; - __asm__ __volatile__(""); - D_801AAE58 = 1; - D_801AA7B4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AA7B4; -extern s16 D_801AA82C; -extern s16 D_801AA82E; -extern s16 D_801AA830; -extern s16 D_801AA824; -extern s16 D_801AA826; -extern s16 D_801AA828; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AA7B4 = 0; - D_801AA82C = (s16) D_80114F30; - D_801AA82E = (s16) D_80114F34; - D_801AA830 = (s16) D_80114F38; - D_801AA824 = (s16) D_80114F24; - D_801AA826 = (s16) D_80114F28; - D_801AA828 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AA844; -extern s16 D_801AA846; -extern s16 D_801AA848; -extern s16 D_801AA84C; -extern s16 D_801AA84E; -extern s16 D_801AA850; - -void func_8017B824(void) { - D_801AA844 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AA846 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AA848 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AA84C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AA84E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AA850 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AA844; -extern s16 D_801AA846; -extern s16 D_801AA848; -extern s16 D_801AA84C; -extern s16 D_801AA84E; -extern s16 D_801AA850; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AA844; - D_80114F34 = D_801AA846; - D_80114F38 = D_801AA848; - D_80114F24 = D_801AA84C; - D_80114F28 = D_801AA84E; - D_80114F2C = D_801AA850; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AA82C), src[8..15] -> (*(S8_8017B8E8 *)&D_801AA824) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AA82C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AA824) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AA834; -extern u16 D_801AA836; -extern u16 D_801AA838; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AA7B4; -extern short D_801AA83C; -extern short D_801AA83E; -extern short D_801AA840; -extern s16 D_801AA82C; -extern s16 D_801AA82E; -extern s16 D_801AA830; -extern s16 D_801AA824; -extern s16 D_801AA826; -extern s16 D_801AA828; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AA834); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AA836); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AA838); - (*(s16 *)&D_801AA83C) = buf[0]; - (*(s16 *)&D_801AA83E) = buf[1]; - (*(s16 *)&D_801AA840) = buf[2]; - D_801AA82C = D_80114F30 + buf[0]; - D_801AA7B4 = 0; - D_801AA82E = D_80114F34 + buf[1]; - D_801AA830 = D_80114F38 + buf[2]; - D_801AA824 = D_80114F24 + buf[0]; - D_801AA826 = D_80114F28 + buf[1]; - D_801AA828 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AA7D4; -extern SV4 D_801AA7DC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AA7DC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AA7D4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AA7DC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AA7DC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AA7D4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AA7DC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AA7FC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AA7FC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AA7B4; -extern s16 D_801AAE58; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AA7B4 = D_801AA7B4 + 1; - if (D_801AA7B4 >= 0x1F) { - D_801AAE58 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AA7B4; -extern s16 D_801AAE58; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AA7B4 = D_801AA7B4 + 1; - if (0x18 < D_801AA7B4) { - func_8012A4BC(); - D_801AAE58 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AA7B4; -extern void (*D_801AA7F8)(void); -extern short D_801AA83C; -extern short D_801AA83E; -extern short D_801AA840; -extern s16 D_801AAE58; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AA7B4 = D_801AA7B4 + 1; - if (D_801AA7B4 >= 0x19) { - if (D_801AA7F8 != 0) { - (*D_801AA7F8)(); - } else { - D_80114F30 = D_80114F30 + D_801AA83C; - D_80114F34 = D_80114F34 + D_801AA83E; - D_80114F38 = D_80114F38 + D_801AA840; - D_80114F24 = D_80114F24 + D_801AA83C; - D_80114F28 = D_80114F28 + D_801AA83E; - D_80114F2C = D_80114F2C + D_801AA840; - func_8012A4BC(); - } - D_801AAE58 = 0; - } -} - - - -extern void (*D_80189874[])(void); - -void func_8017BE60(void *a0) { - D_80189874[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017C738); - - -extern void (*D_80189990[])(void); - -void func_8017C8B8(void *a0) { - D_80189990[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CCD4); - - -extern void (*D_801899E8[])(void); - -void func_8017CD10(void *a0) { - D_801899E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D030); - - -extern void (*D_801899FC[])(void); - -void func_8017D33C(void *a0) { - D_801899FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D588); - - -extern void (*D_80189A10[])(void); - -void func_8017D5DC(void *a0) { - D_80189A10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017E804); - - -extern void (*D_80189B2C[])(void); - -void func_8017E844(void *a0) { - D_80189B2C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017E880); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E8C4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80189B34[])(void); - -void func_8017E8E8(void *a0) { - D_80189B34[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017E924); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E964(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E9E0(void) { - func_800D1EBC(); - } - - - -extern void (*D_80189B40[])(void); - -void func_8017EA00(void *a0) { - D_80189B40[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EA3C); - - -extern void (*D_80189B4C[])(void); - -void func_8017EAB0(void *a0) { - D_80189B4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EAEC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EB28); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EB30); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EB98); - - -extern void (*D_80189B5C[])(void); - -void func_8017EBB8(void *a0) { - D_80189B5C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EBF4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EC38); - - -extern void (*D_80189B64[])(void); - -void func_8017EC78(void *a0) { - D_80189B64[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017ECB4); - -s32 func_8017ECF0(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017ECF8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017ED58); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017ED78); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EDA0); - - -extern void (*D_80189B84[])(void); - -void func_8017EDC8(void *a0) { - D_80189B84[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EE04); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EE4C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EEA0); - - -extern void (*D_80189B94[])(void); - -void func_8017EEC8(void *a0) { - D_80189B94[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EF04); - -void func_8017EF4C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EF54); - - -extern s32 func_8014C050(s32 arg0, s32 arg1); - extern void func_80171928(void *a0); - void func_8017EF98(void *a0) { - if (!func_8014C050((s32)a0, 0x1A)) { - ((void (*)(void *))func_80171928)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017EFD4); - - -extern void (*D_80189BAC[])(void); - -void func_8017EFFC(void *a0) { - D_80189BAC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F038); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F080); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F0D4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F0FC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F194); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F230); - - -extern void (*D_80189BB4[])(void); - -void func_8017F2C8(void *a0) { - D_80189BB4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F304); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F3D4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F48C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F53C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F6D4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F704); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F724); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017F7C0(s32 a0) { - *(s16 *)(a0 + 0xFC) = 0; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F7E4); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017F994(void *arg0) { - *(s16 *)((char *)arg0 + 0xfc) = 1; - ((void (*)(s32 *, s32))func_8012AD44)(arg0, 2); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017F9BC); - - -extern s32 D_801AAAD8; - -void func_8017FB54(void) { - D_801AAAD8 = 1; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FB68); - - -extern void (*D_8019AE50[])(void); - -void func_8017FB78(void *a0) { - D_8019AE50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FBB4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FC1C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FC80); - - -extern void (*D_8019AE68[])(void); - -void func_8017FCE8(void *a0) { - D_8019AE68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FD24); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FDBC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FE4C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8017FEA0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180024); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180158); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801801F4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180230); - -extern void func_80178B18(s32 a0, s32 a1); - extern void func_8012AD44(s32 *a0, s16 a1); - extern s32 D_8019AECC; - void func_80180258(s32 arg0) { - s32 temp_s0 = arg0; - func_80178B18(temp_s0, &D_8019AECC); - ((void (*)(s32, s32))func_8012AD44)(temp_s0, 5); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180294); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8019AF18[]; - -extern s32 func_801803FC(s32 a0); - -void func_801802B4(int param_1) -{ - D_8019AF18[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_801803FC)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180304); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801803B8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801803FC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180450); - - -extern void (*D_8019AF44[])(void); - -void func_801805B0(void *a0) { - D_8019AF44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801805EC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018064C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180758); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180864); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801808A4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801808F0); - -void func_80180978(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180980); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180BD8); - - -extern void (*D_8019AFE8[])(void); - -void func_80180C2C(void *a0) { - D_8019AFE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180C68); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180D54); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180E14); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180E64); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180F4C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80180F98); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801813B4); - -void func_801818D4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801818DC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181900); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801819A0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801819D0); - -extern s32 D_801AAC72; - void func_80181A48(s32 arg0) { - register s32 * p __asm__("$3"); - register s32 v __asm__("$2"); - p = &D_801AAC72; - v = *(u16 *)p; - v += arg0; - *(u16 *)p = v; - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181A64); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181ABC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181B90); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181BCC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181C18); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181CF4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181FB8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80181FDC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182004); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018208C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801820F8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182168); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801821E0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018222C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182348); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182384); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182498); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018277C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182A14); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80182B9C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183048); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801831DC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018358C); - - -extern void (*D_8019CA28[])(void); - -void func_80183678(void *a0) { - D_8019CA28[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_8019CADC[])(void); - -void func_801836B4(void *a0) { - D_8019CADC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801836F0(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183708); - - -void func_801837AC(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801837C8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018384C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183888); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801838B8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018393C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183A00); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183AE0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183B50); - -void func_80183C2C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183C34); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183CEC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183DB0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183E04); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183E80); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80183F64); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184030); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184108); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184198); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184324); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184374); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801843F0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184444); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184618); - -void func_801848AC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801848B4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801848E8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184914); - - -extern void func_80184E6C(s32); - void func_80184A00(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - func_80184E6C(*(s32 *)((char *)arg0 + 0xd4)); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184A2C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184A88); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184AE8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184BFC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184CB0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184D28); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184DB4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184DE8); - -void func_80184E4C(s32 arg0) { - if (arg0 != 0) { - *(s32 *)((char *)arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_80184E6C(s32 arg0) { - if (arg0 != 0) { - M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184E8C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184F30); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80184FB0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185054); - -extern s32 func_80180E14(void); - void func_8018515C(void) { - func_80180E14(); - } - - - -extern void (*D_801A73D0[])(void); - -void func_8018517C(void *a0) { - D_801A73D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801851B8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801853AC); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018545C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_8018550C); - -void func_801855BC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801855C4); - - -extern void (*D_801A7718[])(void); - -void func_80185668(void *a0) { - D_801A7718[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801856A4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185778); - -void func_801857A0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801857A8); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_801858F4); - -extern void func_8012C218(void *a0); - void func_80185A14(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185A40); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185A50); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185A60); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_80185AA0(s32 arg0) { - s32 temp_v0 = *(s32 *)(arg0 + 0xdc); - ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185AD4); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185AF8); - - -extern void (*D_801A7740[])(void); - -void func_80185B5C(void *a0) { - D_801A7740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185B98); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185C20); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185CE0); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_801734BC", func_80185D50); - diff --git a/src/ov_SC03_097/ov_SC03_097_jr_80178D40.c b/src/ov_SC03_097/ov_SC03_097_jr_80178D40.c new file mode 100644 index 000000000..68f06402a --- /dev/null +++ b/src/ov_SC03_097/ov_SC03_097_jr_80178D40.c @@ -0,0 +1,4942 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018907C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A9B20; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80189070[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801890B4[]; +extern unsigned short D_801890BC[]; +extern unsigned short D_801890C4[]; +extern unsigned char D_801A9B28[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A9B20; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801890CC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A9C5C; +extern M2C_UNK D_801A9C60; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9BE8; +extern void (*D_801890FC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A9C64[]; +extern u8 D_801A9C6C[]; +extern u8 D_801A9C1C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189104[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189120[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189128[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189190[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189134; +extern u8 D_80189140; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801891C4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801891CC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189220[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189254[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189244[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80189270; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801892E8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801892F0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801892F8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189300[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189308[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189310[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018931C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189328[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189334[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189344[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189354[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018935C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189364[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018936C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189374[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018937C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189384[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018938C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189394[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018939C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801893A4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801893AC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801893B4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801893BC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801893C4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801893CC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801893D4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801893DC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801893E4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801893EC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801893F4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801893FC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189404[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189448[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018940C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189478[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801894B4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018950C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018951C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189524[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018968C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189698[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A91D4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AAE58; +extern int func_80178970(void); +extern void func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AA3A0; +extern short D_801AAECC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AAECC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AAECC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AA3A0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AAECC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AAE28 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AAE28 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AAECC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AAECC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AA7FC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AA3A4; + extern s32 D_801AA7B8; + extern s16 D_801AA7BC; + extern s16 D_801AA7C0; + extern s16 D_801AA7C4; + extern s16 D_801AA7C8; + extern s32 D_801AA7D0; + extern s32 D_801AA7D4; + extern s32 D_801AA7E4; + extern s16 D_801AA7E8; + extern s16 D_801AA7EC; + extern s32 D_801AA7F0; + extern s32 D_801AA7F8; + extern s32 D_801AA7FC[10]; + extern s32 D_801AAD70; + extern s16 D_801AAE28; + extern s32 D_801AAE54; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AAE28; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AA7B8); + D_801AA7B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AA7C4, D_801AA7C8 ? 0x48 : 0x40); + (*(s16*)&D_801AAECC) = 2; + break; + case 0: + func_80179B28(D_801AA7B8); + D_801AA7B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AA7BC, D_801AA7C0 ? 0x48 : 0x40); + (*(s16*)&D_801AAECC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AAD70 != 0) { + func_80179B28(D_801AA7B8); + D_801AA7B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AA7BC, D_801AA7C0 ? 0x48 : 0x40); + (*(s16*)&D_801AAECC) = 1; + } else { + (*(s16*)&D_801AAECC) = 3; + } + break; + case 0x32: + func_80179B28(D_801AA7B8); + D_801AA7B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AA7BC, + D_801AA7C0 ? 0x48 : 0x40); + (*(s16*)&D_801AAECC) = 1; + break; + case 2: + func_80179B28(D_801AA7B8); + if (D_801AA7D0 != 0) { + D_801AA3A0 = D_801AA7D0; + D_801AA7D0 = 0; + (*(s16*)&D_801AAECC) = 3; + return; + } + (*(s16*)&D_801AAECC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AAECC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AAECC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AAECC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AAECC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AAECC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x1B: + D_801AA7F0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AAECC) = 4; + D_801AA3A4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AAECC) = 5; + D_801AA7E4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AA7E4 = (s32)func_8017A3B0; + (*(s16*)&D_801AAECC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x24: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AAECC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AAECC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AAECC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAECC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAECC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAECC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AAECC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AAECC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AAECC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AA7D4); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AA7D4); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AA7D4); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AA7D4); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x4E: + D_801AA7F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x2B: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AAECC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AAE54 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x34: + (*(s16*)&D_801AAECC) = 3; + D_801AA3A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AA7D0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AAECC) = 3; + D_801AA3A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AAECC) = 3; + D_801AA3A0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AA3A0 = *(s32 *)(D_801AA3A0 + 4); + return; + case 0x37: + (*(s16*)&D_801AAECC) = 3; + D_801AA7BC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AA7C0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AAECC) = 3; + D_801AA7C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AA7C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AAECC) = 3; + D_801AA7BC = w1; + D_801AA7C0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AAECC) = 3; + D_801AA7C4 = w2; + D_801AA7C8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x43: + D_801AA7E4 = (s32)func_8017A3D8; + D_801AA7EC = 0; + (*(s16*)&D_801AAECC) = 5; + D_801AA7E8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAECC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAECC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AA7FC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AAECC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AA7FC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AAECC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AA7FC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AAECC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AA7FC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AAECC) = 3; + break; + default: + break; + } +Lend: + D_801AA3A0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AA7CC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AA7CC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AA7CC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AA7CC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AA7F4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AA7F4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AA7B0; + +s32 func_8017A3B0(void) { + switch (D_801AA7B0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AA7EC; +extern short D_801AA7E8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AA7EC) { + case 0: + func_800D0CA0(1); + D_801AA7EC = D_801AA7EC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AA7E8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AA7EC = D_801AA7EC + 1; + if (D_801AA7EC < 0x1E) { + return 0; + } + D_801AA7EC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AA82C; + extern s16 D_801AA82E; + extern s16 D_801AA830; + extern s16 D_801AA824; + extern s16 D_801AA826; + extern s16 D_801AA828; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AA82C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AA82E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AA830, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AA824, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AA826, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AA828, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AA7B4; +extern u16 D_801AA834; +extern u16 D_801AA836; +extern u16 D_801AA838; +extern s16 D_801AAE58; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AAE58 = 0; + D_801AA7B4 = 0; + D_801AA834 = D_80126B5E; + D_801AA836 = D_80126B62; + D_801AA838 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801897D4[]; + extern s16 D_801AA82C; + extern s16 D_801AA824; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801897D4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801897D4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AA82C; + s16 *p78C = &D_801AA824; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AAE58 = 1; + D_801AA7B4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AA7D4; + extern SV4_8017B368 D_801AA7DC; + extern s16 D_801AA82C; + extern s16 D_801AA824; + extern u16 D_801897D4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AA7D4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AA7DC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801897D4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801897D4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AA82C) = loc0; + (*(SV4_8017B368 *)&D_801AA824) = loc1; + D_801AAE58 = 1; + D_801AA7B4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801897D4[]; + extern s16 D_801AA82C; + extern s16 D_801AA82E; + extern s16 D_801AA830; + extern s16 D_801AA824; + extern s16 D_801AA826; + extern s16 D_801AA828; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801897D4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801897D4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AA82C; + s16 *p78C = &D_801AA824; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AA82E; + v798 = D_801AA830; + v78C = *p78C; + v78E = D_801AA826; + v790 = D_801AA828; + __asm__ __volatile__(""); + D_801AAE58 = 1; + D_801AA7B4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AA7B4; +extern s16 D_801AA82C; +extern s16 D_801AA82E; +extern s16 D_801AA830; +extern s16 D_801AA824; +extern s16 D_801AA826; +extern s16 D_801AA828; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AA7B4 = 0; + D_801AA82C = (s16) D_80114F30; + D_801AA82E = (s16) D_80114F34; + D_801AA830 = (s16) D_80114F38; + D_801AA824 = (s16) D_80114F24; + D_801AA826 = (s16) D_80114F28; + D_801AA828 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AA844; +extern s16 D_801AA846; +extern s16 D_801AA848; +extern s16 D_801AA84C; +extern s16 D_801AA84E; +extern s16 D_801AA850; + +void func_8017B824(void) { + D_801AA844 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AA846 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AA848 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AA84C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AA84E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AA850 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AA844; +extern s16 D_801AA846; +extern s16 D_801AA848; +extern s16 D_801AA84C; +extern s16 D_801AA84E; +extern s16 D_801AA850; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AA844; + D_80114F34 = D_801AA846; + D_80114F38 = D_801AA848; + D_80114F24 = D_801AA84C; + D_80114F28 = D_801AA84E; + D_80114F2C = D_801AA850; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AA82C), src[8..15] -> (*(S8_8017B8E8 *)&D_801AA824) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AA82C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AA824) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AA834; +extern u16 D_801AA836; +extern u16 D_801AA838; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AA7B4; +extern short D_801AA83C; +extern short D_801AA83E; +extern short D_801AA840; +extern s16 D_801AA82C; +extern s16 D_801AA82E; +extern s16 D_801AA830; +extern s16 D_801AA824; +extern s16 D_801AA826; +extern s16 D_801AA828; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AA834); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AA836); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AA838); + (*(s16 *)&D_801AA83C) = buf[0]; + (*(s16 *)&D_801AA83E) = buf[1]; + (*(s16 *)&D_801AA840) = buf[2]; + D_801AA82C = D_80114F30 + buf[0]; + D_801AA7B4 = 0; + D_801AA82E = D_80114F34 + buf[1]; + D_801AA830 = D_80114F38 + buf[2]; + D_801AA824 = D_80114F24 + buf[0]; + D_801AA826 = D_80114F28 + buf[1]; + D_801AA828 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AA7D4; +extern SV4 D_801AA7DC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AA7DC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AA7D4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AA7DC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AA7DC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AA7D4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AA7DC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AA7FC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AA7FC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AA7B4; +extern s16 D_801AAE58; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AA7B4 = D_801AA7B4 + 1; + if (D_801AA7B4 >= 0x1F) { + D_801AAE58 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AA7B4; +extern s16 D_801AAE58; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AA7B4 = D_801AA7B4 + 1; + if (0x18 < D_801AA7B4) { + func_8012A4BC(); + D_801AAE58 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AA7B4; +extern void (*D_801AA7F8)(void); +extern short D_801AA83C; +extern short D_801AA83E; +extern short D_801AA840; +extern s16 D_801AAE58; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AA7B4 = D_801AA7B4 + 1; + if (D_801AA7B4 >= 0x19) { + if (D_801AA7F8 != 0) { + (*D_801AA7F8)(); + } else { + D_80114F30 = D_80114F30 + D_801AA83C; + D_80114F34 = D_80114F34 + D_801AA83E; + D_80114F38 = D_80114F38 + D_801AA840; + D_80114F24 = D_80114F24 + D_801AA83C; + D_80114F28 = D_80114F28 + D_801AA83E; + D_80114F2C = D_80114F2C + D_801AA840; + func_8012A4BC(); + } + D_801AAE58 = 0; + } +} + + + +extern void (*D_80189874[])(void); + +void func_8017BE60(void *a0) { + D_80189874[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017C738); + + +extern void (*D_80189990[])(void); + +void func_8017C8B8(void *a0) { + D_80189990[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CCD4); + + +extern void (*D_801899E8[])(void); + +void func_8017CD10(void *a0) { + D_801899E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D030); + + +extern void (*D_801899FC[])(void); + +void func_8017D33C(void *a0) { + D_801899FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D588); + + +extern void (*D_80189A10[])(void); + +void func_8017D5DC(void *a0) { + D_80189A10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017E804); + + +extern void (*D_80189B2C[])(void); + +void func_8017E844(void *a0) { + D_80189B2C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017E880); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E8C4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80189B34[])(void); + +void func_8017E8E8(void *a0) { + D_80189B34[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017E924); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E964(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E9E0(void) { + func_800D1EBC(); + } + + + +extern void (*D_80189B40[])(void); + +void func_8017EA00(void *a0) { + D_80189B40[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EA3C); + + +extern void (*D_80189B4C[])(void); + +void func_8017EAB0(void *a0) { + D_80189B4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EAEC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EB28); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EB30); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EB98); + + +extern void (*D_80189B5C[])(void); + +void func_8017EBB8(void *a0) { + D_80189B5C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EBF4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EC38); + + +extern void (*D_80189B64[])(void); + +void func_8017EC78(void *a0) { + D_80189B64[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017ECB4); + +s32 func_8017ECF0(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017ECF8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017ED58); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017ED78); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EDA0); + + +extern void (*D_80189B84[])(void); + +void func_8017EDC8(void *a0) { + D_80189B84[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EE04); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EE4C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EEA0); + + +extern void (*D_80189B94[])(void); + +void func_8017EEC8(void *a0) { + D_80189B94[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EF04); + +void func_8017EF4C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EF54); + + +extern s32 func_8014C050(s32 arg0, s32 arg1); + extern void func_80171928(void *a0); + void func_8017EF98(void *a0) { + if (!func_8014C050((s32)a0, 0x1A)) { + ((void (*)(void *))func_80171928)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017EFD4); + + +extern void (*D_80189BAC[])(void); + +void func_8017EFFC(void *a0) { + D_80189BAC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F038); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F080); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F0D4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F0FC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F194); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F230); + + +extern void (*D_80189BB4[])(void); + +void func_8017F2C8(void *a0) { + D_80189BB4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F304); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F3D4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F48C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F53C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F6D4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F704); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F724); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F7C0(s32 a0) { + *(s16 *)(a0 + 0xFC) = 0; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F7E4); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F994(void *arg0) { + *(s16 *)((char *)arg0 + 0xfc) = 1; + ((void (*)(s32 *, s32))func_8012AD44)(arg0, 2); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017F9BC); + + +extern s32 D_801AAAD8; + +void func_8017FB54(void) { + D_801AAAD8 = 1; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FB68); + + +extern void (*D_8019AE50[])(void); + +void func_8017FB78(void *a0) { + D_8019AE50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FBB4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FC1C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FC80); + + +extern void (*D_8019AE68[])(void); + +void func_8017FCE8(void *a0) { + D_8019AE68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FD24); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FDBC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FE4C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8017FEA0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180024); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180158); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801801F4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180230); + +extern void func_80178B18(s32 a0, s32 a1); + extern void func_8012AD44(s32 *a0, s16 a1); + extern s32 D_8019AECC; + void func_80180258(s32 arg0) { + s32 temp_s0 = arg0; + func_80178B18(temp_s0, &D_8019AECC); + ((void (*)(s32, s32))func_8012AD44)(temp_s0, 5); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180294); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8019AF18[]; + +extern s32 func_801803FC(s32 a0); + +void func_801802B4(int param_1) +{ + D_8019AF18[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_801803FC)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180304); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801803B8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801803FC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180450); + + +extern void (*D_8019AF44[])(void); + +void func_801805B0(void *a0) { + D_8019AF44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801805EC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018064C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180758); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180864); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801808A4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801808F0); + +void func_80180978(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180980); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180BD8); + + +extern void (*D_8019AFE8[])(void); + +void func_80180C2C(void *a0) { + D_8019AFE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180C68); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180D54); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180E14); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180E64); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180F4C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80180F98); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801813B4); + +void func_801818D4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801818DC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181900); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801819A0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801819D0); + +extern s32 D_801AAC72; + void func_80181A48(s32 arg0) { + register s32 * p __asm__("$3"); + register s32 v __asm__("$2"); + p = &D_801AAC72; + v = *(u16 *)p; + v += arg0; + *(u16 *)p = v; + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181A64); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181ABC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181B90); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181BCC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181C18); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181CF4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181FB8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80181FDC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182004); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018208C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801820F8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182168); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801821E0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018222C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182348); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182384); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182498); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018277C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182A14); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80182B9C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183048); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801831DC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018358C); + + +extern void (*D_8019CA28[])(void); + +void func_80183678(void *a0) { + D_8019CA28[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_8019CADC[])(void); + +void func_801836B4(void *a0) { + D_8019CADC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801836F0(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183708); + + +void func_801837AC(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801837C8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018384C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183888); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801838B8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018393C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183A00); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183AE0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183B50); + +void func_80183C2C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183C34); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183CEC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183DB0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183E04); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183E80); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80183F64); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184030); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184108); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184198); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184324); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184374); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801843F0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184444); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184618); + +void func_801848AC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801848B4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801848E8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184914); + + +extern void func_80184E6C(s32); + void func_80184A00(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + func_80184E6C(*(s32 *)((char *)arg0 + 0xd4)); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184A2C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184A88); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184AE8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184BFC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184CB0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184D28); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184DB4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184DE8); + +void func_80184E4C(s32 arg0) { + if (arg0 != 0) { + *(s32 *)((char *)arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_80184E6C(s32 arg0) { + if (arg0 != 0) { + M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184E8C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184F30); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80184FB0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185054); + +extern s32 func_80180E14(void); + void func_8018515C(void) { + func_80180E14(); + } + + + +extern void (*D_801A73D0[])(void); + +void func_8018517C(void *a0) { + D_801A73D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801851B8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801853AC); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018545C); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_8018550C); + +void func_801855BC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801855C4); + + +extern void (*D_801A7718[])(void); + +void func_80185668(void *a0) { + D_801A7718[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801856A4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185778); + +void func_801857A0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801857A8); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_801858F4); + +extern void func_8012C218(void *a0); + void func_80185A14(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185A40); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185A50); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185A60); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_80185AA0(s32 arg0) { + s32 temp_v0 = *(s32 *)(arg0 + 0xdc); + ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185AD4); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185AF8); + + +extern void (*D_801A7740[])(void); + +void func_80185B5C(void *a0) { + D_801A7740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185B98); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185C20); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185CE0); + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80178D40", func_80185D50); + + diff --git a/src/ov_SC03_098/ov_SC03_098_jr_801734BC.c b/src/ov_SC03_098/ov_SC03_098_jr_801734BC.c index 78da4c548..dfa0e5996 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_801734BC.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_801734BC.c @@ -3105,1264 +3105,3 @@ void func_80178D18(void) { D_801C58B4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C543C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C543C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C543C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C543C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C5464; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C5464 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C5420; - -s32 func_8017A3B0(void) { - switch (D_801C5420) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C545C; -extern short D_801C5458; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C545C) { - case 0: - func_800D0CA0(1); - D_801C545C = D_801C545C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C5458; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C545C = D_801C545C + 1; - if (D_801C545C < 0x1E) { - return 0; - } - D_801C545C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C549C; - extern s16 D_801C549E; - extern s16 D_801C54A0; - extern s16 D_801C5494; - extern s16 D_801C5496; - extern s16 D_801C5498; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C549C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C549E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C54A0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C5494, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C5496, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5498, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C5424; -extern u16 D_801C54A4; -extern u16 D_801C54A6; -extern u16 D_801C54A8; -extern s16 D_801C5840; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C5840 = 0; - D_801C5424 = 0; - D_801C54A4 = D_80126B5E; - D_801C54A6 = D_80126B62; - D_801C54A8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188C60[]; - extern s16 D_801C549C; - extern s16 D_801C5494; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188C60[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188C60[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C549C; - s16 *p78C = &D_801C5494; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C5840 = 1; - D_801C5424 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C5444; - extern SV4_8017B368 D_801C544C; - extern s16 D_801C549C; - extern s16 D_801C5494; - extern u16 D_80188C60; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C5444; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C544C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80188C60)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80188C60)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C549C) = loc0; - (*(SV4_8017B368 *)&D_801C5494) = loc1; - D_801C5840 = 1; - D_801C5424 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188C60[]; - extern s16 D_801C549C; - extern s16 D_801C549E; - extern s16 D_801C54A0; - extern s16 D_801C5494; - extern s16 D_801C5496; - extern s16 D_801C5498; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188C60[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188C60[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C549C; - s16 *p78C = &D_801C5494; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C549E; - v798 = D_801C54A0; - v78C = *p78C; - v78E = D_801C5496; - v790 = D_801C5498; - __asm__ __volatile__(""); - D_801C5840 = 1; - D_801C5424 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C5424; -extern s16 D_801C549C; -extern s16 D_801C549E; -extern s16 D_801C54A0; -extern s16 D_801C5494; -extern s16 D_801C5496; -extern s16 D_801C5498; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C5424 = 0; - D_801C549C = (s16) D_80114F30; - D_801C549E = (s16) D_80114F34; - D_801C54A0 = (s16) D_80114F38; - D_801C5494 = (s16) D_80114F24; - D_801C5496 = (s16) D_80114F28; - D_801C5498 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C54B4; -extern s16 D_801C54B6; -extern s16 D_801C54B8; -extern s16 D_801C54BC; -extern s16 D_801C54BE; -extern s16 D_801C54C0; - -void func_8017B824(void) { - D_801C54B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C54B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C54B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C54BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C54BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C54C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C54B4; -extern s16 D_801C54B6; -extern s16 D_801C54B8; -extern s16 D_801C54BC; -extern s16 D_801C54BE; -extern s16 D_801C54C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C54B4; - D_80114F34 = D_801C54B6; - D_80114F38 = D_801C54B8; - D_80114F24 = D_801C54BC; - D_80114F28 = D_801C54BE; - D_80114F2C = D_801C54C0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C549C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C5494) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C549C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C5494) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C54A4; -extern u16 D_801C54A6; -extern u16 D_801C54A8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C5424; -extern short D_801C54AC; -extern short D_801C54AE; -extern short D_801C54B0; -extern s16 D_801C549C; -extern s16 D_801C549E; -extern s16 D_801C54A0; -extern s16 D_801C5494; -extern s16 D_801C5496; -extern s16 D_801C5498; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C54A4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C54A6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C54A8); - (*(s16 *)&D_801C54AC) = buf[0]; - (*(s16 *)&D_801C54AE) = buf[1]; - (*(s16 *)&D_801C54B0) = buf[2]; - D_801C549C = D_80114F30 + buf[0]; - D_801C5424 = 0; - D_801C549E = D_80114F34 + buf[1]; - D_801C54A0 = D_80114F38 + buf[2]; - D_801C5494 = D_80114F24 + buf[0]; - D_801C5496 = D_80114F28 + buf[1]; - D_801C5498 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C5444; -extern SV4 D_801C544C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C544C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C5444 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C544C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C544C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C5444) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C544C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C546C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C546C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C5424; -extern s16 D_801C5840; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C5424 = D_801C5424 + 1; - if (D_801C5424 >= 0x1F) { - D_801C5840 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C5424; -extern s16 D_801C5840; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C5424 = D_801C5424 + 1; - if (0x18 < D_801C5424) { - func_8012A4BC(); - D_801C5840 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C5424; -extern void (*D_801C5468)(void); -extern short D_801C54AC; -extern short D_801C54AE; -extern short D_801C54B0; -extern s16 D_801C5840; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C5424 = D_801C5424 + 1; - if (D_801C5424 >= 0x19) { - if (D_801C5468 != 0) { - (*D_801C5468)(); - } else { - D_80114F30 = D_80114F30 + D_801C54AC; - D_80114F34 = D_80114F34 + D_801C54AE; - D_80114F38 = D_80114F38 + D_801C54B0; - D_80114F24 = D_80114F24 + D_801C54AC; - D_80114F28 = D_80114F28 + D_801C54AE; - D_80114F2C = D_80114F2C + D_801C54B0; - func_8012A4BC(); - } - D_801C5840 = 0; - } -} - - - -extern void (*D_80188D00[])(void); - -void func_8017BE60(void *a0) { - D_80188D00[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017C738); - - -extern void (*D_80188E1C[])(void); - -void func_8017C8B8(void *a0) { - D_80188E1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CCD4); - - -extern void (*D_80188E74[])(void); - -void func_8017CD10(void *a0) { - D_80188E74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D030); - - -extern void (*D_80188E88[])(void); - -void func_8017D33C(void *a0) { - D_80188E88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D588); - - -extern void (*D_80188E9C[])(void); - -void func_8017D5DC(void *a0) { - D_80188E9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017E7B8); - - -extern void (*D_80188F44[])(void); - -void func_8017E7F8(void *a0) { - D_80188F44[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017E834); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E878(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188F4C[])(void); - -void func_8017E89C(void *a0) { - D_80188F4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017E8D8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E918(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E994(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188F58[])(void); - -void func_8017E9B4(void *a0) { - D_80188F58[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017E9F0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EA64); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EA8C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EAB4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EB4C); - - -extern void (*D_80188F6C[])(void); - -void func_8017EBE4(void *a0) { - D_80188F6C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EC20); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017ECC0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017ED60); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EEF8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EF28); - -extern void (*D_80199C48[])(void); - -void func_8017EF48(void *a0) { - D_80199C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017EF84); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_80199DE4[]; - -extern s32 func_8012DFD4(s32 a0); - -void func_8017F0D8(int param_1) -{ - D_80199DE4[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012DFD4)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F128); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F1A0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F2A0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F334); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F3EC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F4A4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F73C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017F8C4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017FD70); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8017FF04); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801802B4); - - -extern void (*D_8019C1B0[])(void); - -void func_801803A0(void *a0) { - D_8019C1B0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019C264[])(void); - -void func_801803DC(void *a0) { - D_8019C264[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180418(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180430); - - -void func_801804D4(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801804F0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180574); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801805B0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801805E0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180664); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180728); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180878); - -void func_80180954(void) { -} - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8018095C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180A14); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180AD8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180B2C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180BA8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180C8C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180D58); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180E30); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80180EBC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181028); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8018106C); - -extern s32 func_8012B030(u8 *a0); - void func_80181404(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 1; - *(s16 *)((s32)a0 + 0x2) = 0x4; - ((void (*)(void))func_8012B030)(); - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181430); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801814A8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801814FC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801816AC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181778); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801819DC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801819F0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181C50); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181CFC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181DCC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181F34); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80181F88); - -extern void (*D_8019E224[])(void); - -void func_8018218C(void *a0) { - D_8019E224[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801821C8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801822AC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182300); - - -extern void func_801292C8(u8 *a0); - s32 func_8018240C(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182440); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182480); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801824D8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182574); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801826C8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801827A0); - -extern void (*D_8019E2B8[])(void); - -void func_80182800(void *a0) { - D_8019E2B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8018283C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182864); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801828E4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182A68); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80182C8C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183040); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183280); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801834E8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183690); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801838DC); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183A28); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183AE0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183C34); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183CE0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183D90); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183E78); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80183F94); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184074); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8018414C); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801841B4(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801841F0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184294); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184354); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184388); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801843E4(s32 param_1) { - if (((int (*)(void))func_80153BD8)() != 0) { - ((void (*)(int))func_80153BF0)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_8018441C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184478); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184550); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801845E4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801846B0); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184788); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184824); - -void func_8018487C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184924); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184978); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184A0C); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80184A54(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184A7C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184AC8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184BB4); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184C38); - -extern void func_8012CBCC(s32 a0); - void func_80184D44(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((u8 *)a0 + 2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184D7C); - - -extern void (*D_801C2A8C[])(void); - -void func_80184DE8(void *a0) { - D_801C2A8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80184E24); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80185018); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_801850C8); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80185178); - -void func_80185228(void) { -} - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_801734BC", func_80185230); - diff --git a/src/ov_SC03_098/ov_SC03_098_jr_80178D40.c b/src/ov_SC03_098/ov_SC03_098_jr_80178D40.c new file mode 100644 index 000000000..598d842ff --- /dev/null +++ b/src/ov_SC03_098/ov_SC03_098_jr_80178D40.c @@ -0,0 +1,4731 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188508[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C4790; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801884FC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80188540[]; +extern unsigned short D_80188548[]; +extern unsigned short D_80188550[]; +extern unsigned char D_801C4798[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C4790; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188558[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C48CC; +extern M2C_UNK D_801C48D0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C4858; +extern void (*D_80188588[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C48D4[]; +extern u8 D_801C48DC[]; +extern u8 D_801C488C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188590[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801885AC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801885B4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018861C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801885C0; +extern u8 D_801885CC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188650[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188658[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801886AC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801886E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801886D0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801886FC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188774[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018877C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188784[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018878C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188794[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018879C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801887A8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801887B4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801887C0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801887D0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801887E0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801887E8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801887F0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801887F8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188800[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188808[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188810[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188818[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188820[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188828[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188830[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188838[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188840[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188848[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188850[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188858[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188860[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188868[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188870[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188878[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188880[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188888[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188890[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801888D4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188898; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188904[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188940[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188998[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801889A8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801889B0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188B18[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188B24[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C3E58; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C5840; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C5010; +extern short D_801C58B4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C58B4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C58B4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C5010 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C58B4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C5810 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C5810 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C58B4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C58B4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C546C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C5014; + extern s32 D_801C5428; + extern s16 D_801C542C; + extern s16 D_801C5430; + extern s16 D_801C5434; + extern s16 D_801C5438; + extern s32 D_801C5440; + extern s32 D_801C5444; + extern s32 D_801C5454; + extern s16 D_801C5458; + extern s16 D_801C545C; + extern s32 D_801C5460; + extern s32 D_801C5468; + extern s32 D_801C546C[10]; + extern s32 D_801C5758; + extern s16 D_801C5810; + extern s32 D_801C583C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C5810; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C5428); + D_801C5428 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C5434, D_801C5438 ? 0x48 : 0x40); + (*(s16*)&D_801C58B4) = 2; + break; + case 0: + func_80179B28(D_801C5428); + D_801C5428 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C542C, D_801C5430 ? 0x48 : 0x40); + (*(s16*)&D_801C58B4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C5758 != 0) { + func_80179B28(D_801C5428); + D_801C5428 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C542C, D_801C5430 ? 0x48 : 0x40); + (*(s16*)&D_801C58B4) = 1; + } else { + (*(s16*)&D_801C58B4) = 3; + } + break; + case 0x32: + func_80179B28(D_801C5428); + D_801C5428 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C542C, + D_801C5430 ? 0x48 : 0x40); + (*(s16*)&D_801C58B4) = 1; + break; + case 2: + func_80179B28(D_801C5428); + if (D_801C5440 != 0) { + D_801C5010 = D_801C5440; + D_801C5440 = 0; + (*(s16*)&D_801C58B4) = 3; + return; + } + (*(s16*)&D_801C58B4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C58B4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C58B4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C58B4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C58B4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C58B4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x1B: + D_801C5460 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C58B4) = 4; + D_801C5014 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C58B4) = 5; + D_801C5454 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C5454 = (s32)func_8017A3B0; + (*(s16*)&D_801C58B4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x24: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C58B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C58B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C58B4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C58B4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C58B4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C58B4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C58B4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C58B4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C58B4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C5444); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C5444); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C5444); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C5444); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x4E: + D_801C5468 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x2B: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C58B4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C583C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x34: + (*(s16*)&D_801C58B4) = 3; + D_801C5010 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C5440 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C58B4) = 3; + D_801C5010 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C58B4) = 3; + D_801C5010 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C5010 = *(s32 *)(D_801C5010 + 4); + return; + case 0x37: + (*(s16*)&D_801C58B4) = 3; + D_801C542C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C5430 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C58B4) = 3; + D_801C5434 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C5438 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C58B4) = 3; + D_801C542C = w1; + D_801C5430 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C58B4) = 3; + D_801C5434 = w2; + D_801C5438 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x43: + D_801C5454 = (s32)func_8017A3D8; + D_801C545C = 0; + (*(s16*)&D_801C58B4) = 5; + D_801C5458 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C58B4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C58B4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C546C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C58B4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C546C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C58B4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C546C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C58B4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C546C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C58B4) = 3; + break; + default: + break; + } +Lend: + D_801C5010 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C543C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C543C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C543C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C543C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C5464; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C5464 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C5420; + +s32 func_8017A3B0(void) { + switch (D_801C5420) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C545C; +extern short D_801C5458; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C545C) { + case 0: + func_800D0CA0(1); + D_801C545C = D_801C545C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C5458; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C545C = D_801C545C + 1; + if (D_801C545C < 0x1E) { + return 0; + } + D_801C545C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C549C; + extern s16 D_801C549E; + extern s16 D_801C54A0; + extern s16 D_801C5494; + extern s16 D_801C5496; + extern s16 D_801C5498; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C549C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C549E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C54A0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C5494, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C5496, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C5498, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C5424; +extern u16 D_801C54A4; +extern u16 D_801C54A6; +extern u16 D_801C54A8; +extern s16 D_801C5840; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C5840 = 0; + D_801C5424 = 0; + D_801C54A4 = D_80126B5E; + D_801C54A6 = D_80126B62; + D_801C54A8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188C60[]; + extern s16 D_801C549C; + extern s16 D_801C5494; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188C60[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188C60[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C549C; + s16 *p78C = &D_801C5494; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C5840 = 1; + D_801C5424 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C5444; + extern SV4_8017B368 D_801C544C; + extern s16 D_801C549C; + extern s16 D_801C5494; + extern u16 D_80188C60; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C5444; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C544C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80188C60)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80188C60)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C549C) = loc0; + (*(SV4_8017B368 *)&D_801C5494) = loc1; + D_801C5840 = 1; + D_801C5424 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188C60[]; + extern s16 D_801C549C; + extern s16 D_801C549E; + extern s16 D_801C54A0; + extern s16 D_801C5494; + extern s16 D_801C5496; + extern s16 D_801C5498; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188C60[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188C60[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C549C; + s16 *p78C = &D_801C5494; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C549E; + v798 = D_801C54A0; + v78C = *p78C; + v78E = D_801C5496; + v790 = D_801C5498; + __asm__ __volatile__(""); + D_801C5840 = 1; + D_801C5424 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C5424; +extern s16 D_801C549C; +extern s16 D_801C549E; +extern s16 D_801C54A0; +extern s16 D_801C5494; +extern s16 D_801C5496; +extern s16 D_801C5498; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C5424 = 0; + D_801C549C = (s16) D_80114F30; + D_801C549E = (s16) D_80114F34; + D_801C54A0 = (s16) D_80114F38; + D_801C5494 = (s16) D_80114F24; + D_801C5496 = (s16) D_80114F28; + D_801C5498 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C54B4; +extern s16 D_801C54B6; +extern s16 D_801C54B8; +extern s16 D_801C54BC; +extern s16 D_801C54BE; +extern s16 D_801C54C0; + +void func_8017B824(void) { + D_801C54B4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C54B6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C54B8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C54BC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C54BE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C54C0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C54B4; +extern s16 D_801C54B6; +extern s16 D_801C54B8; +extern s16 D_801C54BC; +extern s16 D_801C54BE; +extern s16 D_801C54C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C54B4; + D_80114F34 = D_801C54B6; + D_80114F38 = D_801C54B8; + D_80114F24 = D_801C54BC; + D_80114F28 = D_801C54BE; + D_80114F2C = D_801C54C0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C549C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C5494) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C549C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C5494) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C54A4; +extern u16 D_801C54A6; +extern u16 D_801C54A8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C5424; +extern short D_801C54AC; +extern short D_801C54AE; +extern short D_801C54B0; +extern s16 D_801C549C; +extern s16 D_801C549E; +extern s16 D_801C54A0; +extern s16 D_801C5494; +extern s16 D_801C5496; +extern s16 D_801C5498; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C54A4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C54A6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C54A8); + (*(s16 *)&D_801C54AC) = buf[0]; + (*(s16 *)&D_801C54AE) = buf[1]; + (*(s16 *)&D_801C54B0) = buf[2]; + D_801C549C = D_80114F30 + buf[0]; + D_801C5424 = 0; + D_801C549E = D_80114F34 + buf[1]; + D_801C54A0 = D_80114F38 + buf[2]; + D_801C5494 = D_80114F24 + buf[0]; + D_801C5496 = D_80114F28 + buf[1]; + D_801C5498 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C5444; +extern SV4 D_801C544C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C544C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C5444 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C544C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C544C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C5444) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C544C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C546C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C546C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C5424; +extern s16 D_801C5840; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C5424 = D_801C5424 + 1; + if (D_801C5424 >= 0x1F) { + D_801C5840 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C5424; +extern s16 D_801C5840; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C5424 = D_801C5424 + 1; + if (0x18 < D_801C5424) { + func_8012A4BC(); + D_801C5840 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C5424; +extern void (*D_801C5468)(void); +extern short D_801C54AC; +extern short D_801C54AE; +extern short D_801C54B0; +extern s16 D_801C5840; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C5424 = D_801C5424 + 1; + if (D_801C5424 >= 0x19) { + if (D_801C5468 != 0) { + (*D_801C5468)(); + } else { + D_80114F30 = D_80114F30 + D_801C54AC; + D_80114F34 = D_80114F34 + D_801C54AE; + D_80114F38 = D_80114F38 + D_801C54B0; + D_80114F24 = D_80114F24 + D_801C54AC; + D_80114F28 = D_80114F28 + D_801C54AE; + D_80114F2C = D_80114F2C + D_801C54B0; + func_8012A4BC(); + } + D_801C5840 = 0; + } +} + + + +extern void (*D_80188D00[])(void); + +void func_8017BE60(void *a0) { + D_80188D00[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017C738); + + +extern void (*D_80188E1C[])(void); + +void func_8017C8B8(void *a0) { + D_80188E1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CCD4); + + +extern void (*D_80188E74[])(void); + +void func_8017CD10(void *a0) { + D_80188E74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D030); + + +extern void (*D_80188E88[])(void); + +void func_8017D33C(void *a0) { + D_80188E88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D588); + + +extern void (*D_80188E9C[])(void); + +void func_8017D5DC(void *a0) { + D_80188E9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017E7B8); + + +extern void (*D_80188F44[])(void); + +void func_8017E7F8(void *a0) { + D_80188F44[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017E834); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E878(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188F4C[])(void); + +void func_8017E89C(void *a0) { + D_80188F4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017E8D8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E918(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E994(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188F58[])(void); + +void func_8017E9B4(void *a0) { + D_80188F58[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017E9F0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EA64); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EA8C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EAB4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EB4C); + + +extern void (*D_80188F6C[])(void); + +void func_8017EBE4(void *a0) { + D_80188F6C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EC20); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017ECC0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017ED60); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EEF8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EF28); + +extern void (*D_80199C48[])(void); + +void func_8017EF48(void *a0) { + D_80199C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017EF84); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_80199DE4[]; + +extern s32 func_8012DFD4(s32 a0); + +void func_8017F0D8(int param_1) +{ + D_80199DE4[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012DFD4)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F128); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F1A0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F2A0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F334); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F3EC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F4A4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F73C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017F8C4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017FD70); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8017FF04); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801802B4); + + +extern void (*D_8019C1B0[])(void); + +void func_801803A0(void *a0) { + D_8019C1B0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019C264[])(void); + +void func_801803DC(void *a0) { + D_8019C264[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180418(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180430); + + +void func_801804D4(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801804F0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180574); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801805B0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801805E0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180664); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180728); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180878); + +void func_80180954(void) { +} + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8018095C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180A14); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180AD8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180B2C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180BA8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180C8C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180D58); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180E30); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80180EBC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181028); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8018106C); + +extern s32 func_8012B030(u8 *a0); + void func_80181404(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 1; + *(s16 *)((s32)a0 + 0x2) = 0x4; + ((void (*)(void))func_8012B030)(); + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181430); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801814A8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801814FC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801816AC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181778); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801819DC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801819F0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181C50); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181CFC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181DCC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181F34); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80181F88); + +extern void (*D_8019E224[])(void); + +void func_8018218C(void *a0) { + D_8019E224[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801821C8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801822AC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182300); + + +extern void func_801292C8(u8 *a0); + s32 func_8018240C(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182440); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182480); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801824D8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182574); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801826C8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801827A0); + +extern void (*D_8019E2B8[])(void); + +void func_80182800(void *a0) { + D_8019E2B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8018283C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182864); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801828E4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182A68); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80182C8C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183040); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183280); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801834E8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183690); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801838DC); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183A28); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183AE0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183C34); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183CE0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183D90); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183E78); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80183F94); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184074); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8018414C); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801841B4(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801841F0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184294); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184354); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184388); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801843E4(s32 param_1) { + if (((int (*)(void))func_80153BD8)() != 0) { + ((void (*)(int))func_80153BF0)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_8018441C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184478); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184550); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801845E4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801846B0); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184788); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184824); + +void func_8018487C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184924); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184978); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184A0C); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80184A54(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184A7C); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184AC8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184BB4); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184C38); + +extern void func_8012CBCC(s32 a0); + void func_80184D44(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((u8 *)a0 + 2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184D7C); + + +extern void (*D_801C2A8C[])(void); + +void func_80184DE8(void *a0) { + D_801C2A8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80184E24); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80185018); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_801850C8); + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80185178); + +void func_80185228(void) { +} + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_80178D40", func_80185230); + + diff --git a/src/ov_SC03_099/ov_SC03_099_jr_801734BC.c b/src/ov_SC03_099/ov_SC03_099_jr_801734BC.c index 08f6dc781..39f026d82 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_801734BC.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_801734BC.c @@ -3105,1155 +3105,3 @@ void func_80178D18(void) { D_801BF45C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BF10C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801BF10C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BF10C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801BF10C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801BF134; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801BF134 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801BF0F0; - -s32 func_8017A3B0(void) { - switch (D_801BF0F0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801BF12C; -extern short D_801BF128; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801BF12C) { - case 0: - func_800D0CA0(1); - D_801BF12C = D_801BF12C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801BF128; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801BF12C = D_801BF12C + 1; - if (D_801BF12C < 0x1E) { - return 0; - } - D_801BF12C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801BF16C; - extern s16 D_801BF16E; - extern s16 D_801BF170; - extern s16 D_801BF164; - extern s16 D_801BF166; - extern s16 D_801BF168; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BF16C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BF16E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BF170, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BF164, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BF166, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BF168, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801BF0F4; -extern u16 D_801BF174; -extern u16 D_801BF176; -extern u16 D_801BF178; -extern s16 D_801BF3E8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BF3E8 = 0; - D_801BF0F4 = 0; - D_801BF174 = D_80126B5E; - D_801BF176 = D_80126B62; - D_801BF178 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186D60[]; - extern s16 D_801BF16C; - extern s16 D_801BF164; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186D60[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186D60[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BF16C; - s16 *p78C = &D_801BF164; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BF3E8 = 1; - D_801BF0F4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801BF114; - extern SV4_8017B368 D_801BF11C; - extern s16 D_801BF16C; - extern s16 D_801BF164; - extern u16 D_80186D60; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801BF114; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801BF11C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80186D60)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80186D60)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801BF16C) = loc0; - (*(SV4_8017B368 *)&D_801BF164) = loc1; - D_801BF3E8 = 1; - D_801BF0F4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186D60[]; - extern s16 D_801BF16C; - extern s16 D_801BF16E; - extern s16 D_801BF170; - extern s16 D_801BF164; - extern s16 D_801BF166; - extern s16 D_801BF168; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186D60[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186D60[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BF16C; - s16 *p78C = &D_801BF164; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801BF16E; - v798 = D_801BF170; - v78C = *p78C; - v78E = D_801BF166; - v790 = D_801BF168; - __asm__ __volatile__(""); - D_801BF3E8 = 1; - D_801BF0F4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BF0F4; -extern s16 D_801BF16C; -extern s16 D_801BF16E; -extern s16 D_801BF170; -extern s16 D_801BF164; -extern s16 D_801BF166; -extern s16 D_801BF168; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801BF0F4 = 0; - D_801BF16C = (s16) D_80114F30; - D_801BF16E = (s16) D_80114F34; - D_801BF170 = (s16) D_80114F38; - D_801BF164 = (s16) D_80114F24; - D_801BF166 = (s16) D_80114F28; - D_801BF168 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801BF184; -extern s16 D_801BF186; -extern s16 D_801BF188; -extern s16 D_801BF18C; -extern s16 D_801BF18E; -extern s16 D_801BF190; - -void func_8017B824(void) { - D_801BF184 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801BF186 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801BF188 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801BF18C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801BF18E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801BF190 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801BF184; -extern s16 D_801BF186; -extern s16 D_801BF188; -extern s16 D_801BF18C; -extern s16 D_801BF18E; -extern s16 D_801BF190; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801BF184; - D_80114F34 = D_801BF186; - D_80114F38 = D_801BF188; - D_80114F24 = D_801BF18C; - D_80114F28 = D_801BF18E; - D_80114F2C = D_801BF190; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801BF16C), src[8..15] -> (*(S8_8017B8E8 *)&D_801BF164) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801BF16C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801BF164) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801BF174; -extern u16 D_801BF176; -extern u16 D_801BF178; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BF0F4; -extern short D_801BF17C; -extern short D_801BF17E; -extern short D_801BF180; -extern s16 D_801BF16C; -extern s16 D_801BF16E; -extern s16 D_801BF170; -extern s16 D_801BF164; -extern s16 D_801BF166; -extern s16 D_801BF168; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BF174); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BF176); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BF178); - (*(s16 *)&D_801BF17C) = buf[0]; - (*(s16 *)&D_801BF17E) = buf[1]; - (*(s16 *)&D_801BF180) = buf[2]; - D_801BF16C = D_80114F30 + buf[0]; - D_801BF0F4 = 0; - D_801BF16E = D_80114F34 + buf[1]; - D_801BF170 = D_80114F38 + buf[2]; - D_801BF164 = D_80114F24 + buf[0]; - D_801BF166 = D_80114F28 + buf[1]; - D_801BF168 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801BF114; -extern SV4 D_801BF11C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BF11C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801BF114 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801BF11C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BF11C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801BF114) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801BF11C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801BF13C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801BF13C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801BF0F4; -extern s16 D_801BF3E8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801BF0F4 = D_801BF0F4 + 1; - if (D_801BF0F4 >= 0x1F) { - D_801BF3E8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801BF0F4; -extern s16 D_801BF3E8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BF0F4 = D_801BF0F4 + 1; - if (0x18 < D_801BF0F4) { - func_8012A4BC(); - D_801BF3E8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801BF0F4; -extern void (*D_801BF138)(void); -extern short D_801BF17C; -extern short D_801BF17E; -extern short D_801BF180; -extern s16 D_801BF3E8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BF0F4 = D_801BF0F4 + 1; - if (D_801BF0F4 >= 0x19) { - if (D_801BF138 != 0) { - (*D_801BF138)(); - } else { - D_80114F30 = D_80114F30 + D_801BF17C; - D_80114F34 = D_80114F34 + D_801BF17E; - D_80114F38 = D_80114F38 + D_801BF180; - D_80114F24 = D_80114F24 + D_801BF17C; - D_80114F28 = D_80114F28 + D_801BF17E; - D_80114F2C = D_80114F2C + D_801BF180; - func_8012A4BC(); - } - D_801BF3E8 = 0; - } -} - - - -extern void (*D_80186E00[])(void); - -void func_8017BE60(void *a0) { - D_80186E00[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CDDC); - - -extern void (*D_80186EAC[])(void); - -void func_8017CE1C(void *a0) { - D_80186EAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CE58); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE9C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CEC0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF00(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CF7C); - - -extern void (*D_80186EC0[])(void); - -void func_8017CF9C(void *a0) { - D_80186EC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017CFD8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D04C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D074); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D09C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D134); - - -extern void (*D_80186ED4[])(void); - -void func_8017D1D0(void *a0) { - D_80186ED4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D20C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D2AC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D364); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D4FC); - -extern s32 func_8017D54C(void); - s32 func_8017D52C(void) { - return func_8017D54C(); - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D54C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D688); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D6E8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D708); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017D9A0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017DB28); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017DFD4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E168); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E518); - -extern void (*D_801989D8[])(void); - -void func_8017E604(void *a0) { - D_801989D8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80198A8C[])(void); - -void func_8017E640(void *a0) { - D_80198A8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8017E67C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E694); - -void func_8017E738(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - short fc = *(unsigned short *)((char *)a0 + 0xfc); - unsigned short v12 = *(unsigned short *)((char *)a1 + 0x12) + fc; - *(unsigned short *)((char *)a1 + 0x12) = v12; - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E754); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E7D8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E814); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E8C8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017E98C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EA6C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EADC); - -void func_8017EBB8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EBC0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EC78); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017ED3C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EE0C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EEF0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017EFBC); - - -extern void (*D_8019A980[])(void); - -void func_8017F094(void *a0) { - D_8019A980[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F0D0); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8019AB1C[]; - -extern s32 func_8012DFD4(s32 a0); - -void func_8017F224(int param_1) -{ - D_8019AB1C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012DFD4)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F274); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F2EC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F3EC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F480); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F538); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F5F0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F66C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F72C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F854); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017F9C4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017FB58); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017FDAC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8017FEB8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180054); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180110); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8018019C); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_8019CA98[]; - s32 func_801801D4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019CA98[0], &D_8019CA98[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180200); - - -extern u8 D_80078EC1; - s32 func_801802AC(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801802C4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180330); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801804B4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801806D8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180A8C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180CCC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80180F34); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801810DC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181328); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181474); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8018152C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181680); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_8018172C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801817DC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801818C4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801819E0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181AC0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181B98); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80181C00(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181C3C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181CE0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181DA0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181DD4); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80181E30(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181E68); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181EC4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80181F9C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182030); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801820FC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801821D4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182270); - -void func_801822C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801822D0); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182370); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801823C4); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182458); - - -extern s32 func_8012BEE8(s32 a0); - -void func_801824A0(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801824C8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182514); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182600); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182684); - -extern void func_8012CBCC(s32 a0); - void func_80182790(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((u8 *)a0 + 0x2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801827C8); - - -extern void (*D_801BC61C[])(void); - -void func_80182834(void *a0) { - D_801BC61C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182870); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801828E8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182998); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182A50); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182B10); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182BDC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182DDC); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182E64); - - -extern void (*D_801BC760[])(void); - -void func_80182EE8(void *a0) { - D_801BC760[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80182F24); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80183118); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_801831C8); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80183278); - -void func_80183328(void) { -} - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_801734BC", func_80183330); - diff --git a/src/ov_SC03_099/ov_SC03_099_jr_80178D40.c b/src/ov_SC03_099/ov_SC03_099_jr_80178D40.c new file mode 100644 index 000000000..c322dfcb8 --- /dev/null +++ b/src/ov_SC03_099/ov_SC03_099_jr_80178D40.c @@ -0,0 +1,4622 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186608[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801BE460; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801865FC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80186640[]; +extern unsigned short D_80186648[]; +extern unsigned short D_80186650[]; +extern unsigned char D_801BE468[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801BE460; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186658[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BE59C; +extern M2C_UNK D_801BE5A0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BE528; +extern void (*D_80186688[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801BE5A4[]; +extern u8 D_801BE5AC[]; +extern u8 D_801BE55C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80186690[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801866AC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801866B4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018671C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801866C0; +extern u8 D_801866CC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80186750[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186758[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801867AC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801867E0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801867D0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801867FC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80186874[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018687C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80186884[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018688C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80186894[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018689C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801868A8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801868B4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801868C0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801868D0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801868E0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801868E8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801868F0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801868F8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80186900[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80186908[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80186910[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80186918[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80186920[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80186928[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80186930[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80186938[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80186940[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186948[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80186950[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186958[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80186960[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186968[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80186970[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80186978[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80186980[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80186988[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80186990[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801869D4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80186998; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186A04[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80186A40[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80186A98[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186AA8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186AB0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80186C18[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80186C24[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BDB2C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BF3E8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801BECE0; +extern short D_801BF45C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BF45C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BF45C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801BECE0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BF45C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801BF3B8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801BF3B8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BF45C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BF45C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801BF13C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801BECE4; + extern s32 D_801BF0F8; + extern s16 D_801BF0FC; + extern s16 D_801BF100; + extern s16 D_801BF104; + extern s16 D_801BF108; + extern s32 D_801BF110; + extern s32 D_801BF114; + extern s32 D_801BF124; + extern s16 D_801BF128; + extern s16 D_801BF12C; + extern s32 D_801BF130; + extern s32 D_801BF138; + extern s32 D_801BF13C[10]; + extern s32 D_801BF300; + extern s16 D_801BF3B8; + extern s32 D_801BF3E4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801BF3B8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801BF0F8); + D_801BF0F8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BF104, D_801BF108 ? 0x48 : 0x40); + (*(s16*)&D_801BF45C) = 2; + break; + case 0: + func_80179B28(D_801BF0F8); + D_801BF0F8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BF0FC, D_801BF100 ? 0x48 : 0x40); + (*(s16*)&D_801BF45C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801BF300 != 0) { + func_80179B28(D_801BF0F8); + D_801BF0F8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801BF0FC, D_801BF100 ? 0x48 : 0x40); + (*(s16*)&D_801BF45C) = 1; + } else { + (*(s16*)&D_801BF45C) = 3; + } + break; + case 0x32: + func_80179B28(D_801BF0F8); + D_801BF0F8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801BF0FC, + D_801BF100 ? 0x48 : 0x40); + (*(s16*)&D_801BF45C) = 1; + break; + case 2: + func_80179B28(D_801BF0F8); + if (D_801BF110 != 0) { + D_801BECE0 = D_801BF110; + D_801BF110 = 0; + (*(s16*)&D_801BF45C) = 3; + return; + } + (*(s16*)&D_801BF45C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BF45C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BF45C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BF45C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BF45C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BF45C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x1B: + D_801BF130 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BF45C) = 4; + D_801BECE4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BF45C) = 5; + D_801BF124 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801BF124 = (s32)func_8017A3B0; + (*(s16*)&D_801BF45C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x24: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BF45C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BF45C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BF45C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BF45C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BF45C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BF45C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BF45C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BF45C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BF45C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BF114); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BF114); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BF114); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BF114); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x4E: + D_801BF138 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x2B: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BF45C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BF3E4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x34: + (*(s16*)&D_801BF45C) = 3; + D_801BECE0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801BF110 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BF45C) = 3; + D_801BECE0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BF45C) = 3; + D_801BECE0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801BECE0 = *(s32 *)(D_801BECE0 + 4); + return; + case 0x37: + (*(s16*)&D_801BF45C) = 3; + D_801BF0FC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BF100 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BF45C) = 3; + D_801BF104 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BF108 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BF45C) = 3; + D_801BF0FC = w1; + D_801BF100 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BF45C) = 3; + D_801BF104 = w2; + D_801BF108 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x43: + D_801BF124 = (s32)func_8017A3D8; + D_801BF12C = 0; + (*(s16*)&D_801BF45C) = 5; + D_801BF128 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BF45C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BF45C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801BF13C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BF45C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801BF13C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BF45C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801BF13C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BF45C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801BF13C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BF45C) = 3; + break; + default: + break; + } +Lend: + D_801BECE0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BF10C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801BF10C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BF10C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801BF10C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801BF134; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801BF134 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801BF0F0; + +s32 func_8017A3B0(void) { + switch (D_801BF0F0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801BF12C; +extern short D_801BF128; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801BF12C) { + case 0: + func_800D0CA0(1); + D_801BF12C = D_801BF12C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801BF128; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801BF12C = D_801BF12C + 1; + if (D_801BF12C < 0x1E) { + return 0; + } + D_801BF12C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801BF16C; + extern s16 D_801BF16E; + extern s16 D_801BF170; + extern s16 D_801BF164; + extern s16 D_801BF166; + extern s16 D_801BF168; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BF16C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BF16E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BF170, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BF164, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BF166, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BF168, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801BF0F4; +extern u16 D_801BF174; +extern u16 D_801BF176; +extern u16 D_801BF178; +extern s16 D_801BF3E8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BF3E8 = 0; + D_801BF0F4 = 0; + D_801BF174 = D_80126B5E; + D_801BF176 = D_80126B62; + D_801BF178 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186D60[]; + extern s16 D_801BF16C; + extern s16 D_801BF164; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186D60[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186D60[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BF16C; + s16 *p78C = &D_801BF164; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BF3E8 = 1; + D_801BF0F4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801BF114; + extern SV4_8017B368 D_801BF11C; + extern s16 D_801BF16C; + extern s16 D_801BF164; + extern u16 D_80186D60; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801BF114; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801BF11C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80186D60)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80186D60)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801BF16C) = loc0; + (*(SV4_8017B368 *)&D_801BF164) = loc1; + D_801BF3E8 = 1; + D_801BF0F4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186D60[]; + extern s16 D_801BF16C; + extern s16 D_801BF16E; + extern s16 D_801BF170; + extern s16 D_801BF164; + extern s16 D_801BF166; + extern s16 D_801BF168; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186D60[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186D60[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BF16C; + s16 *p78C = &D_801BF164; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801BF16E; + v798 = D_801BF170; + v78C = *p78C; + v78E = D_801BF166; + v790 = D_801BF168; + __asm__ __volatile__(""); + D_801BF3E8 = 1; + D_801BF0F4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BF0F4; +extern s16 D_801BF16C; +extern s16 D_801BF16E; +extern s16 D_801BF170; +extern s16 D_801BF164; +extern s16 D_801BF166; +extern s16 D_801BF168; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801BF0F4 = 0; + D_801BF16C = (s16) D_80114F30; + D_801BF16E = (s16) D_80114F34; + D_801BF170 = (s16) D_80114F38; + D_801BF164 = (s16) D_80114F24; + D_801BF166 = (s16) D_80114F28; + D_801BF168 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801BF184; +extern s16 D_801BF186; +extern s16 D_801BF188; +extern s16 D_801BF18C; +extern s16 D_801BF18E; +extern s16 D_801BF190; + +void func_8017B824(void) { + D_801BF184 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801BF186 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801BF188 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801BF18C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801BF18E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801BF190 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801BF184; +extern s16 D_801BF186; +extern s16 D_801BF188; +extern s16 D_801BF18C; +extern s16 D_801BF18E; +extern s16 D_801BF190; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801BF184; + D_80114F34 = D_801BF186; + D_80114F38 = D_801BF188; + D_80114F24 = D_801BF18C; + D_80114F28 = D_801BF18E; + D_80114F2C = D_801BF190; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801BF16C), src[8..15] -> (*(S8_8017B8E8 *)&D_801BF164) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801BF16C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801BF164) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801BF174; +extern u16 D_801BF176; +extern u16 D_801BF178; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BF0F4; +extern short D_801BF17C; +extern short D_801BF17E; +extern short D_801BF180; +extern s16 D_801BF16C; +extern s16 D_801BF16E; +extern s16 D_801BF170; +extern s16 D_801BF164; +extern s16 D_801BF166; +extern s16 D_801BF168; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BF174); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BF176); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BF178); + (*(s16 *)&D_801BF17C) = buf[0]; + (*(s16 *)&D_801BF17E) = buf[1]; + (*(s16 *)&D_801BF180) = buf[2]; + D_801BF16C = D_80114F30 + buf[0]; + D_801BF0F4 = 0; + D_801BF16E = D_80114F34 + buf[1]; + D_801BF170 = D_80114F38 + buf[2]; + D_801BF164 = D_80114F24 + buf[0]; + D_801BF166 = D_80114F28 + buf[1]; + D_801BF168 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801BF114; +extern SV4 D_801BF11C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BF11C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801BF114 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801BF11C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BF11C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801BF114) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801BF11C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801BF13C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801BF13C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801BF0F4; +extern s16 D_801BF3E8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801BF0F4 = D_801BF0F4 + 1; + if (D_801BF0F4 >= 0x1F) { + D_801BF3E8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801BF0F4; +extern s16 D_801BF3E8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BF0F4 = D_801BF0F4 + 1; + if (0x18 < D_801BF0F4) { + func_8012A4BC(); + D_801BF3E8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801BF0F4; +extern void (*D_801BF138)(void); +extern short D_801BF17C; +extern short D_801BF17E; +extern short D_801BF180; +extern s16 D_801BF3E8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BF0F4 = D_801BF0F4 + 1; + if (D_801BF0F4 >= 0x19) { + if (D_801BF138 != 0) { + (*D_801BF138)(); + } else { + D_80114F30 = D_80114F30 + D_801BF17C; + D_80114F34 = D_80114F34 + D_801BF17E; + D_80114F38 = D_80114F38 + D_801BF180; + D_80114F24 = D_80114F24 + D_801BF17C; + D_80114F28 = D_80114F28 + D_801BF17E; + D_80114F2C = D_80114F2C + D_801BF180; + func_8012A4BC(); + } + D_801BF3E8 = 0; + } +} + + + +extern void (*D_80186E00[])(void); + +void func_8017BE60(void *a0) { + D_80186E00[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CDDC); + + +extern void (*D_80186EAC[])(void); + +void func_8017CE1C(void *a0) { + D_80186EAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CE58); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE9C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CEC0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF00(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CF7C); + + +extern void (*D_80186EC0[])(void); + +void func_8017CF9C(void *a0) { + D_80186EC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017CFD8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D04C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D074); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D09C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D134); + + +extern void (*D_80186ED4[])(void); + +void func_8017D1D0(void *a0) { + D_80186ED4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D20C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D2AC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D364); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D4FC); + +extern s32 func_8017D54C(void); + s32 func_8017D52C(void) { + return func_8017D54C(); + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D54C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D688); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D6E8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D708); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017D9A0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017DB28); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017DFD4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E168); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E518); + +extern void (*D_801989D8[])(void); + +void func_8017E604(void *a0) { + D_801989D8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80198A8C[])(void); + +void func_8017E640(void *a0) { + D_80198A8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8017E67C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E694); + +void func_8017E738(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + short fc = *(unsigned short *)((char *)a0 + 0xfc); + unsigned short v12 = *(unsigned short *)((char *)a1 + 0x12) + fc; + *(unsigned short *)((char *)a1 + 0x12) = v12; + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E754); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E7D8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E814); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E8C8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017E98C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EA6C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EADC); + +void func_8017EBB8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EBC0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EC78); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017ED3C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EE0C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EEF0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017EFBC); + + +extern void (*D_8019A980[])(void); + +void func_8017F094(void *a0) { + D_8019A980[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F0D0); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8019AB1C[]; + +extern s32 func_8012DFD4(s32 a0); + +void func_8017F224(int param_1) +{ + D_8019AB1C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012DFD4)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F274); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F2EC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F3EC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F480); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F538); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F5F0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F66C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F72C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F854); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017F9C4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017FB58); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017FDAC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8017FEB8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180054); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180110); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8018019C); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_8019CA98[]; + s32 func_801801D4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019CA98[0], &D_8019CA98[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180200); + + +extern u8 D_80078EC1; + s32 func_801802AC(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801802C4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180330); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801804B4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801806D8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180A8C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180CCC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80180F34); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801810DC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181328); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181474); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8018152C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181680); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_8018172C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801817DC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801818C4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801819E0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181AC0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181B98); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80181C00(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181C3C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181CE0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181DA0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181DD4); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80181E30(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181E68); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181EC4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80181F9C); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182030); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801820FC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801821D4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182270); + +void func_801822C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801822D0); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182370); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801823C4); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182458); + + +extern s32 func_8012BEE8(s32 a0); + +void func_801824A0(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801824C8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182514); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182600); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182684); + +extern void func_8012CBCC(s32 a0); + void func_80182790(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((u8 *)a0 + 0x2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801827C8); + + +extern void (*D_801BC61C[])(void); + +void func_80182834(void *a0) { + D_801BC61C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182870); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801828E8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182998); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182A50); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182B10); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182BDC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182DDC); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182E64); + + +extern void (*D_801BC760[])(void); + +void func_80182EE8(void *a0) { + D_801BC760[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80182F24); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80183118); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_801831C8); + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80183278); + +void func_80183328(void) { +} + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_80178D40", func_80183330); + + diff --git a/src/ov_SC03_100/ov_SC03_100_jr_801734BC.c b/src/ov_SC03_100/ov_SC03_100_jr_801734BC.c index 9fb38503b..46bf5006c 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_801734BC.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_801734BC.c @@ -3105,1268 +3105,3 @@ void func_80178D18(void) { D_801C8964 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C8394; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C8394 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C8394; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C8394 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C83BC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C83BC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C8378; - -s32 func_8017A3B0(void) { - switch (D_801C8378) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C83B4; -extern short D_801C83B0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C83B4) { - case 0: - func_800D0CA0(1); - D_801C83B4 = D_801C83B4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C83B0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C83B4 = D_801C83B4 + 1; - if (D_801C83B4 < 0x1E) { - return 0; - } - D_801C83B4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C83F4; - extern s16 D_801C83F6; - extern s16 D_801C83F8; - extern s16 D_801C83EC; - extern s16 D_801C83EE; - extern s16 D_801C83F0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C83F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C83F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C83F8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C83EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C83EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C83F0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C837C; -extern u16 D_801C83FC; -extern u16 D_801C83FE; -extern u16 D_801C8400; -extern s16 D_801C88F0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C88F0 = 0; - D_801C837C = 0; - D_801C83FC = D_80126B5E; - D_801C83FE = D_80126B62; - D_801C8400 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018822C[]; - extern s16 D_801C83F4; - extern s16 D_801C83EC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018822C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018822C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C83F4; - s16 *p78C = &D_801C83EC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C88F0 = 1; - D_801C837C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C839C; - extern SV4_8017B368 D_801C83A4; - extern s16 D_801C83F4; - extern s16 D_801C83EC; - extern u16 D_8018822C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C839C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C83A4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018822C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018822C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C83F4) = loc0; - (*(SV4_8017B368 *)&D_801C83EC) = loc1; - D_801C88F0 = 1; - D_801C837C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018822C[]; - extern s16 D_801C83F4; - extern s16 D_801C83F6; - extern s16 D_801C83F8; - extern s16 D_801C83EC; - extern s16 D_801C83EE; - extern s16 D_801C83F0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018822C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018822C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C83F4; - s16 *p78C = &D_801C83EC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C83F6; - v798 = D_801C83F8; - v78C = *p78C; - v78E = D_801C83EE; - v790 = D_801C83F0; - __asm__ __volatile__(""); - D_801C88F0 = 1; - D_801C837C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C837C; -extern s16 D_801C83F4; -extern s16 D_801C83F6; -extern s16 D_801C83F8; -extern s16 D_801C83EC; -extern s16 D_801C83EE; -extern s16 D_801C83F0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C837C = 0; - D_801C83F4 = (s16) D_80114F30; - D_801C83F6 = (s16) D_80114F34; - D_801C83F8 = (s16) D_80114F38; - D_801C83EC = (s16) D_80114F24; - D_801C83EE = (s16) D_80114F28; - D_801C83F0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C840C; -extern s16 D_801C840E; -extern s16 D_801C8410; -extern s16 D_801C8414; -extern s16 D_801C8416; -extern s16 D_801C8418; - -void func_8017B824(void) { - D_801C840C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C840E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C8410 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C8414 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C8416 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C8418 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C840C; -extern s16 D_801C840E; -extern s16 D_801C8410; -extern s16 D_801C8414; -extern s16 D_801C8416; -extern s16 D_801C8418; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C840C; - D_80114F34 = D_801C840E; - D_80114F38 = D_801C8410; - D_80114F24 = D_801C8414; - D_80114F28 = D_801C8416; - D_80114F2C = D_801C8418; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C83F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C83EC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C83F4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C83EC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C83FC; -extern u16 D_801C83FE; -extern u16 D_801C8400; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C837C; -extern short D_801C8404; -extern short D_801C8406; -extern short D_801C8408; -extern s16 D_801C83F4; -extern s16 D_801C83F6; -extern s16 D_801C83F8; -extern s16 D_801C83EC; -extern s16 D_801C83EE; -extern s16 D_801C83F0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C83FC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C83FE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C8400); - (*(s16 *)&D_801C8404) = buf[0]; - (*(s16 *)&D_801C8406) = buf[1]; - (*(s16 *)&D_801C8408) = buf[2]; - D_801C83F4 = D_80114F30 + buf[0]; - D_801C837C = 0; - D_801C83F6 = D_80114F34 + buf[1]; - D_801C83F8 = D_80114F38 + buf[2]; - D_801C83EC = D_80114F24 + buf[0]; - D_801C83EE = D_80114F28 + buf[1]; - D_801C83F0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C839C; -extern SV4 D_801C83A4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C83A4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C839C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C83A4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C83A4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C839C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C83A4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C83C4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C83C4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C837C; -extern s16 D_801C88F0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C837C = D_801C837C + 1; - if (D_801C837C >= 0x1F) { - D_801C88F0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C837C; -extern s16 D_801C88F0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C837C = D_801C837C + 1; - if (0x18 < D_801C837C) { - func_8012A4BC(); - D_801C88F0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C837C; -extern void (*D_801C83C0)(void); -extern short D_801C8404; -extern short D_801C8406; -extern short D_801C8408; -extern s16 D_801C88F0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C837C = D_801C837C + 1; - if (D_801C837C >= 0x19) { - if (D_801C83C0 != 0) { - (*D_801C83C0)(); - } else { - D_80114F30 = D_80114F30 + D_801C8404; - D_80114F34 = D_80114F34 + D_801C8406; - D_80114F38 = D_80114F38 + D_801C8408; - D_80114F24 = D_80114F24 + D_801C8404; - D_80114F28 = D_80114F28 + D_801C8406; - D_80114F2C = D_80114F2C + D_801C8408; - func_8012A4BC(); - } - D_801C88F0 = 0; - } -} - - - -extern void (*D_801882CC[])(void); - -void func_8017BE60(void *a0) { - D_801882CC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017C738); - - -extern void (*D_801883E8[])(void); - -void func_8017C8B8(void *a0) { - D_801883E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CCD4); - - -extern void (*D_80188440[])(void); - -void func_8017CD10(void *a0) { - D_80188440[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D030); - - -extern void (*D_80188454[])(void); - -void func_8017D33C(void *a0) { - D_80188454[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D588); - - -extern void (*D_80188468[])(void); - -void func_8017D5DC(void *a0) { - D_80188468[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017E7B8); - - -extern void (*D_80188510[])(void); - -void func_8017E7F8(void *a0) { - D_80188510[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017E834); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E878(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017E89C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E8DC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E958(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188524[])(void); - -void func_8017E978(void *a0) { - D_80188524[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017E9B4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EA28); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EA50); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EA78); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EB10); - - -extern void (*D_80188538[])(void); - -void func_8017EBA8(void *a0) { - D_80188538[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EBE4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EC84); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EF28); - -extern s32 func_8017EF78(void); - s32 func_8017EF58(void) { - return func_8017EF78(); - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017EF78); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017F0B4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017F114); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017F134); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017F3CC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017F554); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017FA00); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017FB94); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8017FF44); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", listCdBuffer); - - -extern void (*D_801A04A4[])(void); - -void func_80180030(void *a0) { - D_801A04A4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A0558[])(void); - -void func_8018006C(void *a0) { - D_801A0558[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801800A8(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801800C0); - -void func_80180164(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(short *)((char *)a1 + 0x12) += *(unsigned short *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180180); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180204); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180240); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180270); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801802F4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801803B8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180498); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180508); - -void func_801805E4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801805EC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801806A4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180768); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801807BC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180838); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018091C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801809E8); - - -extern void (*D_801A244C[])(void); - -void func_80180AC0(void *a0) { - D_801A244C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180AFC); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801A25E8[]; - -extern s32 func_8012DFD4(s32 a0); - -void func_80180C50(int param_1) -{ - D_801A25E8[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012DFD4)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180CA0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180D18); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180E18); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180EAC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80180F64); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018101C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801811A0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801813C4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80181778); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801819B8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80181C20); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80181DC8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182014); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182160); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182218); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018236C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182418); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801824C8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801825B0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801826CC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801827AC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182884); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801828EC(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182928); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801829CC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182A8C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182AC0); - -extern s32 func_80153BD8(s32); - extern s32 func_80153BF0(s32 a0); - void func_80182B1C(void *a0) { - if (func_80153BD8((s32)a0)) { - ((void (*)(s32))func_80153BF0)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182B54); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182BB0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182C88); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182D1C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182DE8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182EC0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182F5C); - -void func_80182FB4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80182FBC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018305C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801830B0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183144); - - -extern s32 func_8012BEE8(s32 a0); - -void func_8018318C(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801831B4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183200); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801832EC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183370); - -extern void func_8012CBCC(s32 a0); - void func_8018347C(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801834B4); - - -extern void (*D_801C1A2C[])(void); - -void func_80183520(void *a0) { - D_801C1A2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018355C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801835D4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183684); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018373C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801837FC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801838C8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183AC8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183B50); - - -extern void (*D_801C4FAC[])(void); - -void func_80183BD4(void *a0) { - D_801C4FAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183C10); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183E04); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183EB4); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80183F64); - -void func_80184014(void) { -} - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018401C); - - -extern void (*D_801C52F4[])(void); - -void func_801840C0(void *a0) { - D_801C52F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801840FC); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801841D0); - -void func_801841F8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80184200); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018434C); - -extern void func_8012C218(void *a0); - void func_8018446C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80184498); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801844A8); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801844B8); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_801844F8(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_8018452C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80184550); - - -extern void (*D_801C531C[])(void); - -void func_801845B4(void *a0) { - D_801C531C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801845F0); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80184678); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_80184738); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_801734BC", func_801847A8); - diff --git a/src/ov_SC03_100/ov_SC03_100_jr_80178D40.c b/src/ov_SC03_100/ov_SC03_100_jr_80178D40.c new file mode 100644 index 000000000..67b2d1d84 --- /dev/null +++ b/src/ov_SC03_100/ov_SC03_100_jr_80178D40.c @@ -0,0 +1,4735 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187AD4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C76E8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187AC8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187B0C[]; +extern unsigned short D_80187B14[]; +extern unsigned short D_80187B1C[]; +extern unsigned char D_801C76F0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C76E8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187B24[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C7824; +extern M2C_UNK D_801C7828; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C77B0; +extern void (*D_80187B54[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C782C[]; +extern u8 D_801C7834[]; +extern u8 D_801C77E4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187B5C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187B78[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187B80[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187BE8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187B8C; +extern u8 D_80187B98; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187C1C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187C24[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187C78[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187CAC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187C9C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187CC8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187D40[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187D48[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187D50[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80187D58[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187D60[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80187D68[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187D74[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187D80[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187D8C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187D9C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187DAC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187DB4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187DBC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187DC4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187DCC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187DD4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187DDC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187DE4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187DEC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187DF4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187DFC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187E04[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187E0C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187E14[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187E1C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187E24[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187E2C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187E34[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187E3C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187E44[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187E4C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187E54[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187E5C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187EA0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187E64; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187ED0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187F0C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187F64[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187F74[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187F7C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801880E4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801880F0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C6DB0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C88F0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C7F68; +extern short D_801C8964; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C8964) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C8964)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C7F68 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C8964) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C88C0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C88C0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C8964) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C8964) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C83C4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C7F6C; + extern s32 D_801C8380; + extern s16 D_801C8384; + extern s16 D_801C8388; + extern s16 D_801C838C; + extern s16 D_801C8390; + extern s32 D_801C8398; + extern s32 D_801C839C; + extern s32 D_801C83AC; + extern s16 D_801C83B0; + extern s16 D_801C83B4; + extern s32 D_801C83B8; + extern s32 D_801C83C0; + extern s32 D_801C83C4[10]; + extern s32 D_801C8808; + extern s16 D_801C88C0; + extern s32 D_801C88EC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C88C0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C8380); + D_801C8380 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C838C, D_801C8390 ? 0x48 : 0x40); + (*(s16*)&D_801C8964) = 2; + break; + case 0: + func_80179B28(D_801C8380); + D_801C8380 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C8384, D_801C8388 ? 0x48 : 0x40); + (*(s16*)&D_801C8964) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C8808 != 0) { + func_80179B28(D_801C8380); + D_801C8380 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C8384, D_801C8388 ? 0x48 : 0x40); + (*(s16*)&D_801C8964) = 1; + } else { + (*(s16*)&D_801C8964) = 3; + } + break; + case 0x32: + func_80179B28(D_801C8380); + D_801C8380 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C8384, + D_801C8388 ? 0x48 : 0x40); + (*(s16*)&D_801C8964) = 1; + break; + case 2: + func_80179B28(D_801C8380); + if (D_801C8398 != 0) { + D_801C7F68 = D_801C8398; + D_801C8398 = 0; + (*(s16*)&D_801C8964) = 3; + return; + } + (*(s16*)&D_801C8964) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C8964) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C8964) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C8964) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C8964) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C8964) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C8964) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C8964) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C8964) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C8964) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C8964) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C8964) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x1B: + D_801C83B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C8964) = 4; + D_801C7F6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C8964) = 5; + D_801C83AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C83AC = (s32)func_8017A3B0; + (*(s16*)&D_801C8964) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x24: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C8964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C8964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C8964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C8964) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C8964) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C8964) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C8964) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C8964) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C8964) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C839C); + (*(s16*)&D_801C8964) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C839C); + (*(s16*)&D_801C8964) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C839C); + (*(s16*)&D_801C8964) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C839C); + (*(s16*)&D_801C8964) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + break; + case 0x4E: + D_801C83C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x2B: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C8964) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C88EC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C8964) = 3; + break; + case 0x34: + (*(s16*)&D_801C8964) = 3; + D_801C7F68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C8398 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C8964) = 3; + D_801C7F68 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C8964) = 3; + D_801C7F68 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C7F68 = *(s32 *)(D_801C7F68 + 4); + return; + case 0x37: + (*(s16*)&D_801C8964) = 3; + D_801C8384 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C8388 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C8964) = 3; + D_801C838C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C8390 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C8964) = 3; + D_801C8384 = w1; + D_801C8388 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C8964) = 3; + D_801C838C = w2; + D_801C8390 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + case 0x43: + D_801C83AC = (s32)func_8017A3D8; + D_801C83B4 = 0; + (*(s16*)&D_801C8964) = 5; + D_801C83B0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C8964) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C8964) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C8964) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C83C4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C8964) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C83C4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C8964) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C83C4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C8964) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C83C4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C8964) = 3; + break; + default: + break; + } +Lend: + D_801C7F68 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C8394; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C8394 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C8394; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C8394 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C83BC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C83BC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C8378; + +s32 func_8017A3B0(void) { + switch (D_801C8378) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C83B4; +extern short D_801C83B0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C83B4) { + case 0: + func_800D0CA0(1); + D_801C83B4 = D_801C83B4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C83B0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C83B4 = D_801C83B4 + 1; + if (D_801C83B4 < 0x1E) { + return 0; + } + D_801C83B4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C83F4; + extern s16 D_801C83F6; + extern s16 D_801C83F8; + extern s16 D_801C83EC; + extern s16 D_801C83EE; + extern s16 D_801C83F0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C83F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C83F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C83F8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C83EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C83EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C83F0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C837C; +extern u16 D_801C83FC; +extern u16 D_801C83FE; +extern u16 D_801C8400; +extern s16 D_801C88F0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C88F0 = 0; + D_801C837C = 0; + D_801C83FC = D_80126B5E; + D_801C83FE = D_80126B62; + D_801C8400 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018822C[]; + extern s16 D_801C83F4; + extern s16 D_801C83EC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018822C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018822C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C83F4; + s16 *p78C = &D_801C83EC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C88F0 = 1; + D_801C837C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C839C; + extern SV4_8017B368 D_801C83A4; + extern s16 D_801C83F4; + extern s16 D_801C83EC; + extern u16 D_8018822C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C839C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C83A4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018822C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018822C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C83F4) = loc0; + (*(SV4_8017B368 *)&D_801C83EC) = loc1; + D_801C88F0 = 1; + D_801C837C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018822C[]; + extern s16 D_801C83F4; + extern s16 D_801C83F6; + extern s16 D_801C83F8; + extern s16 D_801C83EC; + extern s16 D_801C83EE; + extern s16 D_801C83F0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018822C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018822C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C83F4; + s16 *p78C = &D_801C83EC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C83F6; + v798 = D_801C83F8; + v78C = *p78C; + v78E = D_801C83EE; + v790 = D_801C83F0; + __asm__ __volatile__(""); + D_801C88F0 = 1; + D_801C837C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C837C; +extern s16 D_801C83F4; +extern s16 D_801C83F6; +extern s16 D_801C83F8; +extern s16 D_801C83EC; +extern s16 D_801C83EE; +extern s16 D_801C83F0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C837C = 0; + D_801C83F4 = (s16) D_80114F30; + D_801C83F6 = (s16) D_80114F34; + D_801C83F8 = (s16) D_80114F38; + D_801C83EC = (s16) D_80114F24; + D_801C83EE = (s16) D_80114F28; + D_801C83F0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C840C; +extern s16 D_801C840E; +extern s16 D_801C8410; +extern s16 D_801C8414; +extern s16 D_801C8416; +extern s16 D_801C8418; + +void func_8017B824(void) { + D_801C840C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C840E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C8410 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C8414 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C8416 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C8418 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C840C; +extern s16 D_801C840E; +extern s16 D_801C8410; +extern s16 D_801C8414; +extern s16 D_801C8416; +extern s16 D_801C8418; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C840C; + D_80114F34 = D_801C840E; + D_80114F38 = D_801C8410; + D_80114F24 = D_801C8414; + D_80114F28 = D_801C8416; + D_80114F2C = D_801C8418; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C83F4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C83EC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C83F4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C83EC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C83FC; +extern u16 D_801C83FE; +extern u16 D_801C8400; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C837C; +extern short D_801C8404; +extern short D_801C8406; +extern short D_801C8408; +extern s16 D_801C83F4; +extern s16 D_801C83F6; +extern s16 D_801C83F8; +extern s16 D_801C83EC; +extern s16 D_801C83EE; +extern s16 D_801C83F0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C83FC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C83FE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C8400); + (*(s16 *)&D_801C8404) = buf[0]; + (*(s16 *)&D_801C8406) = buf[1]; + (*(s16 *)&D_801C8408) = buf[2]; + D_801C83F4 = D_80114F30 + buf[0]; + D_801C837C = 0; + D_801C83F6 = D_80114F34 + buf[1]; + D_801C83F8 = D_80114F38 + buf[2]; + D_801C83EC = D_80114F24 + buf[0]; + D_801C83EE = D_80114F28 + buf[1]; + D_801C83F0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C839C; +extern SV4 D_801C83A4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C83A4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C839C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C83A4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C83A4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C839C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C83A4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C83C4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C83C4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C837C; +extern s16 D_801C88F0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C837C = D_801C837C + 1; + if (D_801C837C >= 0x1F) { + D_801C88F0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C837C; +extern s16 D_801C88F0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C837C = D_801C837C + 1; + if (0x18 < D_801C837C) { + func_8012A4BC(); + D_801C88F0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C837C; +extern void (*D_801C83C0)(void); +extern short D_801C8404; +extern short D_801C8406; +extern short D_801C8408; +extern s16 D_801C88F0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C837C = D_801C837C + 1; + if (D_801C837C >= 0x19) { + if (D_801C83C0 != 0) { + (*D_801C83C0)(); + } else { + D_80114F30 = D_80114F30 + D_801C8404; + D_80114F34 = D_80114F34 + D_801C8406; + D_80114F38 = D_80114F38 + D_801C8408; + D_80114F24 = D_80114F24 + D_801C8404; + D_80114F28 = D_80114F28 + D_801C8406; + D_80114F2C = D_80114F2C + D_801C8408; + func_8012A4BC(); + } + D_801C88F0 = 0; + } +} + + + +extern void (*D_801882CC[])(void); + +void func_8017BE60(void *a0) { + D_801882CC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017C738); + + +extern void (*D_801883E8[])(void); + +void func_8017C8B8(void *a0) { + D_801883E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CCD4); + + +extern void (*D_80188440[])(void); + +void func_8017CD10(void *a0) { + D_80188440[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D030); + + +extern void (*D_80188454[])(void); + +void func_8017D33C(void *a0) { + D_80188454[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D588); + + +extern void (*D_80188468[])(void); + +void func_8017D5DC(void *a0) { + D_80188468[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017E7B8); + + +extern void (*D_80188510[])(void); + +void func_8017E7F8(void *a0) { + D_80188510[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017E834); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E878(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017E89C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E8DC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E958(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188524[])(void); + +void func_8017E978(void *a0) { + D_80188524[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017E9B4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EA28); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EA50); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EA78); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EB10); + + +extern void (*D_80188538[])(void); + +void func_8017EBA8(void *a0) { + D_80188538[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EBE4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EC84); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EF28); + +extern s32 func_8017EF78(void); + s32 func_8017EF58(void) { + return func_8017EF78(); + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017EF78); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017F0B4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017F114); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017F134); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017F3CC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017F554); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017FA00); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017FB94); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8017FF44); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", listCdBuffer); + + +extern void (*D_801A04A4[])(void); + +void func_80180030(void *a0) { + D_801A04A4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A0558[])(void); + +void func_8018006C(void *a0) { + D_801A0558[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801800A8(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801800C0); + +void func_80180164(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(short *)((char *)a1 + 0x12) += *(unsigned short *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180180); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180204); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180240); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180270); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801802F4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801803B8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180498); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180508); + +void func_801805E4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801805EC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801806A4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180768); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801807BC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180838); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018091C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801809E8); + + +extern void (*D_801A244C[])(void); + +void func_80180AC0(void *a0) { + D_801A244C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180AFC); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801A25E8[]; + +extern s32 func_8012DFD4(s32 a0); + +void func_80180C50(int param_1) +{ + D_801A25E8[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012DFD4)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180CA0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180D18); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180E18); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180EAC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80180F64); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018101C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801811A0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801813C4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80181778); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801819B8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80181C20); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80181DC8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182014); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182160); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182218); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018236C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182418); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801824C8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801825B0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801826CC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801827AC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182884); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801828EC(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182928); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801829CC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182A8C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182AC0); + +extern s32 func_80153BD8(s32); + extern s32 func_80153BF0(s32 a0); + void func_80182B1C(void *a0) { + if (func_80153BD8((s32)a0)) { + ((void (*)(s32))func_80153BF0)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182B54); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182BB0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182C88); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182D1C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182DE8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182EC0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182F5C); + +void func_80182FB4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80182FBC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018305C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801830B0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183144); + + +extern s32 func_8012BEE8(s32 a0); + +void func_8018318C(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801831B4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183200); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801832EC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183370); + +extern void func_8012CBCC(s32 a0); + void func_8018347C(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801834B4); + + +extern void (*D_801C1A2C[])(void); + +void func_80183520(void *a0) { + D_801C1A2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018355C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801835D4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183684); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018373C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801837FC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801838C8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183AC8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183B50); + + +extern void (*D_801C4FAC[])(void); + +void func_80183BD4(void *a0) { + D_801C4FAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183C10); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183E04); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183EB4); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80183F64); + +void func_80184014(void) { +} + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018401C); + + +extern void (*D_801C52F4[])(void); + +void func_801840C0(void *a0) { + D_801C52F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801840FC); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801841D0); + +void func_801841F8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80184200); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018434C); + +extern void func_8012C218(void *a0); + void func_8018446C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80184498); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801844A8); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801844B8); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_801844F8(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_8018452C); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80184550); + + +extern void (*D_801C531C[])(void); + +void func_801845B4(void *a0) { + D_801C531C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801845F0); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80184678); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_80184738); + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80178D40", func_801847A8); + + diff --git a/src/ov_SC03_101/ov_SC03_101_jr_801734BC.c b/src/ov_SC03_101/ov_SC03_101_jr_801734BC.c index f90194e59..d16a0e312 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_801734BC.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_801734BC.c @@ -3105,1244 +3105,3 @@ void func_80178D18(void) { D_8019E224 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019DC5C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019DC5C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019DC5C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019DC5C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019DC84; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019DC84 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019DC40; - -s32 func_8017A3B0(void) { - switch (D_8019DC40) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019DC7C; -extern short D_8019DC78; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019DC7C) { - case 0: - func_800D0CA0(1); - D_8019DC7C = D_8019DC7C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019DC78; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019DC7C = D_8019DC7C + 1; - if (D_8019DC7C < 0x1E) { - return 0; - } - D_8019DC7C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019DCBC; - extern s16 D_8019DCBE; - extern s16 D_8019DCC0; - extern s16 D_8019DCB4; - extern s16 D_8019DCB6; - extern s16 D_8019DCB8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019DCBC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019DCBE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019DCC0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019DCB4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019DCB6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019DCB8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019DC44; -extern u16 D_8019DCC4; -extern u16 D_8019DCC6; -extern u16 D_8019DCC8; -extern s16 D_8019E1B0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019E1B0 = 0; - D_8019DC44 = 0; - D_8019DCC4 = D_80126B5E; - D_8019DCC6 = D_80126B62; - D_8019DCC8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187208[]; - extern s16 D_8019DCBC; - extern s16 D_8019DCB4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187208[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187208[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019DCBC; - s16 *p78C = &D_8019DCB4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019E1B0 = 1; - D_8019DC44 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019DC64; - extern SV4_8017B368 D_8019DC6C; - extern s16 D_8019DCBC; - extern s16 D_8019DCB4; - extern u16 D_80187208; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019DC64; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019DC6C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187208)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187208)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019DCBC) = loc0; - (*(SV4_8017B368 *)&D_8019DCB4) = loc1; - D_8019E1B0 = 1; - D_8019DC44 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187208[]; - extern s16 D_8019DCBC; - extern s16 D_8019DCBE; - extern s16 D_8019DCC0; - extern s16 D_8019DCB4; - extern s16 D_8019DCB6; - extern s16 D_8019DCB8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187208[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187208[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019DCBC; - s16 *p78C = &D_8019DCB4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019DCBE; - v798 = D_8019DCC0; - v78C = *p78C; - v78E = D_8019DCB6; - v790 = D_8019DCB8; - __asm__ __volatile__(""); - D_8019E1B0 = 1; - D_8019DC44 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019DC44; -extern s16 D_8019DCBC; -extern s16 D_8019DCBE; -extern s16 D_8019DCC0; -extern s16 D_8019DCB4; -extern s16 D_8019DCB6; -extern s16 D_8019DCB8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019DC44 = 0; - D_8019DCBC = (s16) D_80114F30; - D_8019DCBE = (s16) D_80114F34; - D_8019DCC0 = (s16) D_80114F38; - D_8019DCB4 = (s16) D_80114F24; - D_8019DCB6 = (s16) D_80114F28; - D_8019DCB8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019DCD4; -extern s16 D_8019DCD6; -extern s16 D_8019DCD8; -extern s16 D_8019DCDC; -extern s16 D_8019DCDE; -extern s16 D_8019DCE0; - -void func_8017B824(void) { - D_8019DCD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019DCD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019DCD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019DCDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019DCDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019DCE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019DCD4; -extern s16 D_8019DCD6; -extern s16 D_8019DCD8; -extern s16 D_8019DCDC; -extern s16 D_8019DCDE; -extern s16 D_8019DCE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019DCD4; - D_80114F34 = D_8019DCD6; - D_80114F38 = D_8019DCD8; - D_80114F24 = D_8019DCDC; - D_80114F28 = D_8019DCDE; - D_80114F2C = D_8019DCE0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019DCBC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019DCB4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019DCBC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019DCB4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019DCC4; -extern u16 D_8019DCC6; -extern u16 D_8019DCC8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019DC44; -extern short D_8019DCCC; -extern short D_8019DCCE; -extern short D_8019DCD0; -extern s16 D_8019DCBC; -extern s16 D_8019DCBE; -extern s16 D_8019DCC0; -extern s16 D_8019DCB4; -extern s16 D_8019DCB6; -extern s16 D_8019DCB8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019DCC4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019DCC6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019DCC8); - (*(s16 *)&D_8019DCCC) = buf[0]; - (*(s16 *)&D_8019DCCE) = buf[1]; - (*(s16 *)&D_8019DCD0) = buf[2]; - D_8019DCBC = D_80114F30 + buf[0]; - D_8019DC44 = 0; - D_8019DCBE = D_80114F34 + buf[1]; - D_8019DCC0 = D_80114F38 + buf[2]; - D_8019DCB4 = D_80114F24 + buf[0]; - D_8019DCB6 = D_80114F28 + buf[1]; - D_8019DCB8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019DC64; -extern SV4 D_8019DC6C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019DC6C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019DC64 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019DC6C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019DC6C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019DC64) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019DC6C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019DC8C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019DC8C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019DC44; -extern s16 D_8019E1B0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019DC44 = D_8019DC44 + 1; - if (D_8019DC44 >= 0x1F) { - D_8019E1B0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019DC44; -extern s16 D_8019E1B0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019DC44 = D_8019DC44 + 1; - if (0x18 < D_8019DC44) { - func_8012A4BC(); - D_8019E1B0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019DC44; -extern void (*D_8019DC88)(void); -extern short D_8019DCCC; -extern short D_8019DCCE; -extern short D_8019DCD0; -extern s16 D_8019E1B0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019DC44 = D_8019DC44 + 1; - if (D_8019DC44 >= 0x19) { - if (D_8019DC88 != 0) { - (*D_8019DC88)(); - } else { - D_80114F30 = D_80114F30 + D_8019DCCC; - D_80114F34 = D_80114F34 + D_8019DCCE; - D_80114F38 = D_80114F38 + D_8019DCD0; - D_80114F24 = D_80114F24 + D_8019DCCC; - D_80114F28 = D_80114F28 + D_8019DCCE; - D_80114F2C = D_80114F2C + D_8019DCD0; - func_8012A4BC(); - } - D_8019E1B0 = 0; - } -} - - - -extern void (*D_801872A8[])(void); - -void func_8017BE60(void *a0) { - D_801872A8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017BEBC); - - -extern void (*D_801872E0[])(void); - -void func_8017BEF8(void *a0) { - D_801872E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C218); - - -extern void (*D_801872F4[])(void); - -void func_8017C524(void *a0) { - D_801872F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C770); - - -extern void (*D_80187308[])(void); - -void func_8017C7C4(void *a0) { - D_80187308[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017D9A0); - - -extern void (*D_801873AC[])(void); - -void func_8017D9EC(void *a0) { - D_801873AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DA28); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DA6C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801873B4[])(void); - -void func_8017DA90(void *a0) { - D_801873B4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DACC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DB0C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DB88(void) { - func_800D1EBC(); - } - - - -extern void (*D_801873C0[])(void); - -void func_8017DBA8(void *a0) { - D_801873C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DBE4); - - -extern void (*D_801873CC[])(void); - -void func_8017DC58(void *a0) { - D_801873CC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DC94); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DCD0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DCD8); - -extern void func_800D1EBC(void); - void func_8017DD40(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DD60); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DD88); - - -extern void (*D_801873EC[])(void); - -void func_8017DDB0(void *a0) { - D_801873EC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DDEC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DE34); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DE88); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DEB0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017DF48); - - -extern void (*D_801873F4[])(void); - -void func_8017DFE0(void *a0) { - D_801873F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E01C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E0BC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E174); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E30C); - -extern s32 func_8017E35C(void); - s32 func_8017E33C(void) { - return func_8017E35C(); - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E35C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E498); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E4F8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E518); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E7B0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017E938); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017EDE4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017EF78); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F328); - - -extern void (*D_80196940[])(void); - -void func_8017F414(void *a0) { - D_80196940[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801969F4[])(void); - -void func_8017F450(void *a0) { - D_801969F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F48C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(s16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F4A4); - -void func_8017F548(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F564); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F5E8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F624); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F654); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F6D8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F79C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F87C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F8EC); - -void func_8017F9C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017F9D0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FA88); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FB4C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FBA0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FC1C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FD00); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FDCC); - -extern void (*D_801988E8[])(void); - -void func_8017FEA4(void *a0) { - D_801988E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8017FEE0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", listCdBuffer); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_80198A84[]; - -extern s32 func_8012DFD4(s32 a0); - -void func_80180034(int param_1) -{ - D_80198A84[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012DFD4)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180084); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801800FC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801801FC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180290); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180348); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180400); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180584); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180754); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80180790(void *arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x20; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x4); - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801807B8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801807F4); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8019AA0C[]; - -extern s32 func_8018095C(s32 a0); - -void func_80180814(int param_1) -{ - D_8019AA0C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8018095C)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180864); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180918); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018095C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801809B0); - - -extern void (*D_8019AA38[])(void); - -void func_80180B10(void *a0) { - D_8019AA38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180B4C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180BAC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180CB8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180DC4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180E04); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180E50); - -void func_80180ED8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80180EE0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181138); - - -extern void (*D_8019AADC[])(void); - -void func_8018118C(void *a0) { - D_8019AADC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801811C8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801812B4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181374); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801813C4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801814AC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801814F8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181914); - -void func_80181E34(void) { -} - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181E3C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181E60); - - -extern s16 D_8019DE84; - extern s16 D_8019DE86; - extern s16 D_8019DE88; - extern s16 D_8019DE8A; - void func_80181F00(s32 arg0, s32 arg1, s32 arg2) { - D_8019DE84 = *(u16 *)((s32)arg0 + 0x0); - D_8019DE86 = *(u16 *)((s32)arg0 + 0x2); - D_8019DE88 = arg1; - D_8019DE8A = arg2; - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181F30); - -extern s16 D_8019DE8A; - void func_80181FA8(s32 arg0) { - M2C_FIELD(&D_8019DE8A, s16 *, 0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80181FC4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018201C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801820F0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018212C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182178); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182254); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182518); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018253C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182564); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801825EC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182658); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801826C8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182740); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018278C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801828A8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801828E4); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801829F8); - -extern void (*D_8019B168[])(void); - -void func_80182CDC(void *a0) { - D_8019B168[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182D18); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182D90); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182E40); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182EF8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80182FB8); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80183084); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80183284); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_8018330C); - -extern void (*D_8019B2AC[])(void); - -void func_80183390(void *a0) { - D_8019B2AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801833CC); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801835C0); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80183670); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_80183720); - -void func_801837D0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_801734BC", func_801837D8); - diff --git a/src/ov_SC03_101/ov_SC03_101_jr_80178D40.c b/src/ov_SC03_101/ov_SC03_101_jr_80178D40.c new file mode 100644 index 000000000..daae9482f --- /dev/null +++ b/src/ov_SC03_101/ov_SC03_101_jr_80178D40.c @@ -0,0 +1,4711 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186AB0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019CFB0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186AA4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80186AE8[]; +extern unsigned short D_80186AF0[]; +extern unsigned short D_80186AF8[]; +extern unsigned char D_8019CFB8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019CFB0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186B00[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019D0EC; +extern M2C_UNK D_8019D0F0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019D078; +extern void (*D_80186B30[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019D0F4[]; +extern u8 D_8019D0FC[]; +extern u8 D_8019D0AC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80186B38[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80186B54[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80186B5C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186BC4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186B68; +extern u8 D_80186B74; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80186BF8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186C00[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80186C54[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80186C88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80186C78[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80186CA4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80186D1C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80186D24[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80186D2C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80186D34[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80186D3C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80186D44[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80186D50[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80186D5C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80186D68[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80186D78[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80186D88[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80186D90[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80186D98[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80186DA0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80186DA8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80186DB0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80186DB8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80186DC0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80186DC8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80186DD0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80186DD8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80186DE0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80186DE8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186DF0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80186DF8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186E00[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80186E08[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186E10[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80186E18[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80186E20[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80186E28[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80186E30[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80186E38[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80186E7C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80186E40; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186EAC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80186EE8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80186F40[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186F50[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186F58[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801870C0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801870CC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019C678; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019E1B0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019D830; +extern short D_8019E224; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019E224) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019E224)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019D830 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019E224) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019E180 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019E180 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019E224) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019E224) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019DC8C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019D834; + extern s32 D_8019DC48; + extern s16 D_8019DC4C; + extern s16 D_8019DC50; + extern s16 D_8019DC54; + extern s16 D_8019DC58; + extern s32 D_8019DC60; + extern s32 D_8019DC64; + extern s32 D_8019DC74; + extern s16 D_8019DC78; + extern s16 D_8019DC7C; + extern s32 D_8019DC80; + extern s32 D_8019DC88; + extern s32 D_8019DC8C[10]; + extern s32 D_8019E0C8; + extern s16 D_8019E180; + extern s32 D_8019E1AC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019E180; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019DC48); + D_8019DC48 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019DC54, D_8019DC58 ? 0x48 : 0x40); + (*(s16*)&D_8019E224) = 2; + break; + case 0: + func_80179B28(D_8019DC48); + D_8019DC48 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019DC4C, D_8019DC50 ? 0x48 : 0x40); + (*(s16*)&D_8019E224) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019E0C8 != 0) { + func_80179B28(D_8019DC48); + D_8019DC48 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019DC4C, D_8019DC50 ? 0x48 : 0x40); + (*(s16*)&D_8019E224) = 1; + } else { + (*(s16*)&D_8019E224) = 3; + } + break; + case 0x32: + func_80179B28(D_8019DC48); + D_8019DC48 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019DC4C, + D_8019DC50 ? 0x48 : 0x40); + (*(s16*)&D_8019E224) = 1; + break; + case 2: + func_80179B28(D_8019DC48); + if (D_8019DC60 != 0) { + D_8019D830 = D_8019DC60; + D_8019DC60 = 0; + (*(s16*)&D_8019E224) = 3; + return; + } + (*(s16*)&D_8019E224) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019E224) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019E224) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019E224) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019E224) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019E224) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019E224) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019E224) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019E224) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019E224) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019E224) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019E224) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x1B: + D_8019DC80 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019E224) = 4; + D_8019D834 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019E224) = 5; + D_8019DC74 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019DC74 = (s32)func_8017A3B0; + (*(s16*)&D_8019E224) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x24: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019E224) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019E224) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019E224) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019E224) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019E224) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019E224) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019E224) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019E224) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019E224) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019DC64); + (*(s16*)&D_8019E224) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019DC64); + (*(s16*)&D_8019E224) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019DC64); + (*(s16*)&D_8019E224) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019DC64); + (*(s16*)&D_8019E224) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + break; + case 0x4E: + D_8019DC88 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x2B: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019E224) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019E1AC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019E224) = 3; + break; + case 0x34: + (*(s16*)&D_8019E224) = 3; + D_8019D830 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019DC60 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019E224) = 3; + D_8019D830 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019E224) = 3; + D_8019D830 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019D830 = *(s32 *)(D_8019D830 + 4); + return; + case 0x37: + (*(s16*)&D_8019E224) = 3; + D_8019DC4C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019DC50 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019E224) = 3; + D_8019DC54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019DC58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019E224) = 3; + D_8019DC4C = w1; + D_8019DC50 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019E224) = 3; + D_8019DC54 = w2; + D_8019DC58 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + case 0x43: + D_8019DC74 = (s32)func_8017A3D8; + D_8019DC7C = 0; + (*(s16*)&D_8019E224) = 5; + D_8019DC78 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019E224) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019E224) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019E224) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019DC8C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019E224) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019DC8C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019E224) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019DC8C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019E224) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019DC8C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019E224) = 3; + break; + default: + break; + } +Lend: + D_8019D830 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019DC5C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019DC5C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019DC5C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019DC5C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019DC84; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019DC84 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019DC40; + +s32 func_8017A3B0(void) { + switch (D_8019DC40) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019DC7C; +extern short D_8019DC78; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019DC7C) { + case 0: + func_800D0CA0(1); + D_8019DC7C = D_8019DC7C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019DC78; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019DC7C = D_8019DC7C + 1; + if (D_8019DC7C < 0x1E) { + return 0; + } + D_8019DC7C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019DCBC; + extern s16 D_8019DCBE; + extern s16 D_8019DCC0; + extern s16 D_8019DCB4; + extern s16 D_8019DCB6; + extern s16 D_8019DCB8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019DCBC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019DCBE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019DCC0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019DCB4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019DCB6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019DCB8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019DC44; +extern u16 D_8019DCC4; +extern u16 D_8019DCC6; +extern u16 D_8019DCC8; +extern s16 D_8019E1B0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019E1B0 = 0; + D_8019DC44 = 0; + D_8019DCC4 = D_80126B5E; + D_8019DCC6 = D_80126B62; + D_8019DCC8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187208[]; + extern s16 D_8019DCBC; + extern s16 D_8019DCB4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187208[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187208[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019DCBC; + s16 *p78C = &D_8019DCB4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019E1B0 = 1; + D_8019DC44 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019DC64; + extern SV4_8017B368 D_8019DC6C; + extern s16 D_8019DCBC; + extern s16 D_8019DCB4; + extern u16 D_80187208; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019DC64; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019DC6C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187208)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187208)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019DCBC) = loc0; + (*(SV4_8017B368 *)&D_8019DCB4) = loc1; + D_8019E1B0 = 1; + D_8019DC44 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187208[]; + extern s16 D_8019DCBC; + extern s16 D_8019DCBE; + extern s16 D_8019DCC0; + extern s16 D_8019DCB4; + extern s16 D_8019DCB6; + extern s16 D_8019DCB8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187208[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187208[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019DCBC; + s16 *p78C = &D_8019DCB4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019DCBE; + v798 = D_8019DCC0; + v78C = *p78C; + v78E = D_8019DCB6; + v790 = D_8019DCB8; + __asm__ __volatile__(""); + D_8019E1B0 = 1; + D_8019DC44 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019DC44; +extern s16 D_8019DCBC; +extern s16 D_8019DCBE; +extern s16 D_8019DCC0; +extern s16 D_8019DCB4; +extern s16 D_8019DCB6; +extern s16 D_8019DCB8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019DC44 = 0; + D_8019DCBC = (s16) D_80114F30; + D_8019DCBE = (s16) D_80114F34; + D_8019DCC0 = (s16) D_80114F38; + D_8019DCB4 = (s16) D_80114F24; + D_8019DCB6 = (s16) D_80114F28; + D_8019DCB8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019DCD4; +extern s16 D_8019DCD6; +extern s16 D_8019DCD8; +extern s16 D_8019DCDC; +extern s16 D_8019DCDE; +extern s16 D_8019DCE0; + +void func_8017B824(void) { + D_8019DCD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019DCD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019DCD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019DCDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019DCDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019DCE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019DCD4; +extern s16 D_8019DCD6; +extern s16 D_8019DCD8; +extern s16 D_8019DCDC; +extern s16 D_8019DCDE; +extern s16 D_8019DCE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019DCD4; + D_80114F34 = D_8019DCD6; + D_80114F38 = D_8019DCD8; + D_80114F24 = D_8019DCDC; + D_80114F28 = D_8019DCDE; + D_80114F2C = D_8019DCE0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019DCBC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019DCB4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019DCBC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019DCB4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019DCC4; +extern u16 D_8019DCC6; +extern u16 D_8019DCC8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019DC44; +extern short D_8019DCCC; +extern short D_8019DCCE; +extern short D_8019DCD0; +extern s16 D_8019DCBC; +extern s16 D_8019DCBE; +extern s16 D_8019DCC0; +extern s16 D_8019DCB4; +extern s16 D_8019DCB6; +extern s16 D_8019DCB8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019DCC4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019DCC6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019DCC8); + (*(s16 *)&D_8019DCCC) = buf[0]; + (*(s16 *)&D_8019DCCE) = buf[1]; + (*(s16 *)&D_8019DCD0) = buf[2]; + D_8019DCBC = D_80114F30 + buf[0]; + D_8019DC44 = 0; + D_8019DCBE = D_80114F34 + buf[1]; + D_8019DCC0 = D_80114F38 + buf[2]; + D_8019DCB4 = D_80114F24 + buf[0]; + D_8019DCB6 = D_80114F28 + buf[1]; + D_8019DCB8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019DC64; +extern SV4 D_8019DC6C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019DC6C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019DC64 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019DC6C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019DC6C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019DC64) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019DC6C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019DC8C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019DC8C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019DC44; +extern s16 D_8019E1B0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019DC44 = D_8019DC44 + 1; + if (D_8019DC44 >= 0x1F) { + D_8019E1B0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019DC44; +extern s16 D_8019E1B0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019DC44 = D_8019DC44 + 1; + if (0x18 < D_8019DC44) { + func_8012A4BC(); + D_8019E1B0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019DC44; +extern void (*D_8019DC88)(void); +extern short D_8019DCCC; +extern short D_8019DCCE; +extern short D_8019DCD0; +extern s16 D_8019E1B0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019DC44 = D_8019DC44 + 1; + if (D_8019DC44 >= 0x19) { + if (D_8019DC88 != 0) { + (*D_8019DC88)(); + } else { + D_80114F30 = D_80114F30 + D_8019DCCC; + D_80114F34 = D_80114F34 + D_8019DCCE; + D_80114F38 = D_80114F38 + D_8019DCD0; + D_80114F24 = D_80114F24 + D_8019DCCC; + D_80114F28 = D_80114F28 + D_8019DCCE; + D_80114F2C = D_80114F2C + D_8019DCD0; + func_8012A4BC(); + } + D_8019E1B0 = 0; + } +} + + + +extern void (*D_801872A8[])(void); + +void func_8017BE60(void *a0) { + D_801872A8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017BEBC); + + +extern void (*D_801872E0[])(void); + +void func_8017BEF8(void *a0) { + D_801872E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C218); + + +extern void (*D_801872F4[])(void); + +void func_8017C524(void *a0) { + D_801872F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C770); + + +extern void (*D_80187308[])(void); + +void func_8017C7C4(void *a0) { + D_80187308[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017D9A0); + + +extern void (*D_801873AC[])(void); + +void func_8017D9EC(void *a0) { + D_801873AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DA28); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DA6C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801873B4[])(void); + +void func_8017DA90(void *a0) { + D_801873B4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DACC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DB0C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DB88(void) { + func_800D1EBC(); + } + + + +extern void (*D_801873C0[])(void); + +void func_8017DBA8(void *a0) { + D_801873C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DBE4); + + +extern void (*D_801873CC[])(void); + +void func_8017DC58(void *a0) { + D_801873CC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DC94); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DCD0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DCD8); + +extern void func_800D1EBC(void); + void func_8017DD40(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DD60); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DD88); + + +extern void (*D_801873EC[])(void); + +void func_8017DDB0(void *a0) { + D_801873EC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DDEC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DE34); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DE88); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DEB0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017DF48); + + +extern void (*D_801873F4[])(void); + +void func_8017DFE0(void *a0) { + D_801873F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E01C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E0BC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E174); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E30C); + +extern s32 func_8017E35C(void); + s32 func_8017E33C(void) { + return func_8017E35C(); + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E35C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E498); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E4F8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E518); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E7B0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017E938); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017EDE4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017EF78); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F328); + + +extern void (*D_80196940[])(void); + +void func_8017F414(void *a0) { + D_80196940[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801969F4[])(void); + +void func_8017F450(void *a0) { + D_801969F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F48C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(s16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F4A4); + +void func_8017F548(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F564); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F5E8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F624); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F654); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F6D8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F79C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F87C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F8EC); + +void func_8017F9C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017F9D0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FA88); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FB4C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FBA0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FC1C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FD00); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FDCC); + +extern void (*D_801988E8[])(void); + +void func_8017FEA4(void *a0) { + D_801988E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8017FEE0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", listCdBuffer); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_80198A84[]; + +extern s32 func_8012DFD4(s32 a0); + +void func_80180034(int param_1) +{ + D_80198A84[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012DFD4)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180084); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801800FC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801801FC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180290); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180348); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180400); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180584); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180754); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180790(void *arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x20; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x4); + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801807B8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801807F4); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8019AA0C[]; + +extern s32 func_8018095C(s32 a0); + +void func_80180814(int param_1) +{ + D_8019AA0C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8018095C)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180864); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180918); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018095C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801809B0); + + +extern void (*D_8019AA38[])(void); + +void func_80180B10(void *a0) { + D_8019AA38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180B4C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180BAC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180CB8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180DC4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180E04); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180E50); + +void func_80180ED8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80180EE0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181138); + + +extern void (*D_8019AADC[])(void); + +void func_8018118C(void *a0) { + D_8019AADC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801811C8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801812B4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181374); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801813C4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801814AC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801814F8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181914); + +void func_80181E34(void) { +} + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181E3C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181E60); + + +extern s16 D_8019DE84; + extern s16 D_8019DE86; + extern s16 D_8019DE88; + extern s16 D_8019DE8A; + void func_80181F00(s32 arg0, s32 arg1, s32 arg2) { + D_8019DE84 = *(u16 *)((s32)arg0 + 0x0); + D_8019DE86 = *(u16 *)((s32)arg0 + 0x2); + D_8019DE88 = arg1; + D_8019DE8A = arg2; + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181F30); + +extern s16 D_8019DE8A; + void func_80181FA8(s32 arg0) { + M2C_FIELD(&D_8019DE8A, s16 *, 0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80181FC4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018201C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801820F0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018212C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182178); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182254); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182518); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018253C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182564); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801825EC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182658); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801826C8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182740); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018278C); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801828A8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801828E4); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801829F8); + +extern void (*D_8019B168[])(void); + +void func_80182CDC(void *a0) { + D_8019B168[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182D18); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182D90); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182E40); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182EF8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80182FB8); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80183084); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80183284); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_8018330C); + +extern void (*D_8019B2AC[])(void); + +void func_80183390(void *a0) { + D_8019B2AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801833CC); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801835C0); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80183670); + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_80183720); + +void func_801837D0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_80178D40", func_801837D8); + + diff --git a/src/ov_SC03_102/ov_SC03_102_jr_801734BC.c b/src/ov_SC03_102/ov_SC03_102_jr_801734BC.c index d17e23a22..7d9e538fc 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_801734BC.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_801734BC.c @@ -3105,1138 +3105,3 @@ void func_80178D18(void) { D_801B9C24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B98D4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B98D4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B98D4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B98D4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B98FC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B98FC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B98B8; - -s32 func_8017A3B0(void) { - switch (D_801B98B8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B98F4; -extern short D_801B98F0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B98F4) { - case 0: - func_800D0CA0(1); - D_801B98F4 = D_801B98F4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B98F0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B98F4 = D_801B98F4 + 1; - if (D_801B98F4 < 0x1E) { - return 0; - } - D_801B98F4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B9934; - extern s16 D_801B9936; - extern s16 D_801B9938; - extern s16 D_801B992C; - extern s16 D_801B992E; - extern s16 D_801B9930; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9934, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9936, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9938, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B992C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B992E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9930, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B98BC; -extern u16 D_801B993C; -extern u16 D_801B993E; -extern u16 D_801B9940; -extern s16 D_801B9BB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B9BB0 = 0; - D_801B98BC = 0; - D_801B993C = D_80126B5E; - D_801B993E = D_80126B62; - D_801B9940 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189AC0[]; - extern s16 D_801B9934; - extern s16 D_801B992C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189AC0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189AC0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9934; - s16 *p78C = &D_801B992C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B9BB0 = 1; - D_801B98BC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B98DC; - extern SV4_8017B368 D_801B98E4; - extern s16 D_801B9934; - extern s16 D_801B992C; - extern u16 D_80189AC0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B98DC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B98E4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80189AC0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80189AC0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B9934) = loc0; - (*(SV4_8017B368 *)&D_801B992C) = loc1; - D_801B9BB0 = 1; - D_801B98BC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189AC0[]; - extern s16 D_801B9934; - extern s16 D_801B9936; - extern s16 D_801B9938; - extern s16 D_801B992C; - extern s16 D_801B992E; - extern s16 D_801B9930; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189AC0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189AC0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9934; - s16 *p78C = &D_801B992C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B9936; - v798 = D_801B9938; - v78C = *p78C; - v78E = D_801B992E; - v790 = D_801B9930; - __asm__ __volatile__(""); - D_801B9BB0 = 1; - D_801B98BC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B98BC; -extern s16 D_801B9934; -extern s16 D_801B9936; -extern s16 D_801B9938; -extern s16 D_801B992C; -extern s16 D_801B992E; -extern s16 D_801B9930; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B98BC = 0; - D_801B9934 = (s16) D_80114F30; - D_801B9936 = (s16) D_80114F34; - D_801B9938 = (s16) D_80114F38; - D_801B992C = (s16) D_80114F24; - D_801B992E = (s16) D_80114F28; - D_801B9930 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B994C; -extern s16 D_801B994E; -extern s16 D_801B9950; -extern s16 D_801B9954; -extern s16 D_801B9956; -extern s16 D_801B9958; - -void func_8017B824(void) { - D_801B994C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B994E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B9950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B9954 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B9956 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B9958 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B994C; -extern s16 D_801B994E; -extern s16 D_801B9950; -extern s16 D_801B9954; -extern s16 D_801B9956; -extern s16 D_801B9958; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B994C; - D_80114F34 = D_801B994E; - D_80114F38 = D_801B9950; - D_80114F24 = D_801B9954; - D_80114F28 = D_801B9956; - D_80114F2C = D_801B9958; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B9934), src[8..15] -> (*(S8_8017B8E8 *)&D_801B992C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B9934) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B992C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B993C; -extern u16 D_801B993E; -extern u16 D_801B9940; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B98BC; -extern short D_801B9944; -extern short D_801B9946; -extern short D_801B9948; -extern s16 D_801B9934; -extern s16 D_801B9936; -extern s16 D_801B9938; -extern s16 D_801B992C; -extern s16 D_801B992E; -extern s16 D_801B9930; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B993C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B993E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9940); - (*(s16 *)&D_801B9944) = buf[0]; - (*(s16 *)&D_801B9946) = buf[1]; - (*(s16 *)&D_801B9948) = buf[2]; - D_801B9934 = D_80114F30 + buf[0]; - D_801B98BC = 0; - D_801B9936 = D_80114F34 + buf[1]; - D_801B9938 = D_80114F38 + buf[2]; - D_801B992C = D_80114F24 + buf[0]; - D_801B992E = D_80114F28 + buf[1]; - D_801B9930 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B98DC; -extern SV4 D_801B98E4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B98E4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B98DC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B98E4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B98E4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B98DC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B98E4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B9904[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B9904; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B98BC; -extern s16 D_801B9BB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B98BC = D_801B98BC + 1; - if (D_801B98BC >= 0x1F) { - D_801B9BB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B98BC; -extern s16 D_801B9BB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B98BC = D_801B98BC + 1; - if (0x18 < D_801B98BC) { - func_8012A4BC(); - D_801B9BB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B98BC; -extern void (*D_801B9900)(void); -extern short D_801B9944; -extern short D_801B9946; -extern short D_801B9948; -extern s16 D_801B9BB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B98BC = D_801B98BC + 1; - if (D_801B98BC >= 0x19) { - if (D_801B9900 != 0) { - (*D_801B9900)(); - } else { - D_80114F30 = D_80114F30 + D_801B9944; - D_80114F34 = D_80114F34 + D_801B9946; - D_80114F38 = D_80114F38 + D_801B9948; - D_80114F24 = D_80114F24 + D_801B9944; - D_80114F28 = D_80114F28 + D_801B9946; - D_80114F2C = D_80114F2C + D_801B9948; - func_8012A4BC(); - } - D_801B9BB0 = 0; - } -} - - - -extern void (*D_80189B60[])(void); - -void func_8017BE60(void *a0) { - D_80189B60[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801801C4); - - -extern void (*D_80189BBC[])(void); - -void func_80180204(void *a0) { - D_80189BBC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180240); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180284(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801802A8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_801802E8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_80180364(void) { - func_800D1EBC(); - } - - - -extern void (*D_80189BD0[])(void); - -void func_80180384(void *a0) { - D_80189BD0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801803C0); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern M2C_UNK D_80189BDC; - void func_80180434(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80189BDC, 0x1000000); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern char D_80189BE0; - -void func_8018045C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80189BE0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180484); - - -extern void (*D_80189BE4[])(void); - -void func_8018051C(void *a0) { - D_80189BE4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180558); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180628); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801807C0); - -extern s32 func_80180810(s32 arg); - void func_801807F0(void *arg) { - func_80180810((s32)arg); - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180810); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180964); - - -extern void (*D_80189BFC[])(void); - -void func_801809C4(void *a0) { - D_80189BFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 rand(void); - void func_80180A00(s32 param_1) { - *(s32 *)(param_1 + 0x1c) = rand(); - *(s16 *)(param_1 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180A38); - - -extern void (*D_80189C04[])(void); - -void func_80180BFC(void *a0) { - D_80189C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80180C38); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80181030); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018110C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801811F0); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80181260); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018139C); - - -extern void (*D_80189CBC[])(void); - -void func_80181500(void *a0) { - D_80189CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018153C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801815D4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801816E4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80181704); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018199C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80181B24); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80181FD0); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182164); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182514); - - -extern void (*D_8019794C[])(void); - -void func_80182600(void *a0) { - D_8019794C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80197A00[])(void); - -void func_8018263C(void *a0) { - D_80197A00[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80182678(void *a0) { - *(s8 *)((s32)a0 + 0xC1) = 0; - *(s16 *)((s32)a0 + 0x5E) = 0; - *(s16 *)((s32)a0 + 0x5C) &= 0xC800; - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182690); - -void func_80182734(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - short fc = *(unsigned short *)((char *)a0 + 0xfc); - unsigned short v12 = *(unsigned short *)((char *)a1 + 0x12) + fc; - *(unsigned short *)((char *)a1 + 0x12) = v12; - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182750); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801827D4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182810); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182840); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801828C4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182988); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182A68); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182AD8); - -void func_80182BB4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182BBC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182C74); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182D38); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182D8C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182E08); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182EEC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80182FB8); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183090); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183214); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183438); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801837EC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183A2C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183C94); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80183E3C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184088); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801841D4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018428C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801843E0); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018448C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018453C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184624); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184740); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184820); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801848F8); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80184960(u8 *a0) { - *(s16 *)(a0 + 0xfe) = 0; - if (func_80153BD8((s32)a0)) { - ((void (*)(void *))func_80153BF0)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_8018499C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184A40); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184B00); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184B34); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80184B90(s32 arg0) { - if (func_80153BD8(arg0)) { - ((void (*)(s32))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184BC8); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184C24); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184CFC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184D90); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184E5C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184F34); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80184FD0); - -void func_80185028(void) { -} - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185030); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801850D0); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185124); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801851B8); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80185200(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185228); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185274); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185360); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801853E4); - -extern void func_8012CBCC(s32 a0); - void func_801854F0(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185528); - - -extern void (*D_801B6EC4[])(void); - -void func_80185594(void *a0) { - D_801B6EC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801855D0); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801857C4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185874); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185924); - -void func_801859D4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801859DC); - - -extern void (*D_801B6EDC[])(void); - -void func_80185A80(void *a0) { - D_801B6EDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185ABC); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185B34); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185BE4); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185C9C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185D5C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80185E28); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_80186028); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801734BC", func_801860B0); - diff --git a/src/ov_SC03_102/ov_SC03_102_jr_80178D40.c b/src/ov_SC03_102/ov_SC03_102_jr_80178D40.c new file mode 100644 index 000000000..9c75235b5 --- /dev/null +++ b/src/ov_SC03_102/ov_SC03_102_jr_80178D40.c @@ -0,0 +1,4605 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80189368[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B8C28; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018935C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801893A0[]; +extern unsigned short D_801893A8[]; +extern unsigned short D_801893B0[]; +extern unsigned char D_801B8C30[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B8C28; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801893B8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8D64; +extern M2C_UNK D_801B8D68; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8CF0; +extern void (*D_801893E8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B8D6C[]; +extern u8 D_801B8D74[]; +extern u8 D_801B8D24[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801893F0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018940C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189414[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018947C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189420; +extern u8 D_8018942C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801894B0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801894B8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018950C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189540[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189530[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018955C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801895D4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801895DC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801895E4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801895EC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801895F4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801895FC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189608[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189614[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189620[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189630[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189640[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189648[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189650[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189658[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189660[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189668[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189670[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189678[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189680[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189688[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80189690[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189698[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801896A0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801896A8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801896B0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801896B8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801896C0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801896C8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801896D0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801896D8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801896E0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801896E8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801896F0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189734[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801896F8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189764[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801897A0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801897F8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189808[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189810[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80189978[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189984[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B82F4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B9BB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B94A8; +extern short D_801B9C24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B9C24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B9C24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B94A8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B9C24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B9B80 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B9B80 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B9C24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B9C24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B9904[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B94AC; + extern s32 D_801B98C0; + extern s16 D_801B98C4; + extern s16 D_801B98C8; + extern s16 D_801B98CC; + extern s16 D_801B98D0; + extern s32 D_801B98D8; + extern s32 D_801B98DC; + extern s32 D_801B98EC; + extern s16 D_801B98F0; + extern s16 D_801B98F4; + extern s32 D_801B98F8; + extern s32 D_801B9900; + extern s32 D_801B9904[10]; + extern s32 D_801B9AC8; + extern s16 D_801B9B80; + extern s32 D_801B9BAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B9B80; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B98C0); + D_801B98C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B98CC, D_801B98D0 ? 0x48 : 0x40); + (*(s16*)&D_801B9C24) = 2; + break; + case 0: + func_80179B28(D_801B98C0); + D_801B98C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B98C4, D_801B98C8 ? 0x48 : 0x40); + (*(s16*)&D_801B9C24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B9AC8 != 0) { + func_80179B28(D_801B98C0); + D_801B98C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B98C4, D_801B98C8 ? 0x48 : 0x40); + (*(s16*)&D_801B9C24) = 1; + } else { + (*(s16*)&D_801B9C24) = 3; + } + break; + case 0x32: + func_80179B28(D_801B98C0); + D_801B98C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B98C4, + D_801B98C8 ? 0x48 : 0x40); + (*(s16*)&D_801B9C24) = 1; + break; + case 2: + func_80179B28(D_801B98C0); + if (D_801B98D8 != 0) { + D_801B94A8 = D_801B98D8; + D_801B98D8 = 0; + (*(s16*)&D_801B9C24) = 3; + return; + } + (*(s16*)&D_801B9C24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B9C24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B9C24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B9C24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B9C24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B9C24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x1B: + D_801B98F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B9C24) = 4; + D_801B94AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B9C24) = 5; + D_801B98EC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B98EC = (s32)func_8017A3B0; + (*(s16*)&D_801B9C24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x24: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B9C24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B9C24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B9C24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9C24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9C24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9C24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B9C24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B9C24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B9C24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B98DC); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B98DC); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B98DC); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B98DC); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x4E: + D_801B9900 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x2B: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B9C24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B9BAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x34: + (*(s16*)&D_801B9C24) = 3; + D_801B94A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B98D8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B9C24) = 3; + D_801B94A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B9C24) = 3; + D_801B94A8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B94A8 = *(s32 *)(D_801B94A8 + 4); + return; + case 0x37: + (*(s16*)&D_801B9C24) = 3; + D_801B98C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B98C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B9C24) = 3; + D_801B98CC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B98D0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B9C24) = 3; + D_801B98C4 = w1; + D_801B98C8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B9C24) = 3; + D_801B98CC = w2; + D_801B98D0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x43: + D_801B98EC = (s32)func_8017A3D8; + D_801B98F4 = 0; + (*(s16*)&D_801B9C24) = 5; + D_801B98F0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9C24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9C24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B9904; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B9C24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B9904; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B9C24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B9904[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B9C24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B9904; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B9C24) = 3; + break; + default: + break; + } +Lend: + D_801B94A8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B98D4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B98D4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B98D4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B98D4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B98FC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B98FC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B98B8; + +s32 func_8017A3B0(void) { + switch (D_801B98B8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B98F4; +extern short D_801B98F0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B98F4) { + case 0: + func_800D0CA0(1); + D_801B98F4 = D_801B98F4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B98F0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B98F4 = D_801B98F4 + 1; + if (D_801B98F4 < 0x1E) { + return 0; + } + D_801B98F4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B9934; + extern s16 D_801B9936; + extern s16 D_801B9938; + extern s16 D_801B992C; + extern s16 D_801B992E; + extern s16 D_801B9930; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9934, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9936, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9938, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B992C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B992E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9930, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B98BC; +extern u16 D_801B993C; +extern u16 D_801B993E; +extern u16 D_801B9940; +extern s16 D_801B9BB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B9BB0 = 0; + D_801B98BC = 0; + D_801B993C = D_80126B5E; + D_801B993E = D_80126B62; + D_801B9940 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189AC0[]; + extern s16 D_801B9934; + extern s16 D_801B992C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189AC0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189AC0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9934; + s16 *p78C = &D_801B992C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B9BB0 = 1; + D_801B98BC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B98DC; + extern SV4_8017B368 D_801B98E4; + extern s16 D_801B9934; + extern s16 D_801B992C; + extern u16 D_80189AC0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B98DC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B98E4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80189AC0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80189AC0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B9934) = loc0; + (*(SV4_8017B368 *)&D_801B992C) = loc1; + D_801B9BB0 = 1; + D_801B98BC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189AC0[]; + extern s16 D_801B9934; + extern s16 D_801B9936; + extern s16 D_801B9938; + extern s16 D_801B992C; + extern s16 D_801B992E; + extern s16 D_801B9930; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189AC0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189AC0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9934; + s16 *p78C = &D_801B992C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B9936; + v798 = D_801B9938; + v78C = *p78C; + v78E = D_801B992E; + v790 = D_801B9930; + __asm__ __volatile__(""); + D_801B9BB0 = 1; + D_801B98BC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B98BC; +extern s16 D_801B9934; +extern s16 D_801B9936; +extern s16 D_801B9938; +extern s16 D_801B992C; +extern s16 D_801B992E; +extern s16 D_801B9930; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B98BC = 0; + D_801B9934 = (s16) D_80114F30; + D_801B9936 = (s16) D_80114F34; + D_801B9938 = (s16) D_80114F38; + D_801B992C = (s16) D_80114F24; + D_801B992E = (s16) D_80114F28; + D_801B9930 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B994C; +extern s16 D_801B994E; +extern s16 D_801B9950; +extern s16 D_801B9954; +extern s16 D_801B9956; +extern s16 D_801B9958; + +void func_8017B824(void) { + D_801B994C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B994E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B9950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B9954 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B9956 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B9958 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B994C; +extern s16 D_801B994E; +extern s16 D_801B9950; +extern s16 D_801B9954; +extern s16 D_801B9956; +extern s16 D_801B9958; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B994C; + D_80114F34 = D_801B994E; + D_80114F38 = D_801B9950; + D_80114F24 = D_801B9954; + D_80114F28 = D_801B9956; + D_80114F2C = D_801B9958; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B9934), src[8..15] -> (*(S8_8017B8E8 *)&D_801B992C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B9934) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B992C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B993C; +extern u16 D_801B993E; +extern u16 D_801B9940; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B98BC; +extern short D_801B9944; +extern short D_801B9946; +extern short D_801B9948; +extern s16 D_801B9934; +extern s16 D_801B9936; +extern s16 D_801B9938; +extern s16 D_801B992C; +extern s16 D_801B992E; +extern s16 D_801B9930; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B993C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B993E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9940); + (*(s16 *)&D_801B9944) = buf[0]; + (*(s16 *)&D_801B9946) = buf[1]; + (*(s16 *)&D_801B9948) = buf[2]; + D_801B9934 = D_80114F30 + buf[0]; + D_801B98BC = 0; + D_801B9936 = D_80114F34 + buf[1]; + D_801B9938 = D_80114F38 + buf[2]; + D_801B992C = D_80114F24 + buf[0]; + D_801B992E = D_80114F28 + buf[1]; + D_801B9930 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B98DC; +extern SV4 D_801B98E4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B98E4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B98DC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B98E4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B98E4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B98DC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B98E4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B9904[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B9904; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B98BC; +extern s16 D_801B9BB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B98BC = D_801B98BC + 1; + if (D_801B98BC >= 0x1F) { + D_801B9BB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B98BC; +extern s16 D_801B9BB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B98BC = D_801B98BC + 1; + if (0x18 < D_801B98BC) { + func_8012A4BC(); + D_801B9BB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B98BC; +extern void (*D_801B9900)(void); +extern short D_801B9944; +extern short D_801B9946; +extern short D_801B9948; +extern s16 D_801B9BB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B98BC = D_801B98BC + 1; + if (D_801B98BC >= 0x19) { + if (D_801B9900 != 0) { + (*D_801B9900)(); + } else { + D_80114F30 = D_80114F30 + D_801B9944; + D_80114F34 = D_80114F34 + D_801B9946; + D_80114F38 = D_80114F38 + D_801B9948; + D_80114F24 = D_80114F24 + D_801B9944; + D_80114F28 = D_80114F28 + D_801B9946; + D_80114F2C = D_80114F2C + D_801B9948; + func_8012A4BC(); + } + D_801B9BB0 = 0; + } +} + + + +extern void (*D_80189B60[])(void); + +void func_8017BE60(void *a0) { + D_80189B60[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801801C4); + + +extern void (*D_80189BBC[])(void); + +void func_80180204(void *a0) { + D_80189BBC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180240); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180284(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801802A8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_801802E8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_80180364(void) { + func_800D1EBC(); + } + + + +extern void (*D_80189BD0[])(void); + +void func_80180384(void *a0) { + D_80189BD0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801803C0); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern M2C_UNK D_80189BDC; + void func_80180434(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80189BDC, 0x1000000); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern char D_80189BE0; + +void func_8018045C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80189BE0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180484); + + +extern void (*D_80189BE4[])(void); + +void func_8018051C(void *a0) { + D_80189BE4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180558); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180628); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801807C0); + +extern s32 func_80180810(s32 arg); + void func_801807F0(void *arg) { + func_80180810((s32)arg); + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180810); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180964); + + +extern void (*D_80189BFC[])(void); + +void func_801809C4(void *a0) { + D_80189BFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 rand(void); + void func_80180A00(s32 param_1) { + *(s32 *)(param_1 + 0x1c) = rand(); + *(s16 *)(param_1 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180A38); + + +extern void (*D_80189C04[])(void); + +void func_80180BFC(void *a0) { + D_80189C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80180C38); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80181030); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018110C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801811F0); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80181260); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018139C); + + +extern void (*D_80189CBC[])(void); + +void func_80181500(void *a0) { + D_80189CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018153C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801815D4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801816E4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80181704); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018199C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80181B24); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80181FD0); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182164); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182514); + + +extern void (*D_8019794C[])(void); + +void func_80182600(void *a0) { + D_8019794C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80197A00[])(void); + +void func_8018263C(void *a0) { + D_80197A00[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80182678(void *a0) { + *(s8 *)((s32)a0 + 0xC1) = 0; + *(s16 *)((s32)a0 + 0x5E) = 0; + *(s16 *)((s32)a0 + 0x5C) &= 0xC800; + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182690); + +void func_80182734(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + short fc = *(unsigned short *)((char *)a0 + 0xfc); + unsigned short v12 = *(unsigned short *)((char *)a1 + 0x12) + fc; + *(unsigned short *)((char *)a1 + 0x12) = v12; + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182750); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801827D4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182810); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182840); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801828C4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182988); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182A68); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182AD8); + +void func_80182BB4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182BBC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182C74); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182D38); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182D8C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182E08); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182EEC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80182FB8); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183090); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183214); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183438); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801837EC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183A2C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183C94); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80183E3C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184088); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801841D4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018428C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801843E0); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018448C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018453C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184624); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184740); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184820); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801848F8); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80184960(u8 *a0) { + *(s16 *)(a0 + 0xfe) = 0; + if (func_80153BD8((s32)a0)) { + ((void (*)(void *))func_80153BF0)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_8018499C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184A40); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184B00); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184B34); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80184B90(s32 arg0) { + if (func_80153BD8(arg0)) { + ((void (*)(s32))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184BC8); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184C24); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184CFC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184D90); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184E5C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184F34); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80184FD0); + +void func_80185028(void) { +} + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185030); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801850D0); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185124); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801851B8); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80185200(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185228); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185274); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185360); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801853E4); + +extern void func_8012CBCC(s32 a0); + void func_801854F0(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185528); + + +extern void (*D_801B6EC4[])(void); + +void func_80185594(void *a0) { + D_801B6EC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801855D0); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801857C4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185874); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185924); + +void func_801859D4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801859DC); + + +extern void (*D_801B6EDC[])(void); + +void func_80185A80(void *a0) { + D_801B6EDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185ABC); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185B34); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185BE4); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185C9C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185D5C); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80185E28); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_80186028); + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_80178D40", func_801860B0); + + diff --git a/src/ov_SC03_103/ov_SC03_103_jr_801734BC.c b/src/ov_SC03_103/ov_SC03_103_jr_801734BC.c index a590bcc54..5793a5f19 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_801734BC.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_801734BC.c @@ -3105,1212 +3105,3 @@ void func_80178D18(void) { D_801C4DD4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C4A8C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C4A8C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C4A8C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C4A8C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C4AB4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C4AB4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C4A70; - -s32 func_8017A3B0(void) { - switch (D_801C4A70) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C4AAC; -extern short D_801C4AA8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C4AAC) { - case 0: - func_800D0CA0(1); - D_801C4AAC = D_801C4AAC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C4AA8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C4AAC = D_801C4AAC + 1; - if (D_801C4AAC < 0x1E) { - return 0; - } - D_801C4AAC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C4AEC; - extern s16 D_801C4AEE; - extern s16 D_801C4AF0; - extern s16 D_801C4AE4; - extern s16 D_801C4AE6; - extern s16 D_801C4AE8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C4AEC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C4AEE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C4AF0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C4AE4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C4AE6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C4AE8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C4A74; -extern u16 D_801C4AF4; -extern u16 D_801C4AF6; -extern u16 D_801C4AF8; -extern s16 D_801C4D60; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C4D60 = 0; - D_801C4A74 = 0; - D_801C4AF4 = D_80126B5E; - D_801C4AF6 = D_80126B62; - D_801C4AF8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187A70[]; - extern s16 D_801C4AEC; - extern s16 D_801C4AE4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187A70[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187A70[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C4AEC; - s16 *p78C = &D_801C4AE4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C4D60 = 1; - D_801C4A74 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C4A94; - extern SV4_8017B368 D_801C4A9C; - extern s16 D_801C4AEC; - extern s16 D_801C4AE4; - extern u16 D_80187A70; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C4A94; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C4A9C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187A70)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187A70)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C4AEC) = loc0; - (*(SV4_8017B368 *)&D_801C4AE4) = loc1; - D_801C4D60 = 1; - D_801C4A74 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187A70[]; - extern s16 D_801C4AEC; - extern s16 D_801C4AEE; - extern s16 D_801C4AF0; - extern s16 D_801C4AE4; - extern s16 D_801C4AE6; - extern s16 D_801C4AE8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187A70[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187A70[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C4AEC; - s16 *p78C = &D_801C4AE4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C4AEE; - v798 = D_801C4AF0; - v78C = *p78C; - v78E = D_801C4AE6; - v790 = D_801C4AE8; - __asm__ __volatile__(""); - D_801C4D60 = 1; - D_801C4A74 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C4A74; -extern s16 D_801C4AEC; -extern s16 D_801C4AEE; -extern s16 D_801C4AF0; -extern s16 D_801C4AE4; -extern s16 D_801C4AE6; -extern s16 D_801C4AE8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C4A74 = 0; - D_801C4AEC = (s16) D_80114F30; - D_801C4AEE = (s16) D_80114F34; - D_801C4AF0 = (s16) D_80114F38; - D_801C4AE4 = (s16) D_80114F24; - D_801C4AE6 = (s16) D_80114F28; - D_801C4AE8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C4B04; -extern s16 D_801C4B06; -extern s16 D_801C4B08; -extern s16 D_801C4B0C; -extern s16 D_801C4B0E; -extern s16 D_801C4B10; - -void func_8017B824(void) { - D_801C4B04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C4B06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C4B08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C4B0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C4B0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C4B10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C4B04; -extern s16 D_801C4B06; -extern s16 D_801C4B08; -extern s16 D_801C4B0C; -extern s16 D_801C4B0E; -extern s16 D_801C4B10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C4B04; - D_80114F34 = D_801C4B06; - D_80114F38 = D_801C4B08; - D_80114F24 = D_801C4B0C; - D_80114F28 = D_801C4B0E; - D_80114F2C = D_801C4B10; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C4AEC), src[8..15] -> (*(S8_8017B8E8 *)&D_801C4AE4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C4AEC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C4AE4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C4AF4; -extern u16 D_801C4AF6; -extern u16 D_801C4AF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C4A74; -extern short D_801C4AFC; -extern short D_801C4AFE; -extern short D_801C4B00; -extern s16 D_801C4AEC; -extern s16 D_801C4AEE; -extern s16 D_801C4AF0; -extern s16 D_801C4AE4; -extern s16 D_801C4AE6; -extern s16 D_801C4AE8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C4AF4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C4AF6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C4AF8); - (*(s16 *)&D_801C4AFC) = buf[0]; - (*(s16 *)&D_801C4AFE) = buf[1]; - (*(s16 *)&D_801C4B00) = buf[2]; - D_801C4AEC = D_80114F30 + buf[0]; - D_801C4A74 = 0; - D_801C4AEE = D_80114F34 + buf[1]; - D_801C4AF0 = D_80114F38 + buf[2]; - D_801C4AE4 = D_80114F24 + buf[0]; - D_801C4AE6 = D_80114F28 + buf[1]; - D_801C4AE8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C4A94; -extern SV4 D_801C4A9C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C4A9C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C4A94 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C4A9C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C4A9C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C4A94) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C4A9C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C4ABC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C4ABC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C4A74; -extern s16 D_801C4D60; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C4A74 = D_801C4A74 + 1; - if (D_801C4A74 >= 0x1F) { - D_801C4D60 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C4A74; -extern s16 D_801C4D60; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C4A74 = D_801C4A74 + 1; - if (0x18 < D_801C4A74) { - func_8012A4BC(); - D_801C4D60 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C4A74; -extern void (*D_801C4AB8)(void); -extern short D_801C4AFC; -extern short D_801C4AFE; -extern short D_801C4B00; -extern s16 D_801C4D60; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C4A74 = D_801C4A74 + 1; - if (D_801C4A74 >= 0x19) { - if (D_801C4AB8 != 0) { - (*D_801C4AB8)(); - } else { - D_80114F30 = D_80114F30 + D_801C4AFC; - D_80114F34 = D_80114F34 + D_801C4AFE; - D_80114F38 = D_80114F38 + D_801C4B00; - D_80114F24 = D_80114F24 + D_801C4AFC; - D_80114F28 = D_80114F28 + D_801C4AFE; - D_80114F2C = D_80114F2C + D_801C4B00; - func_8012A4BC(); - } - D_801C4D60 = 0; - } -} - - - -extern void (*D_80187B10[])(void); - -void func_8017BE60(void *a0) { - D_80187B10[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80187B34[])(void); - -void func_8017BEBC(void *a0) { - D_80187B34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80187B3C[])(void); - -void func_8017C150(void *a0) { - D_80187B3C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80187B28; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80187B28, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017DDD8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017DE18); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017DE58); - - -extern void (*D_80188034[])(void); - -void func_8017DEA4(void *a0) { - D_80188034[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017DEE0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DF24(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018803C[])(void); - -void func_8017DF48(void *a0) { - D_8018803C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017DF84); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DFC4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E040(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188048[])(void); - -void func_8017E060(void *a0) { - D_80188048[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E09C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E110); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E138); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E160); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E1F8); - - -extern void (*D_8018805C[])(void); - -void func_8017E290(void *a0) { - D_8018805C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E2CC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E36C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E40C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E5A4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E6D0); - - -extern void (*D_801880B8[])(void); - -void func_8017E700(void *a0) { - D_801880B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E73C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E780); - - -extern void (*D_801880C0[])(void); - -void func_8017E7D0(void *a0) { - D_801880C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017E80C(void *a0) { - *(u16 *)((char *)a0 + 0xDC) = 1; - *(s16 *)((char *)a0 + 0xDE) = 0; - *(s16 *)((char *)a0 + 0xE0) = 1; - *(s16 *)((char *)a0 + 0xE2) = 1; - *(u16 *)((char *)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E830); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E8F4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E954); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017E974); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017EC0C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017ED94); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017F240); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017F3D4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017F784); - - -extern void (*D_801A0444[])(void); - -void func_8017F870(void *a0) { - D_801A0444[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A04F8[])(void); - -void func_8017F8AC(void *a0) { - D_801A04F8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8017F8E8(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017F900); - -void func_8017F9A4(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017F9C0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FA44); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FA80); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FAB0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FB34); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FBF8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FCD8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FD48); - -void func_8017FE24(void) { -} - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FE2C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FEE4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FFA8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8017FFFC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180078); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018015C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180228); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180300); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018037C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018043C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180564); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801806D4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180868); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180ABC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180BC8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180D64); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180E20); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180EAC); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801A2414[]; - s32 func_80180EE4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A2414[0], &D_801A2414[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180F10); - -extern u8 D_80078EC1; - s32 func_80180FBC(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80180FD4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80181040); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801811C4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801813E8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018179C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801819DC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80181C44); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80181DEC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182038); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182184); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018223C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182390); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018243C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801824EC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801825D4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801826F0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801827D0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801828A8); - - -extern s32 func_80153BD8(s32); - extern s32 func_80153BF0(s32 a0); - void func_80182910(u8 * arg0) { - *(s16 *)(arg0 + 0xfe) = 0; - if (func_80153BD8((s32)arg0)) { - ((void (*)(void *))func_80153BF0)(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_8018294C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801829F0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182AB0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182AE4); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80182B40(void *a0) { - if (func_80153BD8((s32)a0)) { - ((void (*)(s32))func_80153BF0)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182B78); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182BD4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182CAC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182D40); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182E0C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182EE4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182F80); - -void func_80182FD8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80182FE0); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183080); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801830D4); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183168); - - -extern s32 func_8012BEE8(s32 a0); - -void func_801831B0(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801831D8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183224); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183310); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183394); - -extern void func_8012CBCC(s32 a0); - void func_801834A0(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 0x2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801834D8); - - -extern void (*D_801C1F98[])(void); - -void func_80183544(void *a0) { - D_801C1F98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183580); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801835F8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801836A8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183760); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183820); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_801838EC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183AEC); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183B74); - - -extern void (*D_801C20DC[])(void); - -void func_80183BF8(void *a0) { - D_801C20DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183C34); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183E28); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183ED8); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80183F88); - -void func_80184038(void) { -} - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_801734BC", func_80184040); - diff --git a/src/ov_SC03_103/ov_SC03_103_jr_80178D40.c b/src/ov_SC03_103/ov_SC03_103_jr_80178D40.c new file mode 100644 index 000000000..fa483c5d8 --- /dev/null +++ b/src/ov_SC03_103/ov_SC03_103_jr_80178D40.c @@ -0,0 +1,4679 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187318[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C3DE0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018730C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187350[]; +extern unsigned short D_80187358[]; +extern unsigned short D_80187360[]; +extern unsigned char D_801C3DE8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C3DE0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187368[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C3F1C; +extern M2C_UNK D_801C3F20; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C3EA8; +extern void (*D_80187398[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C3F24[]; +extern u8 D_801C3F2C[]; +extern u8 D_801C3EDC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801873A0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801873BC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801873C4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018742C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801873D0; +extern u8 D_801873DC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187460[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187468[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801874BC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801874F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801874E0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018750C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187584[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018758C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187594[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018759C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801875A4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801875AC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801875B8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801875C4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801875D0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801875E0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801875F0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801875F8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187600[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187608[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187610[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187618[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187620[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187628[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187630[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187638[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187640[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187648[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187650[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187658[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187660[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187668[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187670[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187678[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187680[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187688[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187690[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187698[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801876A0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801876E4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801876A8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187714[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187750[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801877A8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801877B8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801877C0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187928[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187934[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C34A8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C4D60; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C4660; +extern short D_801C4DD4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C4DD4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C4DD4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C4660 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C4DD4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C4D30 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C4D30 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C4DD4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C4DD4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C4ABC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C4664; + extern s32 D_801C4A78; + extern s16 D_801C4A7C; + extern s16 D_801C4A80; + extern s16 D_801C4A84; + extern s16 D_801C4A88; + extern s32 D_801C4A90; + extern s32 D_801C4A94; + extern s32 D_801C4AA4; + extern s16 D_801C4AA8; + extern s16 D_801C4AAC; + extern s32 D_801C4AB0; + extern s32 D_801C4AB8; + extern s32 D_801C4ABC[10]; + extern s32 D_801C4C78; + extern s16 D_801C4D30; + extern s32 D_801C4D5C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C4D30; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C4A78); + D_801C4A78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C4A84, D_801C4A88 ? 0x48 : 0x40); + (*(s16*)&D_801C4DD4) = 2; + break; + case 0: + func_80179B28(D_801C4A78); + D_801C4A78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C4A7C, D_801C4A80 ? 0x48 : 0x40); + (*(s16*)&D_801C4DD4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C4C78 != 0) { + func_80179B28(D_801C4A78); + D_801C4A78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C4A7C, D_801C4A80 ? 0x48 : 0x40); + (*(s16*)&D_801C4DD4) = 1; + } else { + (*(s16*)&D_801C4DD4) = 3; + } + break; + case 0x32: + func_80179B28(D_801C4A78); + D_801C4A78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C4A7C, + D_801C4A80 ? 0x48 : 0x40); + (*(s16*)&D_801C4DD4) = 1; + break; + case 2: + func_80179B28(D_801C4A78); + if (D_801C4A90 != 0) { + D_801C4660 = D_801C4A90; + D_801C4A90 = 0; + (*(s16*)&D_801C4DD4) = 3; + return; + } + (*(s16*)&D_801C4DD4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C4DD4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C4DD4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C4DD4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x1B: + D_801C4AB0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C4DD4) = 4; + D_801C4664 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C4DD4) = 5; + D_801C4AA4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C4AA4 = (s32)func_8017A3B0; + (*(s16*)&D_801C4DD4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x24: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C4DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C4DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C4DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C4DD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C4DD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C4DD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C4DD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C4A94); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C4A94); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C4A94); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C4A94); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x4E: + D_801C4AB8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x2B: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C4DD4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C4D5C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x34: + (*(s16*)&D_801C4DD4) = 3; + D_801C4660 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C4A90 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C4DD4) = 3; + D_801C4660 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C4DD4) = 3; + D_801C4660 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C4660 = *(s32 *)(D_801C4660 + 4); + return; + case 0x37: + (*(s16*)&D_801C4DD4) = 3; + D_801C4A7C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C4A80 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C4DD4) = 3; + D_801C4A84 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C4A88 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C4DD4) = 3; + D_801C4A7C = w1; + D_801C4A80 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C4DD4) = 3; + D_801C4A84 = w2; + D_801C4A88 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x43: + D_801C4AA4 = (s32)func_8017A3D8; + D_801C4AAC = 0; + (*(s16*)&D_801C4DD4) = 5; + D_801C4AA8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C4DD4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C4DD4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C4ABC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C4DD4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C4ABC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C4DD4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C4ABC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C4DD4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C4ABC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C4DD4) = 3; + break; + default: + break; + } +Lend: + D_801C4660 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C4A8C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C4A8C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C4A8C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C4A8C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C4AB4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C4AB4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C4A70; + +s32 func_8017A3B0(void) { + switch (D_801C4A70) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C4AAC; +extern short D_801C4AA8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C4AAC) { + case 0: + func_800D0CA0(1); + D_801C4AAC = D_801C4AAC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C4AA8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C4AAC = D_801C4AAC + 1; + if (D_801C4AAC < 0x1E) { + return 0; + } + D_801C4AAC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C4AEC; + extern s16 D_801C4AEE; + extern s16 D_801C4AF0; + extern s16 D_801C4AE4; + extern s16 D_801C4AE6; + extern s16 D_801C4AE8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C4AEC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C4AEE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C4AF0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C4AE4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C4AE6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C4AE8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C4A74; +extern u16 D_801C4AF4; +extern u16 D_801C4AF6; +extern u16 D_801C4AF8; +extern s16 D_801C4D60; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C4D60 = 0; + D_801C4A74 = 0; + D_801C4AF4 = D_80126B5E; + D_801C4AF6 = D_80126B62; + D_801C4AF8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187A70[]; + extern s16 D_801C4AEC; + extern s16 D_801C4AE4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187A70[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187A70[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C4AEC; + s16 *p78C = &D_801C4AE4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C4D60 = 1; + D_801C4A74 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C4A94; + extern SV4_8017B368 D_801C4A9C; + extern s16 D_801C4AEC; + extern s16 D_801C4AE4; + extern u16 D_80187A70; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C4A94; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C4A9C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187A70)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187A70)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C4AEC) = loc0; + (*(SV4_8017B368 *)&D_801C4AE4) = loc1; + D_801C4D60 = 1; + D_801C4A74 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187A70[]; + extern s16 D_801C4AEC; + extern s16 D_801C4AEE; + extern s16 D_801C4AF0; + extern s16 D_801C4AE4; + extern s16 D_801C4AE6; + extern s16 D_801C4AE8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187A70[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187A70[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C4AEC; + s16 *p78C = &D_801C4AE4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C4AEE; + v798 = D_801C4AF0; + v78C = *p78C; + v78E = D_801C4AE6; + v790 = D_801C4AE8; + __asm__ __volatile__(""); + D_801C4D60 = 1; + D_801C4A74 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C4A74; +extern s16 D_801C4AEC; +extern s16 D_801C4AEE; +extern s16 D_801C4AF0; +extern s16 D_801C4AE4; +extern s16 D_801C4AE6; +extern s16 D_801C4AE8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C4A74 = 0; + D_801C4AEC = (s16) D_80114F30; + D_801C4AEE = (s16) D_80114F34; + D_801C4AF0 = (s16) D_80114F38; + D_801C4AE4 = (s16) D_80114F24; + D_801C4AE6 = (s16) D_80114F28; + D_801C4AE8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C4B04; +extern s16 D_801C4B06; +extern s16 D_801C4B08; +extern s16 D_801C4B0C; +extern s16 D_801C4B0E; +extern s16 D_801C4B10; + +void func_8017B824(void) { + D_801C4B04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C4B06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C4B08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C4B0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C4B0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C4B10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C4B04; +extern s16 D_801C4B06; +extern s16 D_801C4B08; +extern s16 D_801C4B0C; +extern s16 D_801C4B0E; +extern s16 D_801C4B10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C4B04; + D_80114F34 = D_801C4B06; + D_80114F38 = D_801C4B08; + D_80114F24 = D_801C4B0C; + D_80114F28 = D_801C4B0E; + D_80114F2C = D_801C4B10; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C4AEC), src[8..15] -> (*(S8_8017B8E8 *)&D_801C4AE4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C4AEC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C4AE4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C4AF4; +extern u16 D_801C4AF6; +extern u16 D_801C4AF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C4A74; +extern short D_801C4AFC; +extern short D_801C4AFE; +extern short D_801C4B00; +extern s16 D_801C4AEC; +extern s16 D_801C4AEE; +extern s16 D_801C4AF0; +extern s16 D_801C4AE4; +extern s16 D_801C4AE6; +extern s16 D_801C4AE8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C4AF4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C4AF6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C4AF8); + (*(s16 *)&D_801C4AFC) = buf[0]; + (*(s16 *)&D_801C4AFE) = buf[1]; + (*(s16 *)&D_801C4B00) = buf[2]; + D_801C4AEC = D_80114F30 + buf[0]; + D_801C4A74 = 0; + D_801C4AEE = D_80114F34 + buf[1]; + D_801C4AF0 = D_80114F38 + buf[2]; + D_801C4AE4 = D_80114F24 + buf[0]; + D_801C4AE6 = D_80114F28 + buf[1]; + D_801C4AE8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C4A94; +extern SV4 D_801C4A9C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C4A9C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C4A94 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C4A9C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C4A9C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C4A94) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C4A9C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C4ABC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C4ABC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C4A74; +extern s16 D_801C4D60; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C4A74 = D_801C4A74 + 1; + if (D_801C4A74 >= 0x1F) { + D_801C4D60 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C4A74; +extern s16 D_801C4D60; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C4A74 = D_801C4A74 + 1; + if (0x18 < D_801C4A74) { + func_8012A4BC(); + D_801C4D60 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C4A74; +extern void (*D_801C4AB8)(void); +extern short D_801C4AFC; +extern short D_801C4AFE; +extern short D_801C4B00; +extern s16 D_801C4D60; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C4A74 = D_801C4A74 + 1; + if (D_801C4A74 >= 0x19) { + if (D_801C4AB8 != 0) { + (*D_801C4AB8)(); + } else { + D_80114F30 = D_80114F30 + D_801C4AFC; + D_80114F34 = D_80114F34 + D_801C4AFE; + D_80114F38 = D_80114F38 + D_801C4B00; + D_80114F24 = D_80114F24 + D_801C4AFC; + D_80114F28 = D_80114F28 + D_801C4AFE; + D_80114F2C = D_80114F2C + D_801C4B00; + func_8012A4BC(); + } + D_801C4D60 = 0; + } +} + + + +extern void (*D_80187B10[])(void); + +void func_8017BE60(void *a0) { + D_80187B10[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80187B34[])(void); + +void func_8017BEBC(void *a0) { + D_80187B34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80187B3C[])(void); + +void func_8017C150(void *a0) { + D_80187B3C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80187B28; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80187B28, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017DDD8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017DE18); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017DE58); + + +extern void (*D_80188034[])(void); + +void func_8017DEA4(void *a0) { + D_80188034[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017DEE0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DF24(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018803C[])(void); + +void func_8017DF48(void *a0) { + D_8018803C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017DF84); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DFC4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E040(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188048[])(void); + +void func_8017E060(void *a0) { + D_80188048[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E09C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E110); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E138); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E160); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E1F8); + + +extern void (*D_8018805C[])(void); + +void func_8017E290(void *a0) { + D_8018805C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E2CC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E36C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E40C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E5A4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E6D0); + + +extern void (*D_801880B8[])(void); + +void func_8017E700(void *a0) { + D_801880B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E73C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E780); + + +extern void (*D_801880C0[])(void); + +void func_8017E7D0(void *a0) { + D_801880C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017E80C(void *a0) { + *(u16 *)((char *)a0 + 0xDC) = 1; + *(s16 *)((char *)a0 + 0xDE) = 0; + *(s16 *)((char *)a0 + 0xE0) = 1; + *(s16 *)((char *)a0 + 0xE2) = 1; + *(u16 *)((char *)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E830); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E8F4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E954); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017E974); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017EC0C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017ED94); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017F240); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017F3D4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017F784); + + +extern void (*D_801A0444[])(void); + +void func_8017F870(void *a0) { + D_801A0444[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A04F8[])(void); + +void func_8017F8AC(void *a0) { + D_801A04F8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8017F8E8(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017F900); + +void func_8017F9A4(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017F9C0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FA44); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FA80); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FAB0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FB34); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FBF8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FCD8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FD48); + +void func_8017FE24(void) { +} + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FE2C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FEE4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FFA8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8017FFFC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180078); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018015C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180228); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180300); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018037C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018043C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180564); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801806D4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180868); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180ABC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180BC8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180D64); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180E20); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180EAC); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801A2414[]; + s32 func_80180EE4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801A2414[0], &D_801A2414[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180F10); + +extern u8 D_80078EC1; + s32 func_80180FBC(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80180FD4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80181040); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801811C4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801813E8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018179C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801819DC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80181C44); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80181DEC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182038); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182184); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018223C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182390); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018243C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801824EC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801825D4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801826F0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801827D0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801828A8); + + +extern s32 func_80153BD8(s32); + extern s32 func_80153BF0(s32 a0); + void func_80182910(u8 * arg0) { + *(s16 *)(arg0 + 0xfe) = 0; + if (func_80153BD8((s32)arg0)) { + ((void (*)(void *))func_80153BF0)(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_8018294C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801829F0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182AB0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182AE4); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80182B40(void *a0) { + if (func_80153BD8((s32)a0)) { + ((void (*)(s32))func_80153BF0)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182B78); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182BD4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182CAC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182D40); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182E0C); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182EE4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182F80); + +void func_80182FD8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80182FE0); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183080); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801830D4); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183168); + + +extern s32 func_8012BEE8(s32 a0); + +void func_801831B0(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801831D8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183224); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183310); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183394); + +extern void func_8012CBCC(s32 a0); + void func_801834A0(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 0x2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801834D8); + + +extern void (*D_801C1F98[])(void); + +void func_80183544(void *a0) { + D_801C1F98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183580); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801835F8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801836A8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183760); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183820); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_801838EC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183AEC); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183B74); + + +extern void (*D_801C20DC[])(void); + +void func_80183BF8(void *a0) { + D_801C20DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183C34); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183E28); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183ED8); + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80183F88); + +void func_80184038(void) { +} + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_80178D40", func_80184040); + + diff --git a/src/ov_SC03_104/ov_SC03_104_jr_801734BC.c b/src/ov_SC03_104/ov_SC03_104_jr_801734BC.c index 32d74f0d7..6307e4efc 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_801734BC.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_801734BC.c @@ -3105,1529 +3105,3 @@ void func_80178D18(void) { D_801C0494 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C0024; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C0024 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C0024; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C0024 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C004C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C004C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C0008; - -s32 func_8017A3B0(void) { - switch (D_801C0008) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C0044; -extern short D_801C0040; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C0044) { - case 0: - func_800D0CA0(1); - D_801C0044 = D_801C0044 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C0040; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C0044 = D_801C0044 + 1; - if (D_801C0044 < 0x1E) { - return 0; - } - D_801C0044 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C0084; - extern s16 D_801C0086; - extern s16 D_801C0088; - extern s16 D_801C007C; - extern s16 D_801C007E; - extern s16 D_801C0080; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C0084, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C0086, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C0088, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C007C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C007E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C0080, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C000C; -extern u16 D_801C008C; -extern u16 D_801C008E; -extern u16 D_801C0090; -extern s16 D_801C0420; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C0420 = 0; - D_801C000C = 0; - D_801C008C = D_80126B5E; - D_801C008E = D_80126B62; - D_801C0090 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E600[]; - extern s16 D_801C0084; - extern s16 D_801C007C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E600[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E600[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C0084; - s16 *p78C = &D_801C007C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C0420 = 1; - D_801C000C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C002C; - extern SV4_8017B368 D_801C0034; - extern s16 D_801C0084; - extern s16 D_801C007C; - extern u16 D_8018E600; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C002C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C0034; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E600)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E600)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C0084) = loc0; - (*(SV4_8017B368 *)&D_801C007C) = loc1; - D_801C0420 = 1; - D_801C000C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E600[]; - extern s16 D_801C0084; - extern s16 D_801C0086; - extern s16 D_801C0088; - extern s16 D_801C007C; - extern s16 D_801C007E; - extern s16 D_801C0080; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E600[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E600[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C0084; - s16 *p78C = &D_801C007C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C0086; - v798 = D_801C0088; - v78C = *p78C; - v78E = D_801C007E; - v790 = D_801C0080; - __asm__ __volatile__(""); - D_801C0420 = 1; - D_801C000C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C000C; -extern s16 D_801C0084; -extern s16 D_801C0086; -extern s16 D_801C0088; -extern s16 D_801C007C; -extern s16 D_801C007E; -extern s16 D_801C0080; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C000C = 0; - D_801C0084 = (s16) D_80114F30; - D_801C0086 = (s16) D_80114F34; - D_801C0088 = (s16) D_80114F38; - D_801C007C = (s16) D_80114F24; - D_801C007E = (s16) D_80114F28; - D_801C0080 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C009C; -extern s16 D_801C009E; -extern s16 D_801C00A0; -extern s16 D_801C00A4; -extern s16 D_801C00A6; -extern s16 D_801C00A8; - -void func_8017B824(void) { - D_801C009C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C009E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C00A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C00A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C00A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C00A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C009C; -extern s16 D_801C009E; -extern s16 D_801C00A0; -extern s16 D_801C00A4; -extern s16 D_801C00A6; -extern s16 D_801C00A8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C009C; - D_80114F34 = D_801C009E; - D_80114F38 = D_801C00A0; - D_80114F24 = D_801C00A4; - D_80114F28 = D_801C00A6; - D_80114F2C = D_801C00A8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C0084), src[8..15] -> (*(S8_8017B8E8 *)&D_801C007C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C0084) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C007C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C008C; -extern u16 D_801C008E; -extern u16 D_801C0090; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C000C; -extern short D_801C0094; -extern short D_801C0096; -extern short D_801C0098; -extern s16 D_801C0084; -extern s16 D_801C0086; -extern s16 D_801C0088; -extern s16 D_801C007C; -extern s16 D_801C007E; -extern s16 D_801C0080; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C008C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C008E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C0090); - (*(s16 *)&D_801C0094) = buf[0]; - (*(s16 *)&D_801C0096) = buf[1]; - (*(s16 *)&D_801C0098) = buf[2]; - D_801C0084 = D_80114F30 + buf[0]; - D_801C000C = 0; - D_801C0086 = D_80114F34 + buf[1]; - D_801C0088 = D_80114F38 + buf[2]; - D_801C007C = D_80114F24 + buf[0]; - D_801C007E = D_80114F28 + buf[1]; - D_801C0080 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C002C; -extern SV4 D_801C0034; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C0034) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C002C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C0034 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C0034)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C002C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C0034) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C0054[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C0054; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C000C; -extern s16 D_801C0420; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C000C = D_801C000C + 1; - if (D_801C000C >= 0x1F) { - D_801C0420 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C000C; -extern s16 D_801C0420; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C000C = D_801C000C + 1; - if (0x18 < D_801C000C) { - func_8012A4BC(); - D_801C0420 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C000C; -extern void (*D_801C0050)(void); -extern short D_801C0094; -extern short D_801C0096; -extern short D_801C0098; -extern s16 D_801C0420; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C000C = D_801C000C + 1; - if (D_801C000C >= 0x19) { - if (D_801C0050 != 0) { - (*D_801C0050)(); - } else { - D_80114F30 = D_80114F30 + D_801C0094; - D_80114F34 = D_80114F34 + D_801C0096; - D_80114F38 = D_80114F38 + D_801C0098; - D_80114F24 = D_80114F24 + D_801C0094; - D_80114F28 = D_80114F28 + D_801C0096; - D_80114F2C = D_80114F2C + D_801C0098; - func_8012A4BC(); - } - D_801C0420 = 0; - } -} - - - -extern void (*D_8018E6A0[])(void); - -void func_8017BE60(void *a0) { - D_8018E6A0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018E6D8[])(void); - -void func_8017BEF8(void *a0) { - D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C218); - - -extern void (*D_8018E6EC[])(void); - -void func_8017C524(void *a0) { - D_8018E6EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C770); - - -extern void (*D_8018E700[])(void); - -void func_8017C7C4(void *a0) { - D_8018E700[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80180D88); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80180DC8); - -extern void (*D_8018E7A4[])(void); - -void func_80180E14(void *a0) { - D_8018E7A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80180E50); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180E94(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018E7AC[])(void); - -void func_80180EB8(void *a0) { - D_8018E7AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80180EF4); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180F34(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_80180FB0(void) { - ((void (*)(void))func_800D1EBC)(); - } - - - -extern void (*D_8018E7B8[])(void); - -void func_80180FD0(void *a0) { - D_8018E7B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018100C); - -extern void (*D_8018E7C4[])(void); - -void func_80181080(void *a0) { - D_8018E7C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801810BC); - -s32 func_801810F8(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181100); - -extern s32 func_800D1EBC(void); - void func_80181168(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018E7D4; - void func_80181188(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018E7D4, 0x1000000); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018E7D8; - -void func_801811B0(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018E7D8, 0x1000000); -} - - - -extern void (*D_8018E7E4[])(void); - -void func_801811D8(void *a0) { - D_8018E7E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181214); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018125C); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018E7DC; - void func_801812B0(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018E7DC, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801812D8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018136C); - - -extern void (*D_8018E7EC[])(void); - -void func_80181404(void *a0) { - D_8018E7EC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181440); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181528); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801815DC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181774); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801817A4); - -extern void (*D_80199DC0[])(void); - -void func_801817C4(void *a0) { - D_80199DC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181800); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181858); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181A2C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181A84); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181AD0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181B14); - -void func_80181B58(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181B60); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181BDC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181CA8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181D58); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181EA0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181EF4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80181F54); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182038); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801822A0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801823F0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018241C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182578); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801825C8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801825E4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801826A0); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_80199E78[]; - s32 func_801826F0(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80199E78[0], &D_80199E78[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018271C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801827EC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018282C); - - -extern u8 D_80078EC1; - s32 func_80182898(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - - -extern void (*D_80199EF8[])(void); - -void func_801828B0(void *a0) { - D_80199EF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801828EC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801829C4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182B08); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182C08); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80182CB4(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182CEC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182D18); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80182FCC); - -void func_8018300C(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; - } - } - - -void func_8018302C(s32 arg0) { - if (arg0 != 0) { - M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; - } - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018304C); - - -extern void (*D_8019A070[])(void); - -void func_801830F0(void *a0) { - D_8019A070[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018312C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801831E8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183318); - - -extern void (*D_8019A080[])(void); - -void func_801833F0(void *a0) { - D_8019A080[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018342C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801837C8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018383C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801839C0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183AF4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183B90); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183BCC(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0x20; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 4); - } - - -extern void func_80178B18(s32 a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern s32 D_8019C9F8; - -void func_80183BF4(void * arg0) { - func_80178B18((s32)arg0, (s32)&D_8019C9F8); - ((void (*)(s32, s32))func_8012AD44)(arg0, 5); -} - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183C30(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x6); - } - - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8019CA44[]; - -extern s32 func_80183D98(s32 a0); - -void func_80183C50(int param_1) -{ - D_8019CA44[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80183D98)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183CA0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183D54); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183D98); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183DEC); - - -extern void (*D_8019CA70[])(void); - -void func_80183F4C(void *a0) { - D_8019CA70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183F88); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80183FE8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801840F4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184200); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184240); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018428C); - -void func_80184314(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018431C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184574); - - -extern void (*D_8019CB14[])(void); - -void func_801845C8(void *a0) { - D_8019CB14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184604); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801846F0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801847B0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184800); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801848E8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184934); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80184D50); - -void func_80185270(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185278); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018529C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018533C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018536C); - -extern s32 D_801C0242; - void func_801853E4(s32 arg0) { - *(s16 *)((s32)&D_801C0242 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185400); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185458); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018552C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185568); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801855B4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185690); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185954); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185978); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801859A0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185A28); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185A94); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185B04); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185B7C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185BC8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185CE4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185D20); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80185E34); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80186118); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801863B0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80186538); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801869E4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80186B78); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80186F28); - - -extern void (*D_8019D68C[])(void); - -void func_80187014(void *a0) { - D_8019D68C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019D740[])(void); - -void func_80187050(void *a0) { - D_8019D740[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018708C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xc800; - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801870A4); - -void func_80187148(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187164); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801871E8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187224); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187254); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801872D8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018739C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018747C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801874EC); - -void func_801875C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801875D0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187688); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018774C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801877A0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018781C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187900); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801879CC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187AA4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187C28); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80187E4C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188200); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188440); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801886A8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188850); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188A9C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188BE8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188CA0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188DF4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188EA0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80188F50); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189038); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189154); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189234); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018930C); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_80189374(u8 *param_1) { - *(s16 *)(param_1 + 0xfe) = 0; - if (func_80153BD8((s32)param_1)) { - ((void (*)(u8 *))func_80153BF0)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801893B0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189454); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189514); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189548); - -extern s32 func_80153BD8(s32 arg); - extern s32 func_80153BF0(s32 a0); - void func_801895A4(void *a0) { - if (func_80153BD8((s32)a0)) { - ((void (*)(s32))func_80153BF0)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801895DC); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189638); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189710); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801897A4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189870); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189948); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_801899E4); - -void func_80189A3C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189A44); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189AE4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189B38); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189BCC); - - -extern s32 func_8012BEE8(s32 a0); - -void func_80189C14(int param_1) -{ - int iVar1; - - iVar1 = *(int *)(param_1 + 0x1c) - 1; - *(int *)(param_1 + 0x1c) = iVar1; - if (*(int *)(param_1 + 0x1c) == 0) { - *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); - } -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189C3C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189C88); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189D74); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189DF8); - -extern void func_8012CBCC(s32 a0); - void func_80189F04(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((s32)a0 + 2) = 2; - } - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189F3C); - - -extern void (*D_801BCC04[])(void); - -void func_80189FA8(void *a0) { - D_801BCC04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_80189FE4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A1D8); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A288); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A338); - -void func_8018A3E8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A3F0); - - -extern void (*D_801BCF4C[])(void); - -void func_8018A494(void *a0) { - D_801BCF4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A4D0); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A5A4); - -void func_8018A5CC(void) { -} - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A5D4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A720); - -extern void func_8012C218(void *a0); - void func_8018A840(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)a0 + 0xCC)); - } - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A86C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A87C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A88C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018A8CC(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A900); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A924); - - -extern void (*D_801BCF74[])(void); - -void func_8018A988(void *a0) { - D_801BCF74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018A9C4); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018AA4C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018AB0C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_801734BC", func_8018AB7C); - diff --git a/src/ov_SC03_104/ov_SC03_104_jr_80178D40.c b/src/ov_SC03_104/ov_SC03_104_jr_80178D40.c new file mode 100644 index 000000000..7aab234a6 --- /dev/null +++ b/src/ov_SC03_104/ov_SC03_104_jr_80178D40.c @@ -0,0 +1,4996 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018DEA8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801BF378; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018DE9C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018DEE0[]; +extern unsigned short D_8018DEE8[]; +extern unsigned short D_8018DEF0[]; +extern unsigned char D_801BF380[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801BF378; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018DEF8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BF4B4; +extern M2C_UNK D_801BF4B8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BF440; +extern void (*D_8018DF28[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801BF4BC[]; +extern u8 D_801BF4C4[]; +extern u8 D_801BF474[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018DF30[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018DF4C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018DF54[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DFBC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DF60; +extern u8 D_8018DF6C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018DFF0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018DFF8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018E04C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018E080[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018E070[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018E09C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E114[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E11C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E124[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E12C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E134[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E13C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E148[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E154[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E160[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E170[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E180[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E188[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E190[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E198[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E1A0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E1A8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E1B0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E1B8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E1C0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E1C8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E1D0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E1D8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E1E0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E1E8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E1F0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E1F8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E200[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E208[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E210[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E218[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E220[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E228[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E230[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E274[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E238; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E2A4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E2E0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E338[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E348[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E350[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018E4B8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018E4C4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BEA08; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C0420; +extern int func_80178970(void); +extern void func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801BFBF8; +extern short D_801C0494; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C0494) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C0494)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801BFBF8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C0494) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C03F0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C03F0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C0494) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C0494) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C0054[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801BFBFC; + extern s32 D_801C0010; + extern s16 D_801C0014; + extern s16 D_801C0018; + extern s16 D_801C001C; + extern s16 D_801C0020; + extern s32 D_801C0028; + extern s32 D_801C002C; + extern s32 D_801C003C; + extern s16 D_801C0040; + extern s16 D_801C0044; + extern s32 D_801C0048; + extern s32 D_801C0050; + extern s32 D_801C0054[10]; + extern s32 D_801C0338; + extern s16 D_801C03F0; + extern s32 D_801C041C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C03F0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C0010); + D_801C0010 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C001C, D_801C0020 ? 0x48 : 0x40); + (*(s16*)&D_801C0494) = 2; + break; + case 0: + func_80179B28(D_801C0010); + D_801C0010 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C0014, D_801C0018 ? 0x48 : 0x40); + (*(s16*)&D_801C0494) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C0338 != 0) { + func_80179B28(D_801C0010); + D_801C0010 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C0014, D_801C0018 ? 0x48 : 0x40); + (*(s16*)&D_801C0494) = 1; + } else { + (*(s16*)&D_801C0494) = 3; + } + break; + case 0x32: + func_80179B28(D_801C0010); + D_801C0010 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C0014, + D_801C0018 ? 0x48 : 0x40); + (*(s16*)&D_801C0494) = 1; + break; + case 2: + func_80179B28(D_801C0010); + if (D_801C0028 != 0) { + D_801BFBF8 = D_801C0028; + D_801C0028 = 0; + (*(s16*)&D_801C0494) = 3; + return; + } + (*(s16*)&D_801C0494) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C0494) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C0494) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C0494) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C0494) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C0494) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C0494) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C0494) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C0494) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C0494) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C0494) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C0494) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x1B: + D_801C0048 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C0494) = 4; + D_801BFBFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C0494) = 5; + D_801C003C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C003C = (s32)func_8017A3B0; + (*(s16*)&D_801C0494) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x24: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C0494) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C0494) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C0494) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C0494) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C0494) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C0494) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C0494) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C0494) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C0494) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C002C); + (*(s16*)&D_801C0494) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C002C); + (*(s16*)&D_801C0494) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C002C); + (*(s16*)&D_801C0494) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C002C); + (*(s16*)&D_801C0494) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + break; + case 0x4E: + D_801C0050 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x2B: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C0494) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C041C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C0494) = 3; + break; + case 0x34: + (*(s16*)&D_801C0494) = 3; + D_801BFBF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C0028 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C0494) = 3; + D_801BFBF8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C0494) = 3; + D_801BFBF8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801BFBF8 = *(s32 *)(D_801BFBF8 + 4); + return; + case 0x37: + (*(s16*)&D_801C0494) = 3; + D_801C0014 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C0018 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C0494) = 3; + D_801C001C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C0020 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C0494) = 3; + D_801C0014 = w1; + D_801C0018 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C0494) = 3; + D_801C001C = w2; + D_801C0020 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + case 0x43: + D_801C003C = (s32)func_8017A3D8; + D_801C0044 = 0; + (*(s16*)&D_801C0494) = 5; + D_801C0040 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C0494) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C0494) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C0494) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C0054; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C0494) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C0054; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C0494) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C0054[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C0494) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C0054; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C0494) = 3; + break; + default: + break; + } +Lend: + D_801BFBF8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C0024; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C0024 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C0024; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C0024 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C004C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C004C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C0008; + +s32 func_8017A3B0(void) { + switch (D_801C0008) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C0044; +extern short D_801C0040; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C0044) { + case 0: + func_800D0CA0(1); + D_801C0044 = D_801C0044 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C0040; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C0044 = D_801C0044 + 1; + if (D_801C0044 < 0x1E) { + return 0; + } + D_801C0044 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C0084; + extern s16 D_801C0086; + extern s16 D_801C0088; + extern s16 D_801C007C; + extern s16 D_801C007E; + extern s16 D_801C0080; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C0084, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C0086, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C0088, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C007C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C007E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C0080, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C000C; +extern u16 D_801C008C; +extern u16 D_801C008E; +extern u16 D_801C0090; +extern s16 D_801C0420; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C0420 = 0; + D_801C000C = 0; + D_801C008C = D_80126B5E; + D_801C008E = D_80126B62; + D_801C0090 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E600[]; + extern s16 D_801C0084; + extern s16 D_801C007C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E600[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E600[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C0084; + s16 *p78C = &D_801C007C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C0420 = 1; + D_801C000C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C002C; + extern SV4_8017B368 D_801C0034; + extern s16 D_801C0084; + extern s16 D_801C007C; + extern u16 D_8018E600; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C002C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C0034; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E600)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E600)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C0084) = loc0; + (*(SV4_8017B368 *)&D_801C007C) = loc1; + D_801C0420 = 1; + D_801C000C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E600[]; + extern s16 D_801C0084; + extern s16 D_801C0086; + extern s16 D_801C0088; + extern s16 D_801C007C; + extern s16 D_801C007E; + extern s16 D_801C0080; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E600[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E600[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C0084; + s16 *p78C = &D_801C007C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C0086; + v798 = D_801C0088; + v78C = *p78C; + v78E = D_801C007E; + v790 = D_801C0080; + __asm__ __volatile__(""); + D_801C0420 = 1; + D_801C000C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C000C; +extern s16 D_801C0084; +extern s16 D_801C0086; +extern s16 D_801C0088; +extern s16 D_801C007C; +extern s16 D_801C007E; +extern s16 D_801C0080; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C000C = 0; + D_801C0084 = (s16) D_80114F30; + D_801C0086 = (s16) D_80114F34; + D_801C0088 = (s16) D_80114F38; + D_801C007C = (s16) D_80114F24; + D_801C007E = (s16) D_80114F28; + D_801C0080 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C009C; +extern s16 D_801C009E; +extern s16 D_801C00A0; +extern s16 D_801C00A4; +extern s16 D_801C00A6; +extern s16 D_801C00A8; + +void func_8017B824(void) { + D_801C009C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C009E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C00A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C00A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C00A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C00A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C009C; +extern s16 D_801C009E; +extern s16 D_801C00A0; +extern s16 D_801C00A4; +extern s16 D_801C00A6; +extern s16 D_801C00A8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C009C; + D_80114F34 = D_801C009E; + D_80114F38 = D_801C00A0; + D_80114F24 = D_801C00A4; + D_80114F28 = D_801C00A6; + D_80114F2C = D_801C00A8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C0084), src[8..15] -> (*(S8_8017B8E8 *)&D_801C007C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C0084) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C007C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C008C; +extern u16 D_801C008E; +extern u16 D_801C0090; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C000C; +extern short D_801C0094; +extern short D_801C0096; +extern short D_801C0098; +extern s16 D_801C0084; +extern s16 D_801C0086; +extern s16 D_801C0088; +extern s16 D_801C007C; +extern s16 D_801C007E; +extern s16 D_801C0080; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C008C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C008E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C0090); + (*(s16 *)&D_801C0094) = buf[0]; + (*(s16 *)&D_801C0096) = buf[1]; + (*(s16 *)&D_801C0098) = buf[2]; + D_801C0084 = D_80114F30 + buf[0]; + D_801C000C = 0; + D_801C0086 = D_80114F34 + buf[1]; + D_801C0088 = D_80114F38 + buf[2]; + D_801C007C = D_80114F24 + buf[0]; + D_801C007E = D_80114F28 + buf[1]; + D_801C0080 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C002C; +extern SV4 D_801C0034; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C0034) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C002C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C0034 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C0034)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C002C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C0034) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C0054[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C0054; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C000C; +extern s16 D_801C0420; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C000C = D_801C000C + 1; + if (D_801C000C >= 0x1F) { + D_801C0420 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C000C; +extern s16 D_801C0420; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C000C = D_801C000C + 1; + if (0x18 < D_801C000C) { + func_8012A4BC(); + D_801C0420 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C000C; +extern void (*D_801C0050)(void); +extern short D_801C0094; +extern short D_801C0096; +extern short D_801C0098; +extern s16 D_801C0420; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C000C = D_801C000C + 1; + if (D_801C000C >= 0x19) { + if (D_801C0050 != 0) { + (*D_801C0050)(); + } else { + D_80114F30 = D_80114F30 + D_801C0094; + D_80114F34 = D_80114F34 + D_801C0096; + D_80114F38 = D_80114F38 + D_801C0098; + D_80114F24 = D_80114F24 + D_801C0094; + D_80114F28 = D_80114F28 + D_801C0096; + D_80114F2C = D_80114F2C + D_801C0098; + func_8012A4BC(); + } + D_801C0420 = 0; + } +} + + + +extern void (*D_8018E6A0[])(void); + +void func_8017BE60(void *a0) { + D_8018E6A0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018E6D8[])(void); + +void func_8017BEF8(void *a0) { + D_8018E6D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C218); + + +extern void (*D_8018E6EC[])(void); + +void func_8017C524(void *a0) { + D_8018E6EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C770); + + +extern void (*D_8018E700[])(void); + +void func_8017C7C4(void *a0) { + D_8018E700[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80180D88); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80180DC8); + +extern void (*D_8018E7A4[])(void); + +void func_80180E14(void *a0) { + D_8018E7A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80180E50); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180E94(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018E7AC[])(void); + +void func_80180EB8(void *a0) { + D_8018E7AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80180EF4); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180F34(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_80180FB0(void) { + ((void (*)(void))func_800D1EBC)(); + } + + + +extern void (*D_8018E7B8[])(void); + +void func_80180FD0(void *a0) { + D_8018E7B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018100C); + +extern void (*D_8018E7C4[])(void); + +void func_80181080(void *a0) { + D_8018E7C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801810BC); + +s32 func_801810F8(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181100); + +extern s32 func_800D1EBC(void); + void func_80181168(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018E7D4; + void func_80181188(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018E7D4, 0x1000000); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018E7D8; + +void func_801811B0(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018E7D8, 0x1000000); +} + + + +extern void (*D_8018E7E4[])(void); + +void func_801811D8(void *a0) { + D_8018E7E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181214); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018125C); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018E7DC; + void func_801812B0(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018E7DC, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801812D8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018136C); + + +extern void (*D_8018E7EC[])(void); + +void func_80181404(void *a0) { + D_8018E7EC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181440); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181528); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801815DC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181774); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801817A4); + +extern void (*D_80199DC0[])(void); + +void func_801817C4(void *a0) { + D_80199DC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181800); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181858); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181A2C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181A84); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181AD0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181B14); + +void func_80181B58(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181B60); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181BDC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181CA8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181D58); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181EA0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181EF4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80181F54); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182038); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801822A0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801823F0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018241C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182578); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801825C8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801825E4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801826A0); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_80199E78[]; + s32 func_801826F0(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80199E78[0], &D_80199E78[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018271C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801827EC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018282C); + + +extern u8 D_80078EC1; + s32 func_80182898(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + + +extern void (*D_80199EF8[])(void); + +void func_801828B0(void *a0) { + D_80199EF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801828EC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801829C4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182B08); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182C08); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80182CB4(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182CEC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182D18); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80182FCC); + +void func_8018300C(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0x4) &= 0x7FFFFFFF; + } + } + + +void func_8018302C(s32 arg0) { + if (arg0 != 0) { + M2C_FIELD(arg0, s32 *, 0x4) |= 0x80000000; + } + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018304C); + + +extern void (*D_8019A070[])(void); + +void func_801830F0(void *a0) { + D_8019A070[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018312C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801831E8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183318); + + +extern void (*D_8019A080[])(void); + +void func_801833F0(void *a0) { + D_8019A080[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018342C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801837C8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018383C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801839C0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183AF4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183B90); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183BCC(void *a0) { + *(s32 *)((char *)a0 + 0x1c) = 0x20; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 4); + } + + +extern void func_80178B18(s32 a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 D_8019C9F8; + +void func_80183BF4(void * arg0) { + func_80178B18((s32)arg0, (s32)&D_8019C9F8); + ((void (*)(s32, s32))func_8012AD44)(arg0, 5); +} + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183C30(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x6); + } + + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8019CA44[]; + +extern s32 func_80183D98(s32 a0); + +void func_80183C50(int param_1) +{ + D_8019CA44[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80183D98)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183CA0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183D54); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183D98); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183DEC); + + +extern void (*D_8019CA70[])(void); + +void func_80183F4C(void *a0) { + D_8019CA70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183F88); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80183FE8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801840F4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184200); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184240); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018428C); + +void func_80184314(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018431C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184574); + + +extern void (*D_8019CB14[])(void); + +void func_801845C8(void *a0) { + D_8019CB14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184604); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801846F0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801847B0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184800); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801848E8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184934); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80184D50); + +void func_80185270(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185278); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018529C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018533C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018536C); + +extern s32 D_801C0242; + void func_801853E4(s32 arg0) { + *(s16 *)((s32)&D_801C0242 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185400); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185458); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018552C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185568); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801855B4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185690); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185954); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185978); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801859A0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185A28); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185A94); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185B04); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185B7C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185BC8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185CE4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185D20); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80185E34); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80186118); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801863B0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80186538); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801869E4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80186B78); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80186F28); + + +extern void (*D_8019D68C[])(void); + +void func_80187014(void *a0) { + D_8019D68C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019D740[])(void); + +void func_80187050(void *a0) { + D_8019D740[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018708C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + *(u16 *)((s32)a0 + 0x5c) &= 0xc800; + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801870A4); + +void func_80187148(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187164); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801871E8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187224); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187254); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801872D8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018739C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018747C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801874EC); + +void func_801875C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801875D0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187688); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018774C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801877A0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018781C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187900); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801879CC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187AA4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187C28); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80187E4C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188200); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188440); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801886A8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188850); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188A9C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188BE8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188CA0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188DF4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188EA0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80188F50); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189038); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189154); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189234); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018930C); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_80189374(u8 *param_1) { + *(s16 *)(param_1 + 0xfe) = 0; + if (func_80153BD8((s32)param_1)) { + ((void (*)(u8 *))func_80153BF0)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801893B0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189454); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189514); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189548); + +extern s32 func_80153BD8(s32 arg); + extern s32 func_80153BF0(s32 a0); + void func_801895A4(void *a0) { + if (func_80153BD8((s32)a0)) { + ((void (*)(s32))func_80153BF0)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801895DC); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189638); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189710); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801897A4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189870); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189948); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_801899E4); + +void func_80189A3C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189A44); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189AE4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189B38); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189BCC); + + +extern s32 func_8012BEE8(s32 a0); + +void func_80189C14(int param_1) +{ + int iVar1; + + iVar1 = *(int *)(param_1 + 0x1c) - 1; + *(int *)(param_1 + 0x1c) = iVar1; + if (*(int *)(param_1 + 0x1c) == 0) { + *(short *)(param_1 + 2) = *(unsigned short *)(param_1 + 0x34); + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189C3C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189C88); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189D74); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189DF8); + +extern void func_8012CBCC(s32 a0); + void func_80189F04(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((s32)a0 + 2) = 2; + } + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189F3C); + + +extern void (*D_801BCC04[])(void); + +void func_80189FA8(void *a0) { + D_801BCC04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_80189FE4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A1D8); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A288); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A338); + +void func_8018A3E8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A3F0); + + +extern void (*D_801BCF4C[])(void); + +void func_8018A494(void *a0) { + D_801BCF4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A4D0); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A5A4); + +void func_8018A5CC(void) { +} + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A5D4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A720); + +extern void func_8012C218(void *a0); + void func_8018A840(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)a0 + 0xCC)); + } + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A86C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A87C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A88C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018A8CC(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A900); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A924); + + +extern void (*D_801BCF74[])(void); + +void func_8018A988(void *a0) { + D_801BCF74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018A9C4); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018AA4C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018AB0C); + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80178D40", func_8018AB7C); + + diff --git a/src/ov_SC03_105/ov_SC03_105_jr_801734BC.c b/src/ov_SC03_105/ov_SC03_105_jr_801734BC.c index 55e57337f..e55821a59 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_801734BC.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_801734BC.c @@ -3105,1447 +3105,3 @@ void func_80178D18(void) { D_801BCD1C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B95B4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B95B4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B95B4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B95B4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B95DC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B95DC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B9598; - -s32 func_8017A3B0(void) { - switch (D_801B9598) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B95D4; -extern short D_801B95D0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B95D4) { - case 0: - func_800D0CA0(1); - D_801B95D4 = D_801B95D4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B95D0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B95D4 = D_801B95D4 + 1; - if (D_801B95D4 < 0x1E) { - return 0; - } - D_801B95D4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B9614; - extern s16 D_801B9616; - extern s16 D_801B9618; - extern s16 D_801B960C; - extern s16 D_801B960E; - extern s16 D_801B9610; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9614, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9616, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9618, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B960C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B960E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9610, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B959C; -extern u16 D_801B961C; -extern u16 D_801B961E; -extern u16 D_801B9620; -extern s16 D_801BCCA8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BCCA8 = 0; - D_801B959C = 0; - D_801B961C = D_80126B5E; - D_801B961E = D_80126B62; - D_801B9620 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018DC88[]; - extern s16 D_801B9614; - extern s16 D_801B960C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018DC88[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018DC88[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9614; - s16 *p78C = &D_801B960C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BCCA8 = 1; - D_801B959C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B95BC; - extern SV4_8017B368 D_801B95C4; - extern s16 D_801B9614; - extern s16 D_801B960C; - extern u16 D_8018DC88; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B95BC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B95C4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018DC88)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018DC88)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B9614) = loc0; - (*(SV4_8017B368 *)&D_801B960C) = loc1; - D_801BCCA8 = 1; - D_801B959C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018DC88[]; - extern s16 D_801B9614; - extern s16 D_801B9616; - extern s16 D_801B9618; - extern s16 D_801B960C; - extern s16 D_801B960E; - extern s16 D_801B9610; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018DC88[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018DC88[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9614; - s16 *p78C = &D_801B960C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B9616; - v798 = D_801B9618; - v78C = *p78C; - v78E = D_801B960E; - v790 = D_801B9610; - __asm__ __volatile__(""); - D_801BCCA8 = 1; - D_801B959C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B959C; -extern s16 D_801B9614; -extern s16 D_801B9616; -extern s16 D_801B9618; -extern s16 D_801B960C; -extern s16 D_801B960E; -extern s16 D_801B9610; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B959C = 0; - D_801B9614 = (s16) D_80114F30; - D_801B9616 = (s16) D_80114F34; - D_801B9618 = (s16) D_80114F38; - D_801B960C = (s16) D_80114F24; - D_801B960E = (s16) D_80114F28; - D_801B9610 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B962C; -extern s16 D_801B962E; -extern s16 D_801B9630; -extern s16 D_801B9634; -extern s16 D_801B9636; -extern s16 D_801B9638; - -void func_8017B824(void) { - D_801B962C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B962E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B9630 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B9634 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B9636 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B9638 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B962C; -extern s16 D_801B962E; -extern s16 D_801B9630; -extern s16 D_801B9634; -extern s16 D_801B9636; -extern s16 D_801B9638; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B962C; - D_80114F34 = D_801B962E; - D_80114F38 = D_801B9630; - D_80114F24 = D_801B9634; - D_80114F28 = D_801B9636; - D_80114F2C = D_801B9638; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B9614), src[8..15] -> (*(S8_8017B8E8 *)&D_801B960C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B9614) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B960C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B961C; -extern u16 D_801B961E; -extern u16 D_801B9620; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B959C; -extern short D_801B9624; -extern short D_801B9626; -extern short D_801B9628; -extern s16 D_801B9614; -extern s16 D_801B9616; -extern s16 D_801B9618; -extern s16 D_801B960C; -extern s16 D_801B960E; -extern s16 D_801B9610; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B961C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B961E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9620); - (*(s16 *)&D_801B9624) = buf[0]; - (*(s16 *)&D_801B9626) = buf[1]; - (*(s16 *)&D_801B9628) = buf[2]; - D_801B9614 = D_80114F30 + buf[0]; - D_801B959C = 0; - D_801B9616 = D_80114F34 + buf[1]; - D_801B9618 = D_80114F38 + buf[2]; - D_801B960C = D_80114F24 + buf[0]; - D_801B960E = D_80114F28 + buf[1]; - D_801B9610 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B95BC; -extern SV4 D_801B95C4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B95C4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B95BC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B95C4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B95C4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B95BC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B95C4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B95E4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B95E4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B959C; -extern s16 D_801BCCA8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B959C = D_801B959C + 1; - if (D_801B959C >= 0x1F) { - D_801BCCA8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B959C; -extern s16 D_801BCCA8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B959C = D_801B959C + 1; - if (0x18 < D_801B959C) { - func_8012A4BC(); - D_801BCCA8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B959C; -extern void (*D_801B95E0)(void); -extern short D_801B9624; -extern short D_801B9626; -extern short D_801B9628; -extern s16 D_801BCCA8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B959C = D_801B959C + 1; - if (D_801B959C >= 0x19) { - if (D_801B95E0 != 0) { - (*D_801B95E0)(); - } else { - D_80114F30 = D_80114F30 + D_801B9624; - D_80114F34 = D_80114F34 + D_801B9626; - D_80114F38 = D_80114F38 + D_801B9628; - D_80114F24 = D_80114F24 + D_801B9624; - D_80114F28 = D_80114F28 + D_801B9626; - D_80114F2C = D_80114F2C + D_801B9628; - func_8012A4BC(); - } - D_801BCCA8 = 0; - } -} - - - -extern void (*D_8018DD28[])(void); - -void func_8017BE60(void *a0) { - D_8018DD28[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017C068); - - -extern void (*D_8018DD88[])(void); - -void func_8017C114(void *a0) { - D_8018DD88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017C8D0); - - -extern void (*D_8018DD90[])(void); - -void func_8017D7B0(void *a0) { - D_8018DD90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017D7EC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017D994); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017DB28); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017DDE0); - - -extern void (*D_8018DE2C[])(void); - -void func_8017DE20(void *a0) { - D_8018DE2C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017DE5C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DEA0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018DE34[])(void); - -void func_8017DEC4(void *a0) { - D_8018DE34[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017DF00); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017DF40); - -extern void func_800D1EBC(void); - void func_8017DFEC(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E00C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E034); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E05C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E08C); - - -extern void (*D_8018DE58[])(void); - -void func_8017E134(void *a0) { - D_8018DE58[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E170); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E180); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E33C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E4D4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E5C8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E67C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E6C0); - - -extern void (*D_8018DED0[])(void); - -void func_8017E758(void *a0) { - D_8018DED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E794); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017E7E8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EA24); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EB08); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EBA8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EBF8); - - -extern void (*D_8018E12C[])(void); - -void func_8017EC5C(void *a0) { - D_8018E12C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EC98); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EE34); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017EF94); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F018); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F0C8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F140); - - -extern void (*D_8018E258[])(void); - -void func_8017F1F8(void *a0) { - D_8018E258[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F234); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F55C); - -void func_8017F864(void) { -} - -void func_8017F86C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F874); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017F8D8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FA90); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FAE8); - - -extern void (*D_8018E270[])(void); - -void func_8017FBAC(void *a0) { - D_8018E270[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FBE8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FC74); - - -extern void (*D_8018E278[])(void); - -void func_8017FCF0(void *a0) { - D_8018E278[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FD2C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FDB8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FEA8); - - -extern void (*D_8018E280[])(void); - -void func_8017FF54(void *a0) { - D_8018E280[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FF90); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8017FFEC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80180030); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801800C0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80180100); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801801F8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801802B0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801802E0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801803A0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801806F8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80180ABC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80180EC0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801813BC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801818E8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80181C84); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80182220); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018226C); - -void func_80182334(void) { -} - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018233C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801824CC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801829CC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80182BD8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80182DCC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183174); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801831E0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801834A4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018364C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018373C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183768); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018383C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018388C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801839A4); - -s32 func_80183A64(s32 *a0, s32 a1, s32 a2) { - s32 v1 = a0[0x4 / 4]; - if (a1 < v1) { - a0[0x4 / 4] = a1; - return 1; - } - if (v1 < a2) { - a0[0x4 / 4] = a2; - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183A98); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183C20); - -extern s32 ratan2(s32 dx, s32 dy); - s32 func_80183C6C(void * arg0, void * arg1) { - return ((s32 (*)(s32, s32))ratan2)( - *(s16 *)((u8 *)arg1 + 0x2) - *(s16 *)((u8 *)arg0 + 0x2), - *(s16 *)((u8 *)arg1 + 0x0) - *(s16 *)((u8 *)arg0 + 0x0) - ) - 0x400 & 0xFFF; - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183CA4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183D38); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183DA0); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80183EE8(void) { - func_8002D4C8(0x4, 0x730); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183F0C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80183F84); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018423C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801843DC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184458); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184500); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184604); - - -extern void (*D_8018E8DC[])(void); - -void func_8018465C(void *a0) { - D_8018E8DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184698); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184738); - -void func_801847B0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801847B8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801848A4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184A60); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184B50); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184CA8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184E74); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184F5C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80184FBC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801850D8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801851E0); - -extern void func_80016714(void *a0, s32 a1); - void func_80185218(void *arg0) { - ((void (*)(s32, s32))func_80016714)((s32)arg0, 0x5C); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185238); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018526C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185380); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185480); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185628); - -void func_80185660(s32 *a0, s32 *a1, s32 a2) { - *(s32 *)((s32)a1 + 0x0) = a2; - *(s32 *)((s32)a0 + 0x24) = a2; - *(s16 *)((s32)a1 + 0x4) = 0; - *(s16 *)((s32)a1 + 0x6) = *(u8 *)a2 & 0x3F; - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185680); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018574C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185810); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80185FB4); - - -extern void (*D_8018F114[])(void); - -void func_80186094(void *a0) { - D_8018F114[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801860D0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801861DC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018624C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80186680); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018676C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801867D0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80186AE8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80186B24); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80186D54); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80186DDC); - -void func_80187038(void) { -} - -extern s32 func_801896EC(s32 arg); - void func_80187040(void) { - func_801896EC(0x2); - } - - -extern void func_80189718(void); - void func_80187060(void) { - func_80189718(); - } - - -extern s32 func_8012C588(s32 a0, s32 a1); - void func_80187080(void *a0) { - *(s32 *)((u8 *)a0 + 0xd0) = ((s32 (*)(s32, void *))func_8012C588)(0x217, a0); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801870B4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801870E8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801871C0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801873C8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187434); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801874D0); - - -extern s32 func_80187540(void *a0); - s32 func_80187540(void *a0) { - return *(s16 *)((char *)a0 + 0xfe) == 0x2; - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187554); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187668); - - -extern void (*D_8018F148[])(void); - -void func_8018774C(void *a0) { - D_8018F148[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern void (*D_8018F14C[])(void); - -void func_80187788(void *a0) { - D_8018F14C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801877C4); - -void func_80187844(void) { -} - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018784C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187890); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187928); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187A30); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80187F7C); - - -extern void (*D_8018F19C[])(void); - -void func_80188040(void *a0) { - D_8018F19C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018807C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188114); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018842C); - - -extern void (*D_8018F1A4[])(void); - -void func_801884D4(void *a0) { - D_8018F1A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188510); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018854C(u8 *a0) { - *(s8 *)(a0 + 0xFC) = 0x8; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188574); - - -extern void (*D_8018F1AC[])(void); - -void func_80188650(void *a0) { - D_8018F1AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018F248[])(void); - -void func_8018868C(void *a0) { - D_8018F248[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801886C8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188828); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801889D4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188A94); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188B64); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188BA8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188C34); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188D10); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188D88); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188EAC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80188FA4); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189074); - -extern void func_8013B7F4(s32 arg0, s32 arg1); -extern s32 D_8018F2F0[]; - -void func_801890C8(s32 param_1) -{ - func_8013B7F4(D_8018F2F0[param_1], 0); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801890F8); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189118); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189254); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801892B4); - - -extern void (*D_8018F314[])(void); - -void func_801892CC(void *a0) { - D_8018F314[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189308); - - -// @class: plumbing -// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(int, int); -extern int D_8018F304; - -void func_80189350(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - func_8001C214(v0, 0); - *(int *)(param_1 + 0x58) = (int)&D_8018F304; - *(short *)(param_1 + 0x5c) = 0x80; - *(unsigned short *)(param_1 + 2) += 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801893BC); - - -extern void (*D_8018F490[])(void); - -void func_80189418(void *a0) { - D_8018F490[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189454); - -extern s32 func_80189694(void); - void func_80189654(void) { - func_80189694(); - } - - -extern void func_80146C3C(void); - void func_80189674(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189694); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_801896EC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189718); - - -extern void (*D_801B68D0[])(void); - -void func_8018975C(void *a0) { - D_801B68D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189798); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018998C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189A3C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189AEC); - -void func_80189B9C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189BA4); - - -extern void (*D_801B68E8[])(void); - -void func_80189C48(void *a0) { - D_801B68E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189C84); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189CFC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189DAC); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189E64); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189F24); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_80189FF0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018A1F0); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801734BC", func_8018A278); - diff --git a/src/ov_SC03_105/ov_SC03_105_jr_80178D40.c b/src/ov_SC03_105/ov_SC03_105_jr_80178D40.c new file mode 100644 index 000000000..77f93a0a2 --- /dev/null +++ b/src/ov_SC03_105/ov_SC03_105_jr_80178D40.c @@ -0,0 +1,4914 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018D530[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B8908; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018D524[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018D568[]; +extern unsigned short D_8018D570[]; +extern unsigned short D_8018D578[]; +extern unsigned char D_801B8910[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B8908; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018D580[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B8A44; +extern M2C_UNK D_801B8A48; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B89D0; +extern void (*D_8018D5B0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B8A4C[]; +extern u8 D_801B8A54[]; +extern u8 D_801B8A04[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018D5B8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018D5D4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018D5DC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018D644[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018D5E8; +extern u8 D_8018D5F4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018D678[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018D680[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018D6D4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018D708[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018D6F8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018D724; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018D79C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018D7A4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018D7AC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018D7B4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018D7BC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018D7C4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018D7D0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018D7DC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018D7E8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018D7F8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018D808[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018D810[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018D818[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018D820[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018D828[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018D830[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018D838[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018D840[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018D848[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018D850[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018D858[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018D860[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018D868[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018D870[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018D878[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018D880[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018D888[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018D890[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018D898[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018D8A0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018D8A8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018D8B0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018D8B8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018D8FC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018D8C0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018D92C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018D968[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018D9C0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018D9D0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018D9D8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018DB40[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018DB4C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B7D00; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BCCA8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B9188; +extern short D_801BCD1C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BCD1C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BCD1C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B9188 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BCD1C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801BCC78 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801BCC78 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BCD1C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BCD1C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B95E4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B918C; + extern s32 D_801B95A0; + extern s16 D_801B95A4; + extern s16 D_801B95A8; + extern s16 D_801B95AC; + extern s16 D_801B95B0; + extern s32 D_801B95B8; + extern s32 D_801B95BC; + extern s32 D_801B95CC; + extern s16 D_801B95D0; + extern s16 D_801B95D4; + extern s32 D_801B95D8; + extern s32 D_801B95E0; + extern s32 D_801B95E4[10]; + extern s32 D_801BCBB8; + extern s16 D_801BCC78; + extern s32 D_801BCCA4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801BCC78; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B95A0); + D_801B95A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B95AC, D_801B95B0 ? 0x48 : 0x40); + (*(s16*)&D_801BCD1C) = 2; + break; + case 0: + func_80179B28(D_801B95A0); + D_801B95A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B95A4, D_801B95A8 ? 0x48 : 0x40); + (*(s16*)&D_801BCD1C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801BCBB8 != 0) { + func_80179B28(D_801B95A0); + D_801B95A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B95A4, D_801B95A8 ? 0x48 : 0x40); + (*(s16*)&D_801BCD1C) = 1; + } else { + (*(s16*)&D_801BCD1C) = 3; + } + break; + case 0x32: + func_80179B28(D_801B95A0); + D_801B95A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B95A4, + D_801B95A8 ? 0x48 : 0x40); + (*(s16*)&D_801BCD1C) = 1; + break; + case 2: + func_80179B28(D_801B95A0); + if (D_801B95B8 != 0) { + D_801B9188 = D_801B95B8; + D_801B95B8 = 0; + (*(s16*)&D_801BCD1C) = 3; + return; + } + (*(s16*)&D_801BCD1C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BCD1C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BCD1C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BCD1C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x1B: + D_801B95D8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BCD1C) = 4; + D_801B918C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BCD1C) = 5; + D_801B95CC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B95CC = (s32)func_8017A3B0; + (*(s16*)&D_801BCD1C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x24: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BCD1C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BCD1C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BCD1C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BCD1C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BCD1C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BCD1C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BCD1C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B95BC); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B95BC); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B95BC); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B95BC); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x4E: + D_801B95E0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x2B: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BCD1C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BCCA4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x34: + (*(s16*)&D_801BCD1C) = 3; + D_801B9188 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B95B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BCD1C) = 3; + D_801B9188 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BCD1C) = 3; + D_801B9188 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B9188 = *(s32 *)(D_801B9188 + 4); + return; + case 0x37: + (*(s16*)&D_801BCD1C) = 3; + D_801B95A4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B95A8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BCD1C) = 3; + D_801B95AC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B95B0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BCD1C) = 3; + D_801B95A4 = w1; + D_801B95A8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BCD1C) = 3; + D_801B95AC = w2; + D_801B95B0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x43: + D_801B95CC = (s32)func_8017A3D8; + D_801B95D4 = 0; + (*(s16*)&D_801BCD1C) = 5; + D_801B95D0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BCD1C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BCD1C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B95E4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BCD1C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B95E4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BCD1C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B95E4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BCD1C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B95E4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BCD1C) = 3; + break; + default: + break; + } +Lend: + D_801B9188 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B95B4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B95B4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B95B4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B95B4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B95DC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B95DC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B9598; + +s32 func_8017A3B0(void) { + switch (D_801B9598) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B95D4; +extern short D_801B95D0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B95D4) { + case 0: + func_800D0CA0(1); + D_801B95D4 = D_801B95D4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B95D0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B95D4 = D_801B95D4 + 1; + if (D_801B95D4 < 0x1E) { + return 0; + } + D_801B95D4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B9614; + extern s16 D_801B9616; + extern s16 D_801B9618; + extern s16 D_801B960C; + extern s16 D_801B960E; + extern s16 D_801B9610; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9614, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9616, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9618, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B960C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B960E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9610, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B959C; +extern u16 D_801B961C; +extern u16 D_801B961E; +extern u16 D_801B9620; +extern s16 D_801BCCA8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BCCA8 = 0; + D_801B959C = 0; + D_801B961C = D_80126B5E; + D_801B961E = D_80126B62; + D_801B9620 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018DC88[]; + extern s16 D_801B9614; + extern s16 D_801B960C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018DC88[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018DC88[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9614; + s16 *p78C = &D_801B960C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BCCA8 = 1; + D_801B959C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B95BC; + extern SV4_8017B368 D_801B95C4; + extern s16 D_801B9614; + extern s16 D_801B960C; + extern u16 D_8018DC88; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B95BC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B95C4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018DC88)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018DC88)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B9614) = loc0; + (*(SV4_8017B368 *)&D_801B960C) = loc1; + D_801BCCA8 = 1; + D_801B959C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018DC88[]; + extern s16 D_801B9614; + extern s16 D_801B9616; + extern s16 D_801B9618; + extern s16 D_801B960C; + extern s16 D_801B960E; + extern s16 D_801B9610; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018DC88[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018DC88[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9614; + s16 *p78C = &D_801B960C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B9616; + v798 = D_801B9618; + v78C = *p78C; + v78E = D_801B960E; + v790 = D_801B9610; + __asm__ __volatile__(""); + D_801BCCA8 = 1; + D_801B959C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B959C; +extern s16 D_801B9614; +extern s16 D_801B9616; +extern s16 D_801B9618; +extern s16 D_801B960C; +extern s16 D_801B960E; +extern s16 D_801B9610; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B959C = 0; + D_801B9614 = (s16) D_80114F30; + D_801B9616 = (s16) D_80114F34; + D_801B9618 = (s16) D_80114F38; + D_801B960C = (s16) D_80114F24; + D_801B960E = (s16) D_80114F28; + D_801B9610 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B962C; +extern s16 D_801B962E; +extern s16 D_801B9630; +extern s16 D_801B9634; +extern s16 D_801B9636; +extern s16 D_801B9638; + +void func_8017B824(void) { + D_801B962C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B962E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B9630 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B9634 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B9636 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B9638 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B962C; +extern s16 D_801B962E; +extern s16 D_801B9630; +extern s16 D_801B9634; +extern s16 D_801B9636; +extern s16 D_801B9638; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B962C; + D_80114F34 = D_801B962E; + D_80114F38 = D_801B9630; + D_80114F24 = D_801B9634; + D_80114F28 = D_801B9636; + D_80114F2C = D_801B9638; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B9614), src[8..15] -> (*(S8_8017B8E8 *)&D_801B960C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B9614) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B960C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B961C; +extern u16 D_801B961E; +extern u16 D_801B9620; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B959C; +extern short D_801B9624; +extern short D_801B9626; +extern short D_801B9628; +extern s16 D_801B9614; +extern s16 D_801B9616; +extern s16 D_801B9618; +extern s16 D_801B960C; +extern s16 D_801B960E; +extern s16 D_801B9610; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B961C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B961E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9620); + (*(s16 *)&D_801B9624) = buf[0]; + (*(s16 *)&D_801B9626) = buf[1]; + (*(s16 *)&D_801B9628) = buf[2]; + D_801B9614 = D_80114F30 + buf[0]; + D_801B959C = 0; + D_801B9616 = D_80114F34 + buf[1]; + D_801B9618 = D_80114F38 + buf[2]; + D_801B960C = D_80114F24 + buf[0]; + D_801B960E = D_80114F28 + buf[1]; + D_801B9610 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B95BC; +extern SV4 D_801B95C4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B95C4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B95BC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B95C4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B95C4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B95BC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B95C4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B95E4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B95E4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B959C; +extern s16 D_801BCCA8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B959C = D_801B959C + 1; + if (D_801B959C >= 0x1F) { + D_801BCCA8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B959C; +extern s16 D_801BCCA8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B959C = D_801B959C + 1; + if (0x18 < D_801B959C) { + func_8012A4BC(); + D_801BCCA8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B959C; +extern void (*D_801B95E0)(void); +extern short D_801B9624; +extern short D_801B9626; +extern short D_801B9628; +extern s16 D_801BCCA8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B959C = D_801B959C + 1; + if (D_801B959C >= 0x19) { + if (D_801B95E0 != 0) { + (*D_801B95E0)(); + } else { + D_80114F30 = D_80114F30 + D_801B9624; + D_80114F34 = D_80114F34 + D_801B9626; + D_80114F38 = D_80114F38 + D_801B9628; + D_80114F24 = D_80114F24 + D_801B9624; + D_80114F28 = D_80114F28 + D_801B9626; + D_80114F2C = D_80114F2C + D_801B9628; + func_8012A4BC(); + } + D_801BCCA8 = 0; + } +} + + + +extern void (*D_8018DD28[])(void); + +void func_8017BE60(void *a0) { + D_8018DD28[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017C068); + + +extern void (*D_8018DD88[])(void); + +void func_8017C114(void *a0) { + D_8018DD88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017C8D0); + + +extern void (*D_8018DD90[])(void); + +void func_8017D7B0(void *a0) { + D_8018DD90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017D7EC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017D994); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017DB28); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017DDE0); + + +extern void (*D_8018DE2C[])(void); + +void func_8017DE20(void *a0) { + D_8018DE2C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017DE5C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DEA0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018DE34[])(void); + +void func_8017DEC4(void *a0) { + D_8018DE34[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017DF00); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017DF40); + +extern void func_800D1EBC(void); + void func_8017DFEC(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E00C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E034); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E05C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E08C); + + +extern void (*D_8018DE58[])(void); + +void func_8017E134(void *a0) { + D_8018DE58[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E170); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E180); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E33C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E4D4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E5C8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E67C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E6C0); + + +extern void (*D_8018DED0[])(void); + +void func_8017E758(void *a0) { + D_8018DED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E794); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017E7E8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EA24); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EB08); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EBA8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EBF8); + + +extern void (*D_8018E12C[])(void); + +void func_8017EC5C(void *a0) { + D_8018E12C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EC98); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EE34); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017EF94); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F018); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F0C8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F140); + + +extern void (*D_8018E258[])(void); + +void func_8017F1F8(void *a0) { + D_8018E258[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F234); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F55C); + +void func_8017F864(void) { +} + +void func_8017F86C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F874); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017F8D8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FA90); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FAE8); + + +extern void (*D_8018E270[])(void); + +void func_8017FBAC(void *a0) { + D_8018E270[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FBE8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FC74); + + +extern void (*D_8018E278[])(void); + +void func_8017FCF0(void *a0) { + D_8018E278[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FD2C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FDB8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FEA8); + + +extern void (*D_8018E280[])(void); + +void func_8017FF54(void *a0) { + D_8018E280[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FF90); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8017FFEC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80180030); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801800C0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80180100); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801801F8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801802B0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801802E0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801803A0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801806F8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80180ABC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80180EC0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801813BC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801818E8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80181C84); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80182220); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018226C); + +void func_80182334(void) { +} + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018233C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801824CC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801829CC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80182BD8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80182DCC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183174); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801831E0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801834A4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018364C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018373C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183768); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018383C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018388C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801839A4); + +s32 func_80183A64(s32 *a0, s32 a1, s32 a2) { + s32 v1 = a0[0x4 / 4]; + if (a1 < v1) { + a0[0x4 / 4] = a1; + return 1; + } + if (v1 < a2) { + a0[0x4 / 4] = a2; + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183A98); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183C20); + +extern s32 ratan2(s32 dx, s32 dy); + s32 func_80183C6C(void * arg0, void * arg1) { + return ((s32 (*)(s32, s32))ratan2)( + *(s16 *)((u8 *)arg1 + 0x2) - *(s16 *)((u8 *)arg0 + 0x2), + *(s16 *)((u8 *)arg1 + 0x0) - *(s16 *)((u8 *)arg0 + 0x0) + ) - 0x400 & 0xFFF; + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183CA4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183D38); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183DA0); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80183EE8(void) { + func_8002D4C8(0x4, 0x730); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183F0C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80183F84); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018423C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801843DC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184458); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184500); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184604); + + +extern void (*D_8018E8DC[])(void); + +void func_8018465C(void *a0) { + D_8018E8DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184698); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184738); + +void func_801847B0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801847B8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801848A4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184A60); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184B50); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184CA8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184E74); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184F5C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80184FBC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801850D8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801851E0); + +extern void func_80016714(void *a0, s32 a1); + void func_80185218(void *arg0) { + ((void (*)(s32, s32))func_80016714)((s32)arg0, 0x5C); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185238); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018526C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185380); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185480); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185628); + +void func_80185660(s32 *a0, s32 *a1, s32 a2) { + *(s32 *)((s32)a1 + 0x0) = a2; + *(s32 *)((s32)a0 + 0x24) = a2; + *(s16 *)((s32)a1 + 0x4) = 0; + *(s16 *)((s32)a1 + 0x6) = *(u8 *)a2 & 0x3F; + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185680); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018574C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185810); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80185FB4); + + +extern void (*D_8018F114[])(void); + +void func_80186094(void *a0) { + D_8018F114[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801860D0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801861DC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018624C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80186680); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018676C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801867D0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80186AE8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80186B24); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80186D54); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80186DDC); + +void func_80187038(void) { +} + +extern s32 func_801896EC(s32 arg); + void func_80187040(void) { + func_801896EC(0x2); + } + + +extern void func_80189718(void); + void func_80187060(void) { + func_80189718(); + } + + +extern s32 func_8012C588(s32 a0, s32 a1); + void func_80187080(void *a0) { + *(s32 *)((u8 *)a0 + 0xd0) = ((s32 (*)(s32, void *))func_8012C588)(0x217, a0); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801870B4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801870E8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801871C0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801873C8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187434); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801874D0); + + +extern s32 func_80187540(void *a0); + s32 func_80187540(void *a0) { + return *(s16 *)((char *)a0 + 0xfe) == 0x2; + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187554); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187668); + + +extern void (*D_8018F148[])(void); + +void func_8018774C(void *a0) { + D_8018F148[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern void (*D_8018F14C[])(void); + +void func_80187788(void *a0) { + D_8018F14C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801877C4); + +void func_80187844(void) { +} + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018784C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187890); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187928); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187A30); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80187F7C); + + +extern void (*D_8018F19C[])(void); + +void func_80188040(void *a0) { + D_8018F19C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018807C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188114); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018842C); + + +extern void (*D_8018F1A4[])(void); + +void func_801884D4(void *a0) { + D_8018F1A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188510); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018854C(u8 *a0) { + *(s8 *)(a0 + 0xFC) = 0x8; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188574); + + +extern void (*D_8018F1AC[])(void); + +void func_80188650(void *a0) { + D_8018F1AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018F248[])(void); + +void func_8018868C(void *a0) { + D_8018F248[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801886C8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188828); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801889D4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188A94); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188B64); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188BA8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188C34); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188D10); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188D88); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188EAC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80188FA4); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189074); + +extern void func_8013B7F4(s32 arg0, s32 arg1); +extern s32 D_8018F2F0[]; + +void func_801890C8(s32 param_1) +{ + func_8013B7F4(D_8018F2F0[param_1], 0); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801890F8); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189118); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189254); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801892B4); + + +extern void (*D_8018F314[])(void); + +void func_801892CC(void *a0) { + D_8018F314[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189308); + + +// @class: plumbing +// @stuck: none — MATCH expected; simple if/else, param saved in $s0 across call + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(int, int); +extern int D_8018F304; + +void func_80189350(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + func_8001C214(v0, 0); + *(int *)(param_1 + 0x58) = (int)&D_8018F304; + *(short *)(param_1 + 0x5c) = 0x80; + *(unsigned short *)(param_1 + 2) += 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801893BC); + + +extern void (*D_8018F490[])(void); + +void func_80189418(void *a0) { + D_8018F490[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189454); + +extern s32 func_80189694(void); + void func_80189654(void) { + func_80189694(); + } + + +extern void func_80146C3C(void); + void func_80189674(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189694); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_801896EC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189718); + + +extern void (*D_801B68D0[])(void); + +void func_8018975C(void *a0) { + D_801B68D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189798); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018998C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189A3C); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189AEC); + +void func_80189B9C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189BA4); + + +extern void (*D_801B68E8[])(void); + +void func_80189C48(void *a0) { + D_801B68E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189C84); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189CFC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189DAC); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189E64); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189F24); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_80189FF0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018A1F0); + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80178D40", func_8018A278); + + diff --git a/src/ov_SC03_108/ov_SC03_108_jr_801734BC.c b/src/ov_SC03_108/ov_SC03_108_jr_801734BC.c index cadb391a9..eefb5b8e9 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_801734BC.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_801734BC.c @@ -3105,967 +3105,3 @@ void func_80178D18(void) { D_801A1AA4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A18A4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A18A4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A18A4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A18A4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A18CC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A18CC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A1888; - -s32 func_8017A3B0(void) { - switch (D_801A1888) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A18C4; -extern short D_801A18C0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A18C4) { - case 0: - func_800D0CA0(1); - D_801A18C4 = D_801A18C4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A18C0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A18C4 = D_801A18C4 + 1; - if (D_801A18C4 < 0x1E) { - return 0; - } - D_801A18C4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A1904; - extern s16 D_801A1906; - extern s16 D_801A1908; - extern s16 D_801A18FC; - extern s16 D_801A18FE; - extern s16 D_801A1900; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1904, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1906, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1908, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A18FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A18FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1900, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A188C; -extern u16 D_801A190C; -extern u16 D_801A190E; -extern u16 D_801A1910; -extern s16 D_801A1A30; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A1A30 = 0; - D_801A188C = 0; - D_801A190C = D_80126B5E; - D_801A190E = D_80126B62; - D_801A1910 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801845E0[]; - extern s16 D_801A1904; - extern s16 D_801A18FC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801845E0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801845E0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1904; - s16 *p78C = &D_801A18FC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A1A30 = 1; - D_801A188C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A18AC; - extern SV4_8017B368 D_801A18B4; - extern s16 D_801A1904; - extern s16 D_801A18FC; - extern u16 D_801845E0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A18AC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A18B4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801845E0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801845E0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A1904) = loc0; - (*(SV4_8017B368 *)&D_801A18FC) = loc1; - D_801A1A30 = 1; - D_801A188C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801845E0[]; - extern s16 D_801A1904; - extern s16 D_801A1906; - extern s16 D_801A1908; - extern s16 D_801A18FC; - extern s16 D_801A18FE; - extern s16 D_801A1900; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801845E0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801845E0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1904; - s16 *p78C = &D_801A18FC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A1906; - v798 = D_801A1908; - v78C = *p78C; - v78E = D_801A18FE; - v790 = D_801A1900; - __asm__ __volatile__(""); - D_801A1A30 = 1; - D_801A188C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A188C; -extern s16 D_801A1904; -extern s16 D_801A1906; -extern s16 D_801A1908; -extern s16 D_801A18FC; -extern s16 D_801A18FE; -extern s16 D_801A1900; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A188C = 0; - D_801A1904 = (s16) D_80114F30; - D_801A1906 = (s16) D_80114F34; - D_801A1908 = (s16) D_80114F38; - D_801A18FC = (s16) D_80114F24; - D_801A18FE = (s16) D_80114F28; - D_801A1900 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A191C; -extern s16 D_801A191E; -extern s16 D_801A1920; -extern s16 D_801A1924; -extern s16 D_801A1926; -extern s16 D_801A1928; - -void func_8017B824(void) { - D_801A191C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A191E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A1920 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A1924 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A1926 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A1928 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A191C; -extern s16 D_801A191E; -extern s16 D_801A1920; -extern s16 D_801A1924; -extern s16 D_801A1926; -extern s16 D_801A1928; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A191C; - D_80114F34 = D_801A191E; - D_80114F38 = D_801A1920; - D_80114F24 = D_801A1924; - D_80114F28 = D_801A1926; - D_80114F2C = D_801A1928; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A1904), src[8..15] -> (*(S8_8017B8E8 *)&D_801A18FC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A1904) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A18FC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A190C; -extern u16 D_801A190E; -extern u16 D_801A1910; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A188C; -extern short D_801A1914; -extern short D_801A1916; -extern short D_801A1918; -extern s16 D_801A1904; -extern s16 D_801A1906; -extern s16 D_801A1908; -extern s16 D_801A18FC; -extern s16 D_801A18FE; -extern s16 D_801A1900; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A190C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A190E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1910); - (*(s16 *)&D_801A1914) = buf[0]; - (*(s16 *)&D_801A1916) = buf[1]; - (*(s16 *)&D_801A1918) = buf[2]; - D_801A1904 = D_80114F30 + buf[0]; - D_801A188C = 0; - D_801A1906 = D_80114F34 + buf[1]; - D_801A1908 = D_80114F38 + buf[2]; - D_801A18FC = D_80114F24 + buf[0]; - D_801A18FE = D_80114F28 + buf[1]; - D_801A1900 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A18AC; -extern SV4 D_801A18B4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A18B4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A18AC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A18B4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A18B4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A18AC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A18B4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A18D4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A18D4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A188C; -extern s16 D_801A1A30; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A188C = D_801A188C + 1; - if (D_801A188C >= 0x1F) { - D_801A1A30 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A188C; -extern s16 D_801A1A30; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A188C = D_801A188C + 1; - if (0x18 < D_801A188C) { - func_8012A4BC(); - D_801A1A30 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A188C; -extern void (*D_801A18D0)(void); -extern short D_801A1914; -extern short D_801A1916; -extern short D_801A1918; -extern s16 D_801A1A30; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A188C = D_801A188C + 1; - if (D_801A188C >= 0x19) { - if (D_801A18D0 != 0) { - (*D_801A18D0)(); - } else { - D_80114F30 = D_80114F30 + D_801A1914; - D_80114F34 = D_80114F34 + D_801A1916; - D_80114F38 = D_80114F38 + D_801A1918; - D_80114F24 = D_80114F24 + D_801A1914; - D_80114F28 = D_80114F28 + D_801A1916; - D_80114F2C = D_80114F2C + D_801A1918; - func_8012A4BC(); - } - D_801A1A30 = 0; - } -} - - - -extern void (*D_80184680[])(void); - -void func_8017BE60(void *a0) { - D_80184680[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017BEBC); - - -extern void (*D_801846DC[])(void); - -void func_8017CD9C(void *a0) { - D_801846DC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CE40); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CE80(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CEFC); - - -extern void (*D_801846F0[])(void); - -void func_8017CF1C(void *a0) { - D_801846F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CF58); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CFCC); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017CFF4); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D01C); - - -extern void (*D_8018471C[])(void); - -void func_8017D0D4(void *a0) { - D_8018471C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D2B8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D484); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D5F4); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D6AC); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D764); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D898); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D8E8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017D96C); - - -extern void (*D_801847C0[])(void); - -void func_8017DAD0(void *a0) { - D_801847C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017DB0C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017DD44); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017DDDC); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017DF10); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017DFE8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E128); - - -extern void (*D_801847D8[])(void); - -void func_8017E240(void *a0) { - D_801847D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E27C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E3F8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E508); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E71C); - - -extern void (*D_80184868[])(void); - -void func_8017E984(void *a0) { - D_80184868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017E9C0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017EA44); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017EB38); - - -s32 func_8017EB98(void) { - return 73; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017EBA0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017EC04); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017ED64); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017EF48); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F004); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F0B0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F140); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F29C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F2E8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F640); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F788); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017F83C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FBD8); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FC3C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FD08); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FD64); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FEE4); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8017FFD0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_801802E0); - -extern void func_80180764(s32 *a0); - extern s32 func_801809A0(s32 a0); - void func_8018032C(s32 *a0) { - func_80180764(a0); - func_801809A0((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8018035C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_801803E0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_80180764); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_801807C8); - - -void func_80180814(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s32 *)((s32)a0 + 0x1C) = 0x1E; - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s16 *)(v1 + 0x10) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8018082C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_8018087C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_801808B4); - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C098(void); - void func_80180968(s32 param_1) { - ((void (*)(s32 *, s32))func_80016714)(*(s32 *)(param_1 + 0xd0), 0x38); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_801809A0); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_80180A84); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_801734BC", func_80180B7C); - diff --git a/src/ov_SC03_108/ov_SC03_108_jr_80178D40.c b/src/ov_SC03_108/ov_SC03_108_jr_80178D40.c new file mode 100644 index 000000000..875739967 --- /dev/null +++ b/src/ov_SC03_108/ov_SC03_108_jr_80178D40.c @@ -0,0 +1,4434 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183E88[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A0BF8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80183E7C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183EC0[]; +extern unsigned short D_80183EC8[]; +extern unsigned short D_80183ED0[]; +extern unsigned char D_801A0C00[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A0BF8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183ED8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0D34; +extern M2C_UNK D_801A0D38; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0CC0; +extern void (*D_80183F08[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A0D3C[]; +extern u8 D_801A0D44[]; +extern u8 D_801A0CF4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80183F10[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183F2C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80183F34[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183F9C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183F40; +extern u8 D_80183F4C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183FD0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183FD8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018402C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80184060[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80184050[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018407C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801840F4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801840FC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80184104[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018410C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80184114[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018411C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80184128[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80184134[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80184140[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80184160[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80184168[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80184170[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80184178[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184180[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80184188[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184190[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80184198[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801841A0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801841A8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801841B0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801841B8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801841C0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801841C8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801841D0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801841D8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801841E0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801841E8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801841F0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801841F8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184200[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80184208[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80184210[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80184254[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80184218; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184284[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801842C0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80184318[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80184328[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80184330[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184498[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801844A4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A0208; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A1A30; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A1478; +extern short D_801A1AA4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A1AA4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A1AA4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A1478 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A1AA4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A1A00 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A1A00 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A1AA4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A1AA4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A18D4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A147C; + extern s32 D_801A1890; + extern s16 D_801A1894; + extern s16 D_801A1898; + extern s16 D_801A189C; + extern s16 D_801A18A0; + extern s32 D_801A18A8; + extern s32 D_801A18AC; + extern s32 D_801A18BC; + extern s16 D_801A18C0; + extern s16 D_801A18C4; + extern s32 D_801A18C8; + extern s32 D_801A18D0; + extern s32 D_801A18D4[10]; + extern s32 D_801A1948; + extern s16 D_801A1A00; + extern s32 D_801A1A2C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A1A00; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A1890); + D_801A1890 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A189C, D_801A18A0 ? 0x48 : 0x40); + (*(s16*)&D_801A1AA4) = 2; + break; + case 0: + func_80179B28(D_801A1890); + D_801A1890 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A1894, D_801A1898 ? 0x48 : 0x40); + (*(s16*)&D_801A1AA4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A1948 != 0) { + func_80179B28(D_801A1890); + D_801A1890 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A1894, D_801A1898 ? 0x48 : 0x40); + (*(s16*)&D_801A1AA4) = 1; + } else { + (*(s16*)&D_801A1AA4) = 3; + } + break; + case 0x32: + func_80179B28(D_801A1890); + D_801A1890 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A1894, + D_801A1898 ? 0x48 : 0x40); + (*(s16*)&D_801A1AA4) = 1; + break; + case 2: + func_80179B28(D_801A1890); + if (D_801A18A8 != 0) { + D_801A1478 = D_801A18A8; + D_801A18A8 = 0; + (*(s16*)&D_801A1AA4) = 3; + return; + } + (*(s16*)&D_801A1AA4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A1AA4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A1AA4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A1AA4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x1B: + D_801A18C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A1AA4) = 4; + D_801A147C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A1AA4) = 5; + D_801A18BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A18BC = (s32)func_8017A3B0; + (*(s16*)&D_801A1AA4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x24: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A1AA4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A1AA4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A1AA4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A1AA4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A1AA4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A1AA4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A1AA4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A18AC); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A18AC); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A18AC); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A18AC); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x4E: + D_801A18D0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x2B: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A1AA4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A1A2C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x34: + (*(s16*)&D_801A1AA4) = 3; + D_801A1478 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A18A8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A1AA4) = 3; + D_801A1478 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A1AA4) = 3; + D_801A1478 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A1478 = *(s32 *)(D_801A1478 + 4); + return; + case 0x37: + (*(s16*)&D_801A1AA4) = 3; + D_801A1894 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A1898 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A1AA4) = 3; + D_801A189C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A18A0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A1AA4) = 3; + D_801A1894 = w1; + D_801A1898 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A1AA4) = 3; + D_801A189C = w2; + D_801A18A0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x43: + D_801A18BC = (s32)func_8017A3D8; + D_801A18C4 = 0; + (*(s16*)&D_801A1AA4) = 5; + D_801A18C0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A1AA4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A1AA4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A18D4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A1AA4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A18D4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A1AA4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A18D4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A1AA4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A18D4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A1AA4) = 3; + break; + default: + break; + } +Lend: + D_801A1478 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A18A4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A18A4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A18A4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A18A4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A18CC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A18CC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A1888; + +s32 func_8017A3B0(void) { + switch (D_801A1888) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A18C4; +extern short D_801A18C0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A18C4) { + case 0: + func_800D0CA0(1); + D_801A18C4 = D_801A18C4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A18C0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A18C4 = D_801A18C4 + 1; + if (D_801A18C4 < 0x1E) { + return 0; + } + D_801A18C4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A1904; + extern s16 D_801A1906; + extern s16 D_801A1908; + extern s16 D_801A18FC; + extern s16 D_801A18FE; + extern s16 D_801A1900; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1904, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1906, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1908, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A18FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A18FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1900, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A188C; +extern u16 D_801A190C; +extern u16 D_801A190E; +extern u16 D_801A1910; +extern s16 D_801A1A30; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A1A30 = 0; + D_801A188C = 0; + D_801A190C = D_80126B5E; + D_801A190E = D_80126B62; + D_801A1910 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801845E0[]; + extern s16 D_801A1904; + extern s16 D_801A18FC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801845E0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801845E0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1904; + s16 *p78C = &D_801A18FC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A1A30 = 1; + D_801A188C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A18AC; + extern SV4_8017B368 D_801A18B4; + extern s16 D_801A1904; + extern s16 D_801A18FC; + extern u16 D_801845E0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A18AC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A18B4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801845E0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801845E0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A1904) = loc0; + (*(SV4_8017B368 *)&D_801A18FC) = loc1; + D_801A1A30 = 1; + D_801A188C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801845E0[]; + extern s16 D_801A1904; + extern s16 D_801A1906; + extern s16 D_801A1908; + extern s16 D_801A18FC; + extern s16 D_801A18FE; + extern s16 D_801A1900; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801845E0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801845E0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1904; + s16 *p78C = &D_801A18FC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A1906; + v798 = D_801A1908; + v78C = *p78C; + v78E = D_801A18FE; + v790 = D_801A1900; + __asm__ __volatile__(""); + D_801A1A30 = 1; + D_801A188C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A188C; +extern s16 D_801A1904; +extern s16 D_801A1906; +extern s16 D_801A1908; +extern s16 D_801A18FC; +extern s16 D_801A18FE; +extern s16 D_801A1900; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A188C = 0; + D_801A1904 = (s16) D_80114F30; + D_801A1906 = (s16) D_80114F34; + D_801A1908 = (s16) D_80114F38; + D_801A18FC = (s16) D_80114F24; + D_801A18FE = (s16) D_80114F28; + D_801A1900 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A191C; +extern s16 D_801A191E; +extern s16 D_801A1920; +extern s16 D_801A1924; +extern s16 D_801A1926; +extern s16 D_801A1928; + +void func_8017B824(void) { + D_801A191C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A191E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A1920 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A1924 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A1926 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A1928 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A191C; +extern s16 D_801A191E; +extern s16 D_801A1920; +extern s16 D_801A1924; +extern s16 D_801A1926; +extern s16 D_801A1928; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A191C; + D_80114F34 = D_801A191E; + D_80114F38 = D_801A1920; + D_80114F24 = D_801A1924; + D_80114F28 = D_801A1926; + D_80114F2C = D_801A1928; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A1904), src[8..15] -> (*(S8_8017B8E8 *)&D_801A18FC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A1904) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A18FC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A190C; +extern u16 D_801A190E; +extern u16 D_801A1910; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A188C; +extern short D_801A1914; +extern short D_801A1916; +extern short D_801A1918; +extern s16 D_801A1904; +extern s16 D_801A1906; +extern s16 D_801A1908; +extern s16 D_801A18FC; +extern s16 D_801A18FE; +extern s16 D_801A1900; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A190C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A190E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1910); + (*(s16 *)&D_801A1914) = buf[0]; + (*(s16 *)&D_801A1916) = buf[1]; + (*(s16 *)&D_801A1918) = buf[2]; + D_801A1904 = D_80114F30 + buf[0]; + D_801A188C = 0; + D_801A1906 = D_80114F34 + buf[1]; + D_801A1908 = D_80114F38 + buf[2]; + D_801A18FC = D_80114F24 + buf[0]; + D_801A18FE = D_80114F28 + buf[1]; + D_801A1900 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A18AC; +extern SV4 D_801A18B4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A18B4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A18AC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A18B4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A18B4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A18AC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A18B4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A18D4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A18D4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A188C; +extern s16 D_801A1A30; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A188C = D_801A188C + 1; + if (D_801A188C >= 0x1F) { + D_801A1A30 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A188C; +extern s16 D_801A1A30; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A188C = D_801A188C + 1; + if (0x18 < D_801A188C) { + func_8012A4BC(); + D_801A1A30 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A188C; +extern void (*D_801A18D0)(void); +extern short D_801A1914; +extern short D_801A1916; +extern short D_801A1918; +extern s16 D_801A1A30; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A188C = D_801A188C + 1; + if (D_801A188C >= 0x19) { + if (D_801A18D0 != 0) { + (*D_801A18D0)(); + } else { + D_80114F30 = D_80114F30 + D_801A1914; + D_80114F34 = D_80114F34 + D_801A1916; + D_80114F38 = D_80114F38 + D_801A1918; + D_80114F24 = D_80114F24 + D_801A1914; + D_80114F28 = D_80114F28 + D_801A1916; + D_80114F2C = D_80114F2C + D_801A1918; + func_8012A4BC(); + } + D_801A1A30 = 0; + } +} + + + +extern void (*D_80184680[])(void); + +void func_8017BE60(void *a0) { + D_80184680[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017BEBC); + + +extern void (*D_801846DC[])(void); + +void func_8017CD9C(void *a0) { + D_801846DC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CE40); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CE80(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CEFC); + + +extern void (*D_801846F0[])(void); + +void func_8017CF1C(void *a0) { + D_801846F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CF58); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CFCC); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017CFF4); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D01C); + + +extern void (*D_8018471C[])(void); + +void func_8017D0D4(void *a0) { + D_8018471C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D2B8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D484); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D5F4); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D6AC); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D764); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D898); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D8E8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017D96C); + + +extern void (*D_801847C0[])(void); + +void func_8017DAD0(void *a0) { + D_801847C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017DB0C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017DD44); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017DDDC); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017DF10); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017DFE8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E128); + + +extern void (*D_801847D8[])(void); + +void func_8017E240(void *a0) { + D_801847D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E27C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E3F8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E508); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E71C); + + +extern void (*D_80184868[])(void); + +void func_8017E984(void *a0) { + D_80184868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017E9C0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017EA44); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017EB38); + + +s32 func_8017EB98(void) { + return 73; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017EBA0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017EC04); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017ED64); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017EF48); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F004); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F0B0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F140); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F29C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F2E8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F640); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F788); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017F83C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FBD8); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FC3C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FD08); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FD64); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FEE4); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8017FFD0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_801802E0); + +extern void func_80180764(s32 *a0); + extern s32 func_801809A0(s32 a0); + void func_8018032C(s32 *a0) { + func_80180764(a0); + func_801809A0((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8018035C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_801803E0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_80180764); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_801807C8); + + +void func_80180814(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s16 *)(v1 + 0x10) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8018082C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_8018087C); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_801808B4); + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C098(void); + void func_80180968(s32 param_1) { + ((void (*)(s32 *, s32))func_80016714)(*(s32 *)(param_1 + 0xd0), 0x38); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_801809A0); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_80180A84); + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_80178D40", func_80180B7C); + + diff --git a/src/ov_SC03_109/ov_SC03_109_jr_801734BC.c b/src/ov_SC03_109/ov_SC03_109_jr_801734BC.c index 6979ca1d4..4bf1bd795 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_801734BC.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_801734BC.c @@ -3105,930 +3105,3 @@ void func_80178D18(void) { D_8019A4AC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019A2B4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019A2B4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019A2B4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019A2B4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019A2DC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019A2DC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019A298; - -s32 func_8017A3B0(void) { - switch (D_8019A298) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019A2D4; -extern short D_8019A2D0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019A2D4) { - case 0: - func_800D0CA0(1); - D_8019A2D4 = D_8019A2D4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019A2D0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019A2D4 = D_8019A2D4 + 1; - if (D_8019A2D4 < 0x1E) { - return 0; - } - D_8019A2D4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019A314; - extern s16 D_8019A316; - extern s16 D_8019A318; - extern s16 D_8019A30C; - extern s16 D_8019A30E; - extern s16 D_8019A310; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019A314, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019A316, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019A318, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019A30C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019A30E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019A310, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019A29C; -extern u16 D_8019A31C; -extern u16 D_8019A31E; -extern u16 D_8019A320; -extern s16 D_8019A438; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019A438 = 0; - D_8019A29C = 0; - D_8019A31C = D_80126B5E; - D_8019A31E = D_80126B62; - D_8019A320 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181C8C[]; - extern s16 D_8019A314; - extern s16 D_8019A30C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181C8C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181C8C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019A314; - s16 *p78C = &D_8019A30C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019A438 = 1; - D_8019A29C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019A2BC; - extern SV4_8017B368 D_8019A2C4; - extern s16 D_8019A314; - extern s16 D_8019A30C; - extern u16 D_80181C8C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019A2BC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019A2C4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181C8C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181C8C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019A314) = loc0; - (*(SV4_8017B368 *)&D_8019A30C) = loc1; - D_8019A438 = 1; - D_8019A29C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181C8C[]; - extern s16 D_8019A314; - extern s16 D_8019A316; - extern s16 D_8019A318; - extern s16 D_8019A30C; - extern s16 D_8019A30E; - extern s16 D_8019A310; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181C8C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181C8C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019A314; - s16 *p78C = &D_8019A30C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019A316; - v798 = D_8019A318; - v78C = *p78C; - v78E = D_8019A30E; - v790 = D_8019A310; - __asm__ __volatile__(""); - D_8019A438 = 1; - D_8019A29C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A29C; -extern s16 D_8019A314; -extern s16 D_8019A316; -extern s16 D_8019A318; -extern s16 D_8019A30C; -extern s16 D_8019A30E; -extern s16 D_8019A310; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019A29C = 0; - D_8019A314 = (s16) D_80114F30; - D_8019A316 = (s16) D_80114F34; - D_8019A318 = (s16) D_80114F38; - D_8019A30C = (s16) D_80114F24; - D_8019A30E = (s16) D_80114F28; - D_8019A310 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019A32C; -extern s16 D_8019A32E; -extern s16 D_8019A330; -extern s16 D_8019A334; -extern s16 D_8019A336; -extern s16 D_8019A338; - -void func_8017B824(void) { - D_8019A32C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019A32E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019A330 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019A334 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019A336 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019A338 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019A32C; -extern s16 D_8019A32E; -extern s16 D_8019A330; -extern s16 D_8019A334; -extern s16 D_8019A336; -extern s16 D_8019A338; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019A32C; - D_80114F34 = D_8019A32E; - D_80114F38 = D_8019A330; - D_80114F24 = D_8019A334; - D_80114F28 = D_8019A336; - D_80114F2C = D_8019A338; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019A314), src[8..15] -> (*(S8_8017B8E8 *)&D_8019A30C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019A314) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019A30C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019A31C; -extern u16 D_8019A31E; -extern u16 D_8019A320; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A29C; -extern short D_8019A324; -extern short D_8019A326; -extern short D_8019A328; -extern s16 D_8019A314; -extern s16 D_8019A316; -extern s16 D_8019A318; -extern s16 D_8019A30C; -extern s16 D_8019A30E; -extern s16 D_8019A310; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019A31C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019A31E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019A320); - (*(s16 *)&D_8019A324) = buf[0]; - (*(s16 *)&D_8019A326) = buf[1]; - (*(s16 *)&D_8019A328) = buf[2]; - D_8019A314 = D_80114F30 + buf[0]; - D_8019A29C = 0; - D_8019A316 = D_80114F34 + buf[1]; - D_8019A318 = D_80114F38 + buf[2]; - D_8019A30C = D_80114F24 + buf[0]; - D_8019A30E = D_80114F28 + buf[1]; - D_8019A310 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019A2BC; -extern SV4 D_8019A2C4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019A2C4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019A2BC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019A2C4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019A2C4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019A2BC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019A2C4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019A2E4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019A2E4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019A29C; -extern s16 D_8019A438; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019A29C = D_8019A29C + 1; - if (D_8019A29C >= 0x1F) { - D_8019A438 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019A29C; -extern s16 D_8019A438; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A29C = D_8019A29C + 1; - if (0x18 < D_8019A29C) { - func_8012A4BC(); - D_8019A438 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019A29C; -extern void (*D_8019A2E0)(void); -extern short D_8019A324; -extern short D_8019A326; -extern short D_8019A328; -extern s16 D_8019A438; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A29C = D_8019A29C + 1; - if (D_8019A29C >= 0x19) { - if (D_8019A2E0 != 0) { - (*D_8019A2E0)(); - } else { - D_80114F30 = D_80114F30 + D_8019A324; - D_80114F34 = D_80114F34 + D_8019A326; - D_80114F38 = D_80114F38 + D_8019A328; - D_80114F24 = D_80114F24 + D_8019A324; - D_80114F28 = D_80114F28 + D_8019A326; - D_80114F2C = D_80114F2C + D_8019A328; - func_8012A4BC(); - } - D_8019A438 = 0; - } -} - - - -extern void (*D_80181D2C[])(void); - -void func_8017BE60(void *a0) { - D_80181D2C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017BF88); - - -extern void (*D_80181D44[])(void); - -void func_8017C0E4(void *a0) { - D_80181D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017C180); - - -extern void (*D_80181E10[])(void); - -void func_8017D060(void *a0) { - D_80181E10[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D09C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D0E0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D104); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D144(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D1C0(void) { - func_800D1EBC(); - } - - - -extern void (*D_80181E24[])(void); - -void func_8017D1E0(void *a0) { - D_80181E24[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D21C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D290); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D2B8); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D2E0); - - -extern void (*D_80181E50[])(void); - -void func_8017D384(void *a0) { - D_80181E50[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D3C0); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D48C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D624); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D644); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D66C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D694); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D72C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D790); - - -extern void (*D_80181E94[])(void); - -void func_8017D8A4(void *a0) { - D_80181E94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D8E0); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D988); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017D9D8); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DAA0); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DB84); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DC54); - -s32 func_8017DCDC(void) { - return 0x49; - } - - - -extern void (*D_80181F18[])(void); - -void func_8017DCE4(void *a0) { - D_80181F18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DD20); - -void func_8017DD84(void) { -} - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DD8C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DDD8); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DE18); - - -extern void (*D_80197274[])(void); - -void func_8017DE74(void *a0) { - D_80197274[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DEB0); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DF88); - -void func_8017DFB0(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80197224; - void func_8017DFB8(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80197224); - } - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017DFE4); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E024); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E0E4); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E150); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E160); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E170); - -extern void func_800296F8(void); - s32 func_8017E188(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_801734BC", func_8017E1AC); - diff --git a/src/ov_SC03_109/ov_SC03_109_jr_80178D40.c b/src/ov_SC03_109/ov_SC03_109_jr_80178D40.c new file mode 100644 index 000000000..e7c8932ae --- /dev/null +++ b/src/ov_SC03_109/ov_SC03_109_jr_80178D40.c @@ -0,0 +1,4397 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181534[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80199608; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181528[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018156C[]; +extern unsigned short D_80181574[]; +extern unsigned short D_8018157C[]; +extern unsigned char D_80199610[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80199608; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181584[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199744; +extern M2C_UNK D_80199748; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801996D0; +extern void (*D_801815B4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019974C[]; +extern u8 D_80199754[]; +extern u8 D_80199704[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801815BC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801815D8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801815E0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181648[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801815EC; +extern u8 D_801815F8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018167C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181684[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801816D8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018170C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801816FC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181728; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801817A0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801817A8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801817B0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801817B8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801817C0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801817C8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801817D4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801817E0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801817EC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801817FC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018180C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181814[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018181C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181824[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018182C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181834[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018183C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181844[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018184C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181854[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018185C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181864[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018186C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181874[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018187C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181884[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018188C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181894[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018189C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801818A4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801818AC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801818B4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801818BC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181900[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801818C4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181930[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018196C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801819C4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801819D4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801819DC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181B44[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80181B50[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80198D18; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019A438; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80199E88; +extern short D_8019A4AC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019A4AC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019A4AC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80199E88 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019A4AC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019A408 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019A408 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019A4AC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019A4AC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019A2E4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80199E8C; + extern s32 D_8019A2A0; + extern s16 D_8019A2A4; + extern s16 D_8019A2A8; + extern s16 D_8019A2AC; + extern s16 D_8019A2B0; + extern s32 D_8019A2B8; + extern s32 D_8019A2BC; + extern s32 D_8019A2CC; + extern s16 D_8019A2D0; + extern s16 D_8019A2D4; + extern s32 D_8019A2D8; + extern s32 D_8019A2E0; + extern s32 D_8019A2E4[10]; + extern s32 D_8019A350; + extern s16 D_8019A408; + extern s32 D_8019A434; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019A408; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019A2A0); + D_8019A2A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A2AC, D_8019A2B0 ? 0x48 : 0x40); + (*(s16*)&D_8019A4AC) = 2; + break; + case 0: + func_80179B28(D_8019A2A0); + D_8019A2A0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A2A4, D_8019A2A8 ? 0x48 : 0x40); + (*(s16*)&D_8019A4AC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019A350 != 0) { + func_80179B28(D_8019A2A0); + D_8019A2A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019A2A4, D_8019A2A8 ? 0x48 : 0x40); + (*(s16*)&D_8019A4AC) = 1; + } else { + (*(s16*)&D_8019A4AC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019A2A0); + D_8019A2A0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019A2A4, + D_8019A2A8 ? 0x48 : 0x40); + (*(s16*)&D_8019A4AC) = 1; + break; + case 2: + func_80179B28(D_8019A2A0); + if (D_8019A2B8 != 0) { + D_80199E88 = D_8019A2B8; + D_8019A2B8 = 0; + (*(s16*)&D_8019A4AC) = 3; + return; + } + (*(s16*)&D_8019A4AC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019A4AC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019A4AC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019A4AC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x1B: + D_8019A2D8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019A4AC) = 4; + D_80199E8C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019A4AC) = 5; + D_8019A2CC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019A2CC = (s32)func_8017A3B0; + (*(s16*)&D_8019A4AC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x24: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019A4AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019A4AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019A4AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A4AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A4AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019A4AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019A4AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019A2BC); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019A2BC); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019A2BC); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019A2BC); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x4E: + D_8019A2E0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019A4AC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019A434 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x34: + (*(s16*)&D_8019A4AC) = 3; + D_80199E88 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019A2B8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019A4AC) = 3; + D_80199E88 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019A4AC) = 3; + D_80199E88 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80199E88 = *(s32 *)(D_80199E88 + 4); + return; + case 0x37: + (*(s16*)&D_8019A4AC) = 3; + D_8019A2A4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019A2A8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019A4AC) = 3; + D_8019A2AC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019A2B0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019A4AC) = 3; + D_8019A2A4 = w1; + D_8019A2A8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019A4AC) = 3; + D_8019A2AC = w2; + D_8019A2B0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x43: + D_8019A2CC = (s32)func_8017A3D8; + D_8019A2D4 = 0; + (*(s16*)&D_8019A4AC) = 5; + D_8019A2D0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019A4AC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019A4AC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019A2E4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019A4AC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019A2E4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019A4AC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019A2E4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019A4AC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019A2E4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019A4AC) = 3; + break; + default: + break; + } +Lend: + D_80199E88 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019A2B4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019A2B4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019A2B4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019A2B4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019A2DC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019A2DC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019A298; + +s32 func_8017A3B0(void) { + switch (D_8019A298) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019A2D4; +extern short D_8019A2D0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019A2D4) { + case 0: + func_800D0CA0(1); + D_8019A2D4 = D_8019A2D4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019A2D0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019A2D4 = D_8019A2D4 + 1; + if (D_8019A2D4 < 0x1E) { + return 0; + } + D_8019A2D4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019A314; + extern s16 D_8019A316; + extern s16 D_8019A318; + extern s16 D_8019A30C; + extern s16 D_8019A30E; + extern s16 D_8019A310; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019A314, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019A316, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019A318, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019A30C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019A30E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019A310, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019A29C; +extern u16 D_8019A31C; +extern u16 D_8019A31E; +extern u16 D_8019A320; +extern s16 D_8019A438; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019A438 = 0; + D_8019A29C = 0; + D_8019A31C = D_80126B5E; + D_8019A31E = D_80126B62; + D_8019A320 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181C8C[]; + extern s16 D_8019A314; + extern s16 D_8019A30C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181C8C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181C8C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019A314; + s16 *p78C = &D_8019A30C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019A438 = 1; + D_8019A29C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019A2BC; + extern SV4_8017B368 D_8019A2C4; + extern s16 D_8019A314; + extern s16 D_8019A30C; + extern u16 D_80181C8C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019A2BC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019A2C4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181C8C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181C8C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019A314) = loc0; + (*(SV4_8017B368 *)&D_8019A30C) = loc1; + D_8019A438 = 1; + D_8019A29C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181C8C[]; + extern s16 D_8019A314; + extern s16 D_8019A316; + extern s16 D_8019A318; + extern s16 D_8019A30C; + extern s16 D_8019A30E; + extern s16 D_8019A310; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181C8C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181C8C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019A314; + s16 *p78C = &D_8019A30C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019A316; + v798 = D_8019A318; + v78C = *p78C; + v78E = D_8019A30E; + v790 = D_8019A310; + __asm__ __volatile__(""); + D_8019A438 = 1; + D_8019A29C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A29C; +extern s16 D_8019A314; +extern s16 D_8019A316; +extern s16 D_8019A318; +extern s16 D_8019A30C; +extern s16 D_8019A30E; +extern s16 D_8019A310; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019A29C = 0; + D_8019A314 = (s16) D_80114F30; + D_8019A316 = (s16) D_80114F34; + D_8019A318 = (s16) D_80114F38; + D_8019A30C = (s16) D_80114F24; + D_8019A30E = (s16) D_80114F28; + D_8019A310 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019A32C; +extern s16 D_8019A32E; +extern s16 D_8019A330; +extern s16 D_8019A334; +extern s16 D_8019A336; +extern s16 D_8019A338; + +void func_8017B824(void) { + D_8019A32C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019A32E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019A330 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019A334 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019A336 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019A338 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019A32C; +extern s16 D_8019A32E; +extern s16 D_8019A330; +extern s16 D_8019A334; +extern s16 D_8019A336; +extern s16 D_8019A338; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019A32C; + D_80114F34 = D_8019A32E; + D_80114F38 = D_8019A330; + D_80114F24 = D_8019A334; + D_80114F28 = D_8019A336; + D_80114F2C = D_8019A338; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019A314), src[8..15] -> (*(S8_8017B8E8 *)&D_8019A30C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019A314) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019A30C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019A31C; +extern u16 D_8019A31E; +extern u16 D_8019A320; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A29C; +extern short D_8019A324; +extern short D_8019A326; +extern short D_8019A328; +extern s16 D_8019A314; +extern s16 D_8019A316; +extern s16 D_8019A318; +extern s16 D_8019A30C; +extern s16 D_8019A30E; +extern s16 D_8019A310; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019A31C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019A31E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019A320); + (*(s16 *)&D_8019A324) = buf[0]; + (*(s16 *)&D_8019A326) = buf[1]; + (*(s16 *)&D_8019A328) = buf[2]; + D_8019A314 = D_80114F30 + buf[0]; + D_8019A29C = 0; + D_8019A316 = D_80114F34 + buf[1]; + D_8019A318 = D_80114F38 + buf[2]; + D_8019A30C = D_80114F24 + buf[0]; + D_8019A30E = D_80114F28 + buf[1]; + D_8019A310 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019A2BC; +extern SV4 D_8019A2C4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019A2C4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019A2BC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019A2C4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019A2C4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019A2BC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019A2C4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019A2E4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019A2E4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019A29C; +extern s16 D_8019A438; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019A29C = D_8019A29C + 1; + if (D_8019A29C >= 0x1F) { + D_8019A438 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019A29C; +extern s16 D_8019A438; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A29C = D_8019A29C + 1; + if (0x18 < D_8019A29C) { + func_8012A4BC(); + D_8019A438 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019A29C; +extern void (*D_8019A2E0)(void); +extern short D_8019A324; +extern short D_8019A326; +extern short D_8019A328; +extern s16 D_8019A438; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A29C = D_8019A29C + 1; + if (D_8019A29C >= 0x19) { + if (D_8019A2E0 != 0) { + (*D_8019A2E0)(); + } else { + D_80114F30 = D_80114F30 + D_8019A324; + D_80114F34 = D_80114F34 + D_8019A326; + D_80114F38 = D_80114F38 + D_8019A328; + D_80114F24 = D_80114F24 + D_8019A324; + D_80114F28 = D_80114F28 + D_8019A326; + D_80114F2C = D_80114F2C + D_8019A328; + func_8012A4BC(); + } + D_8019A438 = 0; + } +} + + + +extern void (*D_80181D2C[])(void); + +void func_8017BE60(void *a0) { + D_80181D2C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017BF88); + + +extern void (*D_80181D44[])(void); + +void func_8017C0E4(void *a0) { + D_80181D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017C180); + + +extern void (*D_80181E10[])(void); + +void func_8017D060(void *a0) { + D_80181E10[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D09C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D0E0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D104); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D144(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D1C0(void) { + func_800D1EBC(); + } + + + +extern void (*D_80181E24[])(void); + +void func_8017D1E0(void *a0) { + D_80181E24[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D21C); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D290); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D2B8); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D2E0); + + +extern void (*D_80181E50[])(void); + +void func_8017D384(void *a0) { + D_80181E50[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D3C0); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D48C); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D624); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D644); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D66C); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D694); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D72C); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D790); + + +extern void (*D_80181E94[])(void); + +void func_8017D8A4(void *a0) { + D_80181E94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D8E0); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D988); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017D9D8); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DAA0); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DB84); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DC54); + +s32 func_8017DCDC(void) { + return 0x49; + } + + + +extern void (*D_80181F18[])(void); + +void func_8017DCE4(void *a0) { + D_80181F18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DD20); + +void func_8017DD84(void) { +} + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DD8C); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DDD8); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DE18); + + +extern void (*D_80197274[])(void); + +void func_8017DE74(void *a0) { + D_80197274[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DEB0); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DF88); + +void func_8017DFB0(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80197224; + void func_8017DFB8(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80197224); + } + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017DFE4); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E024); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E0E4); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E150); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E160); + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E170); + +extern void func_800296F8(void); + s32 func_8017E188(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_80178D40", func_8017E1AC); + + diff --git a/src/ov_SC03_110/ov_SC03_110_jr_801734BC.c b/src/ov_SC03_110/ov_SC03_110_jr_801734BC.c index 941effbc9..b2fd8a2e0 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_801734BC.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_801734BC.c @@ -3105,1051 +3105,3 @@ void func_80178D18(void) { D_801A24DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A205C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A205C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A205C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A205C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A2084; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A2084 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A2040; - -s32 func_8017A3B0(void) { - switch (D_801A2040) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A207C; -extern short D_801A2078; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A207C) { - case 0: - func_800D0CA0(1); - D_801A207C = D_801A207C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A2078; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A207C = D_801A207C + 1; - if (D_801A207C < 0x1E) { - return 0; - } - D_801A207C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A20BC; - extern s16 D_801A20BE; - extern s16 D_801A20C0; - extern s16 D_801A20B4; - extern s16 D_801A20B6; - extern s16 D_801A20B8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A20BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A20BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A20C0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A20B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A20B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A20B8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A2044; -extern u16 D_801A20C4; -extern u16 D_801A20C6; -extern u16 D_801A20C8; -extern s16 D_801A2468; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A2468 = 0; - D_801A2044 = 0; - D_801A20C4 = D_80126B5E; - D_801A20C6 = D_80126B62; - D_801A20C8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801856AC[]; - extern s16 D_801A20BC; - extern s16 D_801A20B4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801856AC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801856AC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A20BC; - s16 *p78C = &D_801A20B4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A2468 = 1; - D_801A2044 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A2064; - extern SV4_8017B368 D_801A206C; - extern s16 D_801A20BC; - extern s16 D_801A20B4; - extern u16 D_801856AC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A2064; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A206C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801856AC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801856AC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A20BC) = loc0; - (*(SV4_8017B368 *)&D_801A20B4) = loc1; - D_801A2468 = 1; - D_801A2044 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801856AC[]; - extern s16 D_801A20BC; - extern s16 D_801A20BE; - extern s16 D_801A20C0; - extern s16 D_801A20B4; - extern s16 D_801A20B6; - extern s16 D_801A20B8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801856AC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801856AC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A20BC; - s16 *p78C = &D_801A20B4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A20BE; - v798 = D_801A20C0; - v78C = *p78C; - v78E = D_801A20B6; - v790 = D_801A20B8; - __asm__ __volatile__(""); - D_801A2468 = 1; - D_801A2044 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A2044; -extern s16 D_801A20BC; -extern s16 D_801A20BE; -extern s16 D_801A20C0; -extern s16 D_801A20B4; -extern s16 D_801A20B6; -extern s16 D_801A20B8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A2044 = 0; - D_801A20BC = (s16) D_80114F30; - D_801A20BE = (s16) D_80114F34; - D_801A20C0 = (s16) D_80114F38; - D_801A20B4 = (s16) D_80114F24; - D_801A20B6 = (s16) D_80114F28; - D_801A20B8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A20D4; -extern s16 D_801A20D6; -extern s16 D_801A20D8; -extern s16 D_801A20DC; -extern s16 D_801A20DE; -extern s16 D_801A20E0; - -void func_8017B824(void) { - D_801A20D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A20D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A20D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A20DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A20DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A20E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A20D4; -extern s16 D_801A20D6; -extern s16 D_801A20D8; -extern s16 D_801A20DC; -extern s16 D_801A20DE; -extern s16 D_801A20E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A20D4; - D_80114F34 = D_801A20D6; - D_80114F38 = D_801A20D8; - D_80114F24 = D_801A20DC; - D_80114F28 = D_801A20DE; - D_80114F2C = D_801A20E0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A20BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801A20B4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A20BC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A20B4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A20C4; -extern u16 D_801A20C6; -extern u16 D_801A20C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A2044; -extern short D_801A20CC; -extern short D_801A20CE; -extern short D_801A20D0; -extern s16 D_801A20BC; -extern s16 D_801A20BE; -extern s16 D_801A20C0; -extern s16 D_801A20B4; -extern s16 D_801A20B6; -extern s16 D_801A20B8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A20C4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A20C6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A20C8); - (*(s16 *)&D_801A20CC) = buf[0]; - (*(s16 *)&D_801A20CE) = buf[1]; - (*(s16 *)&D_801A20D0) = buf[2]; - D_801A20BC = D_80114F30 + buf[0]; - D_801A2044 = 0; - D_801A20BE = D_80114F34 + buf[1]; - D_801A20C0 = D_80114F38 + buf[2]; - D_801A20B4 = D_80114F24 + buf[0]; - D_801A20B6 = D_80114F28 + buf[1]; - D_801A20B8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A2064; -extern SV4 D_801A206C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A206C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A2064 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A206C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A206C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A2064) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A206C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A208C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A208C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A2044; -extern s16 D_801A2468; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A2044 = D_801A2044 + 1; - if (D_801A2044 >= 0x1F) { - D_801A2468 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A2044; -extern s16 D_801A2468; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A2044 = D_801A2044 + 1; - if (0x18 < D_801A2044) { - func_8012A4BC(); - D_801A2468 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A2044; -extern void (*D_801A2088)(void); -extern short D_801A20CC; -extern short D_801A20CE; -extern short D_801A20D0; -extern s16 D_801A2468; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A2044 = D_801A2044 + 1; - if (D_801A2044 >= 0x19) { - if (D_801A2088 != 0) { - (*D_801A2088)(); - } else { - D_80114F30 = D_80114F30 + D_801A20CC; - D_80114F34 = D_80114F34 + D_801A20CE; - D_80114F38 = D_80114F38 + D_801A20D0; - D_80114F24 = D_80114F24 + D_801A20CC; - D_80114F28 = D_80114F28 + D_801A20CE; - D_80114F2C = D_80114F2C + D_801A20D0; - func_8012A4BC(); - } - D_801A2468 = 0; - } -} - - - -extern void (*D_8018574C[])(void); - -void func_8017BE60(void *a0) { - D_8018574C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017BFEC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017C5F0); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017C738); - - -extern void (*D_80185868[])(void); - -void func_8017C8B8(void *a0) { - D_80185868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017C8F4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017C940); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CA34); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CAB4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CB68); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CC60); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CC80); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CCD4); - - -extern void (*D_801858C0[])(void); - -void func_8017CD10(void *a0) { - D_801858C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CD4C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CDF8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017CFE4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D030); - - -extern void (*D_801858D4[])(void); - -void func_8017D33C(void *a0) { - D_801858D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D3B8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D4B4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D588); - - -extern void (*D_801858E8[])(void); - -void func_8017D5DC(void *a0) { - D_801858E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D618); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D728); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017D898); - - -extern void (*D_80185940[])(void); - -void func_8017E778(void *a0) { - D_80185940[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017E7B4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E7F8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80185948[])(void); - -void func_8017E81C(void *a0) { - D_80185948[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017E858); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E898(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E914(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185954[])(void); - -void func_8017E934(void *a0) { - D_80185954[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017E970); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017E9E4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017EA0C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017EA34); - - -extern void (*D_80185980[])(void); - -void func_8017EAD8(void *a0) { - D_80185980[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017EB14); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017EBFC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017ED94); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F234); - -extern s32 func_8017F2F8(void); - s32 func_8017F2D8(void) { - return func_8017F2F8(); - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F2F8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F3D4); - - -s32 func_8017F434(void) { - return 73; -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F43C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F4CC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F628); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F674); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017F9CC); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017FB14); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017FBC8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017FF64); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8017FFC8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180094); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_801800F0); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180270); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018035C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018066C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_801806E8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018076C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180AF0); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180B54); - - -void func_80180BA0(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s32 *)((s32)a0 + 0x1C) = 0x1E; - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s16 *)(v1 + 0x10) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180BB8); - -extern void func_80180E10(s32 arg0); - extern void func_8002A04C(s32 a0); - extern void func_80180C40(s32 arg0); - void func_80180C08(s32 arg0) { - func_80180E10(arg0); - ((void (*)(s32))func_8002A04C)(arg0); - func_80180C40(arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180C40); - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C098(void); - void func_80180CF4(s32 arg0) { - s32 temp_v0; - temp_v0 = *(s32 *)(arg0 + 0xd0); - ((void (*)(s32 *, s32))func_80016714)((s32 *)temp_v0, 0x38); - ((void (*)(void *))func_8012C098)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180D2C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180E10); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180F08); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80180FE0); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018105C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018111C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181244); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_801813B4); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181548); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_8018179C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_801818A8); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181A44); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181B00); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181B8C); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_8019C7F0[]; - s32 func_80181BC4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019C7F0[0], &D_8019C7F0[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181BF0); - -extern u8 D_80078EC1; - s32 func_80181C9C(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_801734BC", func_80181CB4); - diff --git a/src/ov_SC03_110/ov_SC03_110_jr_80178D40.c b/src/ov_SC03_110/ov_SC03_110_jr_80178D40.c new file mode 100644 index 000000000..13b17138c --- /dev/null +++ b/src/ov_SC03_110/ov_SC03_110_jr_80178D40.c @@ -0,0 +1,4518 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184F54[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A13B0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184F48[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80184F8C[]; +extern unsigned short D_80184F94[]; +extern unsigned short D_80184F9C[]; +extern unsigned char D_801A13B8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A13B0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80184FA4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A14EC; +extern M2C_UNK D_801A14F0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A1478; +extern void (*D_80184FD4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A14F4[]; +extern u8 D_801A14FC[]; +extern u8 D_801A14AC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80184FDC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80184FF8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185000[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185068[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018500C; +extern u8 D_80185018; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018509C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801850A4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801850F8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018512C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018511C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185148; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801851C0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801851C8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801851D0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801851D8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801851E0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801851E8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801851F4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185200[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018520C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018521C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018522C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185234[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018523C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185244[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018524C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185254[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018525C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185264[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018526C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185274[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018527C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185284[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018528C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185294[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018529C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801852A4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801852AC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801852B4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801852BC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801852C4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801852CC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801852D4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801852DC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185320[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801852E4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185350[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018538C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801853E4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801853F4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801853FC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185564[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185570[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A09B4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A2468; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A1C30; +extern short D_801A24DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A24DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A24DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A1C30 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A24DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A2438 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A2438 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A24DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A24DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A208C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A1C34; + extern s32 D_801A2048; + extern s16 D_801A204C; + extern s16 D_801A2050; + extern s16 D_801A2054; + extern s16 D_801A2058; + extern s32 D_801A2060; + extern s32 D_801A2064; + extern s32 D_801A2074; + extern s16 D_801A2078; + extern s16 D_801A207C; + extern s32 D_801A2080; + extern s32 D_801A2088; + extern s32 D_801A208C[10]; + extern s32 D_801A2380; + extern s16 D_801A2438; + extern s32 D_801A2464; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A2438; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A2048); + D_801A2048 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A2054, D_801A2058 ? 0x48 : 0x40); + (*(s16*)&D_801A24DC) = 2; + break; + case 0: + func_80179B28(D_801A2048); + D_801A2048 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A204C, D_801A2050 ? 0x48 : 0x40); + (*(s16*)&D_801A24DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A2380 != 0) { + func_80179B28(D_801A2048); + D_801A2048 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A204C, D_801A2050 ? 0x48 : 0x40); + (*(s16*)&D_801A24DC) = 1; + } else { + (*(s16*)&D_801A24DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801A2048); + D_801A2048 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A204C, + D_801A2050 ? 0x48 : 0x40); + (*(s16*)&D_801A24DC) = 1; + break; + case 2: + func_80179B28(D_801A2048); + if (D_801A2060 != 0) { + D_801A1C30 = D_801A2060; + D_801A2060 = 0; + (*(s16*)&D_801A24DC) = 3; + return; + } + (*(s16*)&D_801A24DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A24DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A24DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A24DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A24DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A24DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x1B: + D_801A2080 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A24DC) = 4; + D_801A1C34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A24DC) = 5; + D_801A2074 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A2074 = (s32)func_8017A3B0; + (*(s16*)&D_801A24DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x24: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A24DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A24DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A24DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A24DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A24DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A24DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A24DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A24DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A24DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A2064); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A2064); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A2064); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A2064); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x4E: + D_801A2088 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A24DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A2464 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x34: + (*(s16*)&D_801A24DC) = 3; + D_801A1C30 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A2060 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A24DC) = 3; + D_801A1C30 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A24DC) = 3; + D_801A1C30 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A1C30 = *(s32 *)(D_801A1C30 + 4); + return; + case 0x37: + (*(s16*)&D_801A24DC) = 3; + D_801A204C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A2050 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A24DC) = 3; + D_801A2054 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A2058 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A24DC) = 3; + D_801A204C = w1; + D_801A2050 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A24DC) = 3; + D_801A2054 = w2; + D_801A2058 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x43: + D_801A2074 = (s32)func_8017A3D8; + D_801A207C = 0; + (*(s16*)&D_801A24DC) = 5; + D_801A2078 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A24DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A24DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A208C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A24DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A208C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A24DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A208C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A24DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A208C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A24DC) = 3; + break; + default: + break; + } +Lend: + D_801A1C30 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A205C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A205C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A205C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A205C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A2084; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A2084 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A2040; + +s32 func_8017A3B0(void) { + switch (D_801A2040) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A207C; +extern short D_801A2078; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A207C) { + case 0: + func_800D0CA0(1); + D_801A207C = D_801A207C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A2078; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A207C = D_801A207C + 1; + if (D_801A207C < 0x1E) { + return 0; + } + D_801A207C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A20BC; + extern s16 D_801A20BE; + extern s16 D_801A20C0; + extern s16 D_801A20B4; + extern s16 D_801A20B6; + extern s16 D_801A20B8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A20BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A20BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A20C0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A20B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A20B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A20B8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A2044; +extern u16 D_801A20C4; +extern u16 D_801A20C6; +extern u16 D_801A20C8; +extern s16 D_801A2468; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A2468 = 0; + D_801A2044 = 0; + D_801A20C4 = D_80126B5E; + D_801A20C6 = D_80126B62; + D_801A20C8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801856AC[]; + extern s16 D_801A20BC; + extern s16 D_801A20B4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801856AC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801856AC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A20BC; + s16 *p78C = &D_801A20B4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A2468 = 1; + D_801A2044 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A2064; + extern SV4_8017B368 D_801A206C; + extern s16 D_801A20BC; + extern s16 D_801A20B4; + extern u16 D_801856AC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A2064; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A206C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801856AC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801856AC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A20BC) = loc0; + (*(SV4_8017B368 *)&D_801A20B4) = loc1; + D_801A2468 = 1; + D_801A2044 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801856AC[]; + extern s16 D_801A20BC; + extern s16 D_801A20BE; + extern s16 D_801A20C0; + extern s16 D_801A20B4; + extern s16 D_801A20B6; + extern s16 D_801A20B8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801856AC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801856AC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A20BC; + s16 *p78C = &D_801A20B4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A20BE; + v798 = D_801A20C0; + v78C = *p78C; + v78E = D_801A20B6; + v790 = D_801A20B8; + __asm__ __volatile__(""); + D_801A2468 = 1; + D_801A2044 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A2044; +extern s16 D_801A20BC; +extern s16 D_801A20BE; +extern s16 D_801A20C0; +extern s16 D_801A20B4; +extern s16 D_801A20B6; +extern s16 D_801A20B8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A2044 = 0; + D_801A20BC = (s16) D_80114F30; + D_801A20BE = (s16) D_80114F34; + D_801A20C0 = (s16) D_80114F38; + D_801A20B4 = (s16) D_80114F24; + D_801A20B6 = (s16) D_80114F28; + D_801A20B8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A20D4; +extern s16 D_801A20D6; +extern s16 D_801A20D8; +extern s16 D_801A20DC; +extern s16 D_801A20DE; +extern s16 D_801A20E0; + +void func_8017B824(void) { + D_801A20D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A20D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A20D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A20DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A20DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A20E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A20D4; +extern s16 D_801A20D6; +extern s16 D_801A20D8; +extern s16 D_801A20DC; +extern s16 D_801A20DE; +extern s16 D_801A20E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A20D4; + D_80114F34 = D_801A20D6; + D_80114F38 = D_801A20D8; + D_80114F24 = D_801A20DC; + D_80114F28 = D_801A20DE; + D_80114F2C = D_801A20E0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A20BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801A20B4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A20BC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A20B4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A20C4; +extern u16 D_801A20C6; +extern u16 D_801A20C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A2044; +extern short D_801A20CC; +extern short D_801A20CE; +extern short D_801A20D0; +extern s16 D_801A20BC; +extern s16 D_801A20BE; +extern s16 D_801A20C0; +extern s16 D_801A20B4; +extern s16 D_801A20B6; +extern s16 D_801A20B8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A20C4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A20C6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A20C8); + (*(s16 *)&D_801A20CC) = buf[0]; + (*(s16 *)&D_801A20CE) = buf[1]; + (*(s16 *)&D_801A20D0) = buf[2]; + D_801A20BC = D_80114F30 + buf[0]; + D_801A2044 = 0; + D_801A20BE = D_80114F34 + buf[1]; + D_801A20C0 = D_80114F38 + buf[2]; + D_801A20B4 = D_80114F24 + buf[0]; + D_801A20B6 = D_80114F28 + buf[1]; + D_801A20B8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A2064; +extern SV4 D_801A206C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A206C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A2064 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A206C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A206C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A2064) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A206C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A208C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A208C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A2044; +extern s16 D_801A2468; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A2044 = D_801A2044 + 1; + if (D_801A2044 >= 0x1F) { + D_801A2468 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A2044; +extern s16 D_801A2468; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A2044 = D_801A2044 + 1; + if (0x18 < D_801A2044) { + func_8012A4BC(); + D_801A2468 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A2044; +extern void (*D_801A2088)(void); +extern short D_801A20CC; +extern short D_801A20CE; +extern short D_801A20D0; +extern s16 D_801A2468; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A2044 = D_801A2044 + 1; + if (D_801A2044 >= 0x19) { + if (D_801A2088 != 0) { + (*D_801A2088)(); + } else { + D_80114F30 = D_80114F30 + D_801A20CC; + D_80114F34 = D_80114F34 + D_801A20CE; + D_80114F38 = D_80114F38 + D_801A20D0; + D_80114F24 = D_80114F24 + D_801A20CC; + D_80114F28 = D_80114F28 + D_801A20CE; + D_80114F2C = D_80114F2C + D_801A20D0; + func_8012A4BC(); + } + D_801A2468 = 0; + } +} + + + +extern void (*D_8018574C[])(void); + +void func_8017BE60(void *a0) { + D_8018574C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017BFEC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017C5F0); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017C738); + + +extern void (*D_80185868[])(void); + +void func_8017C8B8(void *a0) { + D_80185868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017C8F4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017C940); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CA34); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CAB4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CB68); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CC60); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CC80); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CCD4); + + +extern void (*D_801858C0[])(void); + +void func_8017CD10(void *a0) { + D_801858C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CD4C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CDF8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017CFE4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D030); + + +extern void (*D_801858D4[])(void); + +void func_8017D33C(void *a0) { + D_801858D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D3B8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D4B4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D588); + + +extern void (*D_801858E8[])(void); + +void func_8017D5DC(void *a0) { + D_801858E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D618); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D728); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017D898); + + +extern void (*D_80185940[])(void); + +void func_8017E778(void *a0) { + D_80185940[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017E7B4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E7F8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80185948[])(void); + +void func_8017E81C(void *a0) { + D_80185948[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017E858); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E898(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E914(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185954[])(void); + +void func_8017E934(void *a0) { + D_80185954[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017E970); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017E9E4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017EA0C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017EA34); + + +extern void (*D_80185980[])(void); + +void func_8017EAD8(void *a0) { + D_80185980[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017EB14); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017EBFC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017ED94); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F234); + +extern s32 func_8017F2F8(void); + s32 func_8017F2D8(void) { + return func_8017F2F8(); + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F2F8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F3D4); + + +s32 func_8017F434(void) { + return 73; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F43C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F4CC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F628); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F674); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017F9CC); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017FB14); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017FBC8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017FF64); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8017FFC8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180094); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_801800F0); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180270); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018035C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018066C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_801806E8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018076C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180AF0); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180B54); + + +void func_80180BA0(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s16 *)(v1 + 0x10) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180BB8); + +extern void func_80180E10(s32 arg0); + extern void func_8002A04C(s32 a0); + extern void func_80180C40(s32 arg0); + void func_80180C08(s32 arg0) { + func_80180E10(arg0); + ((void (*)(s32))func_8002A04C)(arg0); + func_80180C40(arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180C40); + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C098(void); + void func_80180CF4(s32 arg0) { + s32 temp_v0; + temp_v0 = *(s32 *)(arg0 + 0xd0); + ((void (*)(s32 *, s32))func_80016714)((s32 *)temp_v0, 0x38); + ((void (*)(void *))func_8012C098)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180D2C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180E10); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180F08); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80180FE0); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018105C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018111C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181244); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_801813B4); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181548); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_8018179C); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_801818A8); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181A44); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181B00); + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181B8C); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_8019C7F0[]; + s32 func_80181BC4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019C7F0[0], &D_8019C7F0[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181BF0); + +extern u8 D_80078EC1; + s32 func_80181C9C(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_80178D40", func_80181CB4); + + diff --git a/src/ov_SC03_111/ov_SC03_111_jr_801734BC.c b/src/ov_SC03_111/ov_SC03_111_jr_801734BC.c index 4b7605182..e1faf4db4 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_801734BC.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_801734BC.c @@ -3105,1210 +3105,3 @@ void func_80178D18(void) { D_801B9B84 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B9564; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B9564 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B9564; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B9564 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B958C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B958C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B9548; - -s32 func_8017A3B0(void) { - switch (D_801B9548) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B9584; -extern short D_801B9580; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B9584) { - case 0: - func_800D0CA0(1); - D_801B9584 = D_801B9584 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B9580; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B9584 = D_801B9584 + 1; - if (D_801B9584 < 0x1E) { - return 0; - } - D_801B9584 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B95C4; - extern s16 D_801B95C6; - extern s16 D_801B95C8; - extern s16 D_801B95BC; - extern s16 D_801B95BE; - extern s16 D_801B95C0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B95C4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B95C6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B95C8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B95BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B95BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B95C0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B954C; -extern u16 D_801B95CC; -extern u16 D_801B95CE; -extern u16 D_801B95D0; -extern s16 D_801B9B10; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B9B10 = 0; - D_801B954C = 0; - D_801B95CC = D_80126B5E; - D_801B95CE = D_80126B62; - D_801B95D0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188260[]; - extern s16 D_801B95C4; - extern s16 D_801B95BC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188260[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188260[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B95C4; - s16 *p78C = &D_801B95BC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B9B10 = 1; - D_801B954C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B956C; - extern SV4_8017B368 D_801B9574; - extern s16 D_801B95C4; - extern s16 D_801B95BC; - extern u16 D_80188260; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B956C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B9574; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80188260)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80188260)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B95C4) = loc0; - (*(SV4_8017B368 *)&D_801B95BC) = loc1; - D_801B9B10 = 1; - D_801B954C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188260[]; - extern s16 D_801B95C4; - extern s16 D_801B95C6; - extern s16 D_801B95C8; - extern s16 D_801B95BC; - extern s16 D_801B95BE; - extern s16 D_801B95C0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188260[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188260[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B95C4; - s16 *p78C = &D_801B95BC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B95C6; - v798 = D_801B95C8; - v78C = *p78C; - v78E = D_801B95BE; - v790 = D_801B95C0; - __asm__ __volatile__(""); - D_801B9B10 = 1; - D_801B954C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B954C; -extern s16 D_801B95C4; -extern s16 D_801B95C6; -extern s16 D_801B95C8; -extern s16 D_801B95BC; -extern s16 D_801B95BE; -extern s16 D_801B95C0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B954C = 0; - D_801B95C4 = (s16) D_80114F30; - D_801B95C6 = (s16) D_80114F34; - D_801B95C8 = (s16) D_80114F38; - D_801B95BC = (s16) D_80114F24; - D_801B95BE = (s16) D_80114F28; - D_801B95C0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B95DC; -extern s16 D_801B95DE; -extern s16 D_801B95E0; -extern s16 D_801B95E4; -extern s16 D_801B95E6; -extern s16 D_801B95E8; - -void func_8017B824(void) { - D_801B95DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B95DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B95E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B95E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B95E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B95E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B95DC; -extern s16 D_801B95DE; -extern s16 D_801B95E0; -extern s16 D_801B95E4; -extern s16 D_801B95E6; -extern s16 D_801B95E8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B95DC; - D_80114F34 = D_801B95DE; - D_80114F38 = D_801B95E0; - D_80114F24 = D_801B95E4; - D_80114F28 = D_801B95E6; - D_80114F2C = D_801B95E8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B95C4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B95BC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B95C4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B95BC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B95CC; -extern u16 D_801B95CE; -extern u16 D_801B95D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B954C; -extern short D_801B95D4; -extern short D_801B95D6; -extern short D_801B95D8; -extern s16 D_801B95C4; -extern s16 D_801B95C6; -extern s16 D_801B95C8; -extern s16 D_801B95BC; -extern s16 D_801B95BE; -extern s16 D_801B95C0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B95CC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B95CE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B95D0); - (*(s16 *)&D_801B95D4) = buf[0]; - (*(s16 *)&D_801B95D6) = buf[1]; - (*(s16 *)&D_801B95D8) = buf[2]; - D_801B95C4 = D_80114F30 + buf[0]; - D_801B954C = 0; - D_801B95C6 = D_80114F34 + buf[1]; - D_801B95C8 = D_80114F38 + buf[2]; - D_801B95BC = D_80114F24 + buf[0]; - D_801B95BE = D_80114F28 + buf[1]; - D_801B95C0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B956C; -extern SV4 D_801B9574; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B9574) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B956C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B9574 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B9574)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B956C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B9574) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B9594[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B9594; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B954C; -extern s16 D_801B9B10; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B954C = D_801B954C + 1; - if (D_801B954C >= 0x1F) { - D_801B9B10 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B954C; -extern s16 D_801B9B10; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B954C = D_801B954C + 1; - if (0x18 < D_801B954C) { - func_8012A4BC(); - D_801B9B10 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B954C; -extern void (*D_801B9590)(void); -extern short D_801B95D4; -extern short D_801B95D6; -extern short D_801B95D8; -extern s16 D_801B9B10; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B954C = D_801B954C + 1; - if (D_801B954C >= 0x19) { - if (D_801B9590 != 0) { - (*D_801B9590)(); - } else { - D_80114F30 = D_80114F30 + D_801B95D4; - D_80114F34 = D_80114F34 + D_801B95D6; - D_80114F38 = D_80114F38 + D_801B95D8; - D_80114F24 = D_80114F24 + D_801B95D4; - D_80114F28 = D_80114F28 + D_801B95D6; - D_80114F2C = D_80114F2C + D_801B95D8; - func_8012A4BC(); - } - D_801B9B10 = 0; - } -} - - - -extern void (*D_80188300[])(void); - -void func_8017BE60(void *a0) { - D_80188300[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C058); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C25C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C650); - - -extern void (*D_801885E0[])(void); - -void func_8017C7D0(void *a0) { - D_801885E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C80C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C880); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017C95C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CB70); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CD14); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CD6C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CE64); - - -extern void (*D_8018861C[])(void); - -void func_8017CEA4(void *a0) { - D_8018861C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017CEE0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D0A4); - - -extern void (*D_80188624[])(void); - -void func_8017D138(void *a0) { - D_80188624[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80188610; - -void func_8017D174(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80188610, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D218); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D27C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D3AC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D738); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017D9B0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DAF8); - - -extern void (*D_8018873C[])(void); - -void func_8017DC78(void *a0) { - D_8018873C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DCB4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DD00); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DDF4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DE74); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DF28); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017DF94); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E020); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E040); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E094); - - -extern void (*D_80188794[])(void); - -void func_8017E0D0(void *a0) { - D_80188794[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E10C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E15C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E1B8); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E23C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E3A4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E3F0); - - -extern void (*D_801887A8[])(void); - -void func_8017E6FC(void *a0) { - D_801887A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E738); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E7E8); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E874); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E948); - - -extern void (*D_801887BC[])(void); - -void func_8017E99C(void *a0) { - D_801887BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017E9D8); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017EA8C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017EAE8); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017EC58); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8017FB38); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", listCdBuffer); - -extern void (*D_80188A14[])(void); - -void func_80180730(void *a0) { - D_80188A14[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8018076C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_801807B0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -extern void (*D_80188A1C[])(void); - -void func_801807D4(void *a0) { - D_80188A1C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80180810); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180850(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_801808CC(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_80188A28; - -void func_801808EC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80188A28, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_80188A34; - -void func_80180914(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80188A34, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8018093C); - - -extern void (*D_80188A48[])(void); - -void func_801809D4(void *a0) { - D_80188A48[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80180A10); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80180B80); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80180D4C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80180FB4); - - -extern void (*D_80188B60[])(void); - -void func_80181054(void *a0) { - D_80188B60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181090); - -void func_80181170(void) { -} - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181178); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801811E0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801812B4); - -extern s32 func_80181344(void); - void func_80181324(void) { - func_80181344(); - } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181344); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181470); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_80188B68[])(); - -void func_801814D0(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_80188B68[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8018151C); - -extern void func_80181574(s32 a0, s32 a1, s32 a2); - void func_8018154C(void * arg0) { - func_80181574(arg0, *(s16 *)((char *)arg0 + 0xfc), 0x406040); - } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181574); - -s32 func_801817CC(void) { - return 0x4A; - } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801817D4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181838); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181998); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181B7C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181C38); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80181CE4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80182490); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80182A98); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80182BCC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80182F8C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801831D0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183280); - - -extern void (*D_801B1D18[])(void); - -void func_80183364(void *a0) { - D_801B1D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801833A0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183404); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183498); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801835C0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801835F0); - -void func_8018361C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183624); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183710); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183790); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183844); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183924); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8018398C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801839EC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183A7C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183AF0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183B40); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183BC0); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183C60); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183D30); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183DC4); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183E00); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183EE8); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80183FAC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184060); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801840A0); - -extern void (*D_801B6478[])(void); - -void func_801840F4(void *a0) { - D_801B6478[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184130); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184204); - -void func_8018422C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184234); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184380); - -extern void func_8012C218(void *a0); - s32 func_801844A0(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801844CC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801844DC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801844EC); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8018452C(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184560); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184584); - - -extern void (*D_801B64A0[])(void); - -void func_801845E8(void *a0) { - D_801B64A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_80184624); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801846AC); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_8018476C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_801734BC", func_801847DC); - diff --git a/src/ov_SC03_111/ov_SC03_111_jr_80178D40.c b/src/ov_SC03_111/ov_SC03_111_jr_80178D40.c new file mode 100644 index 000000000..d1eb0ef5d --- /dev/null +++ b/src/ov_SC03_111/ov_SC03_111_jr_80178D40.c @@ -0,0 +1,4677 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187B08[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B88B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187AFC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187B40[]; +extern unsigned short D_80187B48[]; +extern unsigned short D_80187B50[]; +extern unsigned char D_801B88C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B88B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187B58[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B89F4; +extern M2C_UNK D_801B89F8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B8980; +extern void (*D_80187B88[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B89FC[]; +extern u8 D_801B8A04[]; +extern u8 D_801B89B4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187B90[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187BAC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187BB4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187C1C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187BC0; +extern u8 D_80187BCC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187C50[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187C58[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187CAC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187CE0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187CD0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187CFC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187D74[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187D7C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187D84[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80187D8C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187D94[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80187D9C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187DA8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187DB4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187DC0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187DD0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187DE0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187DE8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187DF0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187DF8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187E00[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187E08[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187E10[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187E18[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187E20[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187E28[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187E30[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187E38[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187E40[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187E48[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187E50[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187E58[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187E60[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187E68[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187E70[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187E78[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187E80[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187E88[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187E90[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187ED4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187E98; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187F04[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187F40[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187F98[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187FA8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187FB0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188118[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188124[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B7F34; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B9B10; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B9138; +extern short D_801B9B84; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B9B84) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B9B84)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B9138 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B9B84) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B9AE0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B9AE0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B9B84) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B9B84) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B9594[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B913C; + extern s32 D_801B9550; + extern s16 D_801B9554; + extern s16 D_801B9558; + extern s16 D_801B955C; + extern s16 D_801B9560; + extern s32 D_801B9568; + extern s32 D_801B956C; + extern s32 D_801B957C; + extern s16 D_801B9580; + extern s16 D_801B9584; + extern s32 D_801B9588; + extern s32 D_801B9590; + extern s32 D_801B9594[10]; + extern s32 D_801B9A28; + extern s16 D_801B9AE0; + extern s32 D_801B9B0C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B9AE0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B9550); + D_801B9550 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B955C, D_801B9560 ? 0x48 : 0x40); + (*(s16*)&D_801B9B84) = 2; + break; + case 0: + func_80179B28(D_801B9550); + D_801B9550 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B9554, D_801B9558 ? 0x48 : 0x40); + (*(s16*)&D_801B9B84) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B9A28 != 0) { + func_80179B28(D_801B9550); + D_801B9550 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B9554, D_801B9558 ? 0x48 : 0x40); + (*(s16*)&D_801B9B84) = 1; + } else { + (*(s16*)&D_801B9B84) = 3; + } + break; + case 0x32: + func_80179B28(D_801B9550); + D_801B9550 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B9554, + D_801B9558 ? 0x48 : 0x40); + (*(s16*)&D_801B9B84) = 1; + break; + case 2: + func_80179B28(D_801B9550); + if (D_801B9568 != 0) { + D_801B9138 = D_801B9568; + D_801B9568 = 0; + (*(s16*)&D_801B9B84) = 3; + return; + } + (*(s16*)&D_801B9B84) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B9B84) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B9B84) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B9B84) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B9B84) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B9B84) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x1B: + D_801B9588 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B9B84) = 4; + D_801B913C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B9B84) = 5; + D_801B957C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B957C = (s32)func_8017A3B0; + (*(s16*)&D_801B9B84) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x24: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B9B84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B9B84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B9B84) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9B84) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9B84) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B9B84) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B9B84) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B9B84) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B9B84) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B956C); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B956C); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B956C); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B956C); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x4E: + D_801B9590 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x2B: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B9B84) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B9B0C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x34: + (*(s16*)&D_801B9B84) = 3; + D_801B9138 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B9568 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B9B84) = 3; + D_801B9138 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B9B84) = 3; + D_801B9138 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B9138 = *(s32 *)(D_801B9138 + 4); + return; + case 0x37: + (*(s16*)&D_801B9B84) = 3; + D_801B9554 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B9558 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B9B84) = 3; + D_801B955C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B9560 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B9B84) = 3; + D_801B9554 = w1; + D_801B9558 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B9B84) = 3; + D_801B955C = w2; + D_801B9560 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x43: + D_801B957C = (s32)func_8017A3D8; + D_801B9584 = 0; + (*(s16*)&D_801B9B84) = 5; + D_801B9580 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B9B84) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B9B84) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B9594; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B9B84) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B9594; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B9B84) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B9594[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B9B84) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B9594; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B9B84) = 3; + break; + default: + break; + } +Lend: + D_801B9138 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B9564; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B9564 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B9564; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B9564 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B958C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B958C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B9548; + +s32 func_8017A3B0(void) { + switch (D_801B9548) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B9584; +extern short D_801B9580; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B9584) { + case 0: + func_800D0CA0(1); + D_801B9584 = D_801B9584 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B9580; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B9584 = D_801B9584 + 1; + if (D_801B9584 < 0x1E) { + return 0; + } + D_801B9584 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B95C4; + extern s16 D_801B95C6; + extern s16 D_801B95C8; + extern s16 D_801B95BC; + extern s16 D_801B95BE; + extern s16 D_801B95C0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B95C4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B95C6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B95C8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B95BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B95BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B95C0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B954C; +extern u16 D_801B95CC; +extern u16 D_801B95CE; +extern u16 D_801B95D0; +extern s16 D_801B9B10; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B9B10 = 0; + D_801B954C = 0; + D_801B95CC = D_80126B5E; + D_801B95CE = D_80126B62; + D_801B95D0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188260[]; + extern s16 D_801B95C4; + extern s16 D_801B95BC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188260[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188260[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B95C4; + s16 *p78C = &D_801B95BC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B9B10 = 1; + D_801B954C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B956C; + extern SV4_8017B368 D_801B9574; + extern s16 D_801B95C4; + extern s16 D_801B95BC; + extern u16 D_80188260; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B956C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B9574; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80188260)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80188260)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B95C4) = loc0; + (*(SV4_8017B368 *)&D_801B95BC) = loc1; + D_801B9B10 = 1; + D_801B954C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188260[]; + extern s16 D_801B95C4; + extern s16 D_801B95C6; + extern s16 D_801B95C8; + extern s16 D_801B95BC; + extern s16 D_801B95BE; + extern s16 D_801B95C0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188260[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188260[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B95C4; + s16 *p78C = &D_801B95BC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B95C6; + v798 = D_801B95C8; + v78C = *p78C; + v78E = D_801B95BE; + v790 = D_801B95C0; + __asm__ __volatile__(""); + D_801B9B10 = 1; + D_801B954C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B954C; +extern s16 D_801B95C4; +extern s16 D_801B95C6; +extern s16 D_801B95C8; +extern s16 D_801B95BC; +extern s16 D_801B95BE; +extern s16 D_801B95C0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B954C = 0; + D_801B95C4 = (s16) D_80114F30; + D_801B95C6 = (s16) D_80114F34; + D_801B95C8 = (s16) D_80114F38; + D_801B95BC = (s16) D_80114F24; + D_801B95BE = (s16) D_80114F28; + D_801B95C0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B95DC; +extern s16 D_801B95DE; +extern s16 D_801B95E0; +extern s16 D_801B95E4; +extern s16 D_801B95E6; +extern s16 D_801B95E8; + +void func_8017B824(void) { + D_801B95DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B95DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B95E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B95E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B95E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B95E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B95DC; +extern s16 D_801B95DE; +extern s16 D_801B95E0; +extern s16 D_801B95E4; +extern s16 D_801B95E6; +extern s16 D_801B95E8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B95DC; + D_80114F34 = D_801B95DE; + D_80114F38 = D_801B95E0; + D_80114F24 = D_801B95E4; + D_80114F28 = D_801B95E6; + D_80114F2C = D_801B95E8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B95C4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B95BC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B95C4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B95BC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B95CC; +extern u16 D_801B95CE; +extern u16 D_801B95D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B954C; +extern short D_801B95D4; +extern short D_801B95D6; +extern short D_801B95D8; +extern s16 D_801B95C4; +extern s16 D_801B95C6; +extern s16 D_801B95C8; +extern s16 D_801B95BC; +extern s16 D_801B95BE; +extern s16 D_801B95C0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B95CC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B95CE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B95D0); + (*(s16 *)&D_801B95D4) = buf[0]; + (*(s16 *)&D_801B95D6) = buf[1]; + (*(s16 *)&D_801B95D8) = buf[2]; + D_801B95C4 = D_80114F30 + buf[0]; + D_801B954C = 0; + D_801B95C6 = D_80114F34 + buf[1]; + D_801B95C8 = D_80114F38 + buf[2]; + D_801B95BC = D_80114F24 + buf[0]; + D_801B95BE = D_80114F28 + buf[1]; + D_801B95C0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B956C; +extern SV4 D_801B9574; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B9574) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B956C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B9574 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B9574)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B956C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B9574) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B9594[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B9594; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B954C; +extern s16 D_801B9B10; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B954C = D_801B954C + 1; + if (D_801B954C >= 0x1F) { + D_801B9B10 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B954C; +extern s16 D_801B9B10; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B954C = D_801B954C + 1; + if (0x18 < D_801B954C) { + func_8012A4BC(); + D_801B9B10 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B954C; +extern void (*D_801B9590)(void); +extern short D_801B95D4; +extern short D_801B95D6; +extern short D_801B95D8; +extern s16 D_801B9B10; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B954C = D_801B954C + 1; + if (D_801B954C >= 0x19) { + if (D_801B9590 != 0) { + (*D_801B9590)(); + } else { + D_80114F30 = D_80114F30 + D_801B95D4; + D_80114F34 = D_80114F34 + D_801B95D6; + D_80114F38 = D_80114F38 + D_801B95D8; + D_80114F24 = D_80114F24 + D_801B95D4; + D_80114F28 = D_80114F28 + D_801B95D6; + D_80114F2C = D_80114F2C + D_801B95D8; + func_8012A4BC(); + } + D_801B9B10 = 0; + } +} + + + +extern void (*D_80188300[])(void); + +void func_8017BE60(void *a0) { + D_80188300[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C058); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C25C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C650); + + +extern void (*D_801885E0[])(void); + +void func_8017C7D0(void *a0) { + D_801885E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C80C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C880); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017C95C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CB70); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CD14); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CD6C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CE64); + + +extern void (*D_8018861C[])(void); + +void func_8017CEA4(void *a0) { + D_8018861C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017CEE0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D0A4); + + +extern void (*D_80188624[])(void); + +void func_8017D138(void *a0) { + D_80188624[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80188610; + +void func_8017D174(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80188610, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D218); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D27C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D3AC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D738); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017D9B0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DAF8); + + +extern void (*D_8018873C[])(void); + +void func_8017DC78(void *a0) { + D_8018873C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DCB4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DD00); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DDF4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DE74); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DF28); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017DF94); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E020); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E040); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E094); + + +extern void (*D_80188794[])(void); + +void func_8017E0D0(void *a0) { + D_80188794[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E10C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E15C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E1B8); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E23C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E3A4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E3F0); + + +extern void (*D_801887A8[])(void); + +void func_8017E6FC(void *a0) { + D_801887A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E738); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E7E8); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E874); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E948); + + +extern void (*D_801887BC[])(void); + +void func_8017E99C(void *a0) { + D_801887BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017E9D8); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017EA8C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017EAE8); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017EC58); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8017FB38); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", listCdBuffer); + +extern void (*D_80188A14[])(void); + +void func_80180730(void *a0) { + D_80188A14[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8018076C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_801807B0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +extern void (*D_80188A1C[])(void); + +void func_801807D4(void *a0) { + D_80188A1C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80180810); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180850(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_801808CC(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_80188A28; + +void func_801808EC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80188A28, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_80188A34; + +void func_80180914(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80188A34, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8018093C); + + +extern void (*D_80188A48[])(void); + +void func_801809D4(void *a0) { + D_80188A48[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80180A10); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80180B80); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80180D4C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80180FB4); + + +extern void (*D_80188B60[])(void); + +void func_80181054(void *a0) { + D_80188B60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181090); + +void func_80181170(void) { +} + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181178); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801811E0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801812B4); + +extern s32 func_80181344(void); + void func_80181324(void) { + func_80181344(); + } + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181344); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181470); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_80188B68[])(); + +void func_801814D0(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_80188B68[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8018151C); + +extern void func_80181574(s32 a0, s32 a1, s32 a2); + void func_8018154C(void * arg0) { + func_80181574(arg0, *(s16 *)((char *)arg0 + 0xfc), 0x406040); + } + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181574); + +s32 func_801817CC(void) { + return 0x4A; + } + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801817D4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181838); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181998); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181B7C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181C38); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80181CE4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80182490); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80182A98); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80182BCC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80182F8C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801831D0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183280); + + +extern void (*D_801B1D18[])(void); + +void func_80183364(void *a0) { + D_801B1D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801833A0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183404); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183498); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801835C0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801835F0); + +void func_8018361C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183624); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183710); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183790); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183844); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183924); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8018398C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801839EC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183A7C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183AF0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183B40); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183BC0); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183C60); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183D30); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183DC4); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183E00); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183EE8); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80183FAC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184060); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801840A0); + +extern void (*D_801B6478[])(void); + +void func_801840F4(void *a0) { + D_801B6478[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184130); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184204); + +void func_8018422C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184234); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184380); + +extern void func_8012C218(void *a0); + s32 func_801844A0(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801844CC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801844DC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801844EC); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8018452C(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184560); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184584); + + +extern void (*D_801B64A0[])(void); + +void func_801845E8(void *a0) { + D_801B64A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_80184624); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801846AC); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_8018476C); + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_80178D40", func_801847DC); + + diff --git a/src/ov_SC03_112/ov_SC03_112_jr_801734BC.c b/src/ov_SC03_112/ov_SC03_112_jr_801734BC.c index cf675dd25..acdbf91ec 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_801734BC.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_801734BC.c @@ -3084,1224 +3084,3 @@ void func_80178D18(void) { D_801AD14C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ACDC4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801ACDC4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ACDC4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801ACDC4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801ACDEC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801ACDEC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801ACDA8; - -s32 func_8017A3B0(void) { - switch (D_801ACDA8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801ACDE4; -extern short D_801ACDE0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801ACDE4) { - case 0: - func_800D0CA0(1); - D_801ACDE4 = D_801ACDE4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801ACDE0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801ACDE4 = D_801ACDE4 + 1; - if (D_801ACDE4 < 0x1E) { - return 0; - } - D_801ACDE4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801ACE24; - extern s16 D_801ACE26; - extern s16 D_801ACE28; - extern s16 D_801ACE1C; - extern s16 D_801ACE1E; - extern s16 D_801ACE20; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ACE24, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ACE26, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ACE28, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ACE1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ACE1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ACE20, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801ACDAC; -extern u16 D_801ACE2C; -extern u16 D_801ACE2E; -extern u16 D_801ACE30; -extern s16 D_801AD0D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AD0D8 = 0; - D_801ACDAC = 0; - D_801ACE2C = D_80126B5E; - D_801ACE2E = D_80126B62; - D_801ACE30 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189068[]; - extern s16 D_801ACE24; - extern s16 D_801ACE1C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189068[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189068[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ACE24; - s16 *p78C = &D_801ACE1C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AD0D8 = 1; - D_801ACDAC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801ACDCC; - extern SV4_8017B368 D_801ACDD4; - extern s16 D_801ACE24; - extern s16 D_801ACE1C; - extern u16 D_80189068; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801ACDCC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801ACDD4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80189068)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80189068)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801ACE24) = loc0; - (*(SV4_8017B368 *)&D_801ACE1C) = loc1; - D_801AD0D8 = 1; - D_801ACDAC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189068[]; - extern s16 D_801ACE24; - extern s16 D_801ACE26; - extern s16 D_801ACE28; - extern s16 D_801ACE1C; - extern s16 D_801ACE1E; - extern s16 D_801ACE20; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189068[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189068[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ACE24; - s16 *p78C = &D_801ACE1C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801ACE26; - v798 = D_801ACE28; - v78C = *p78C; - v78E = D_801ACE1E; - v790 = D_801ACE20; - __asm__ __volatile__(""); - D_801AD0D8 = 1; - D_801ACDAC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ACDAC; -extern s16 D_801ACE24; -extern s16 D_801ACE26; -extern s16 D_801ACE28; -extern s16 D_801ACE1C; -extern s16 D_801ACE1E; -extern s16 D_801ACE20; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801ACDAC = 0; - D_801ACE24 = (s16) D_80114F30; - D_801ACE26 = (s16) D_80114F34; - D_801ACE28 = (s16) D_80114F38; - D_801ACE1C = (s16) D_80114F24; - D_801ACE1E = (s16) D_80114F28; - D_801ACE20 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801ACE3C; -extern s16 D_801ACE3E; -extern s16 D_801ACE40; -extern s16 D_801ACE44; -extern s16 D_801ACE46; -extern s16 D_801ACE48; - -void func_8017B824(void) { - D_801ACE3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801ACE3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801ACE40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801ACE44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801ACE46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801ACE48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801ACE3C; -extern s16 D_801ACE3E; -extern s16 D_801ACE40; -extern s16 D_801ACE44; -extern s16 D_801ACE46; -extern s16 D_801ACE48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801ACE3C; - D_80114F34 = D_801ACE3E; - D_80114F38 = D_801ACE40; - D_80114F24 = D_801ACE44; - D_80114F28 = D_801ACE46; - D_80114F2C = D_801ACE48; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801ACE24), src[8..15] -> (*(S8_8017B8E8 *)&D_801ACE1C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801ACE24) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801ACE1C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801ACE2C; -extern u16 D_801ACE2E; -extern u16 D_801ACE30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ACDAC; -extern short D_801ACE34; -extern short D_801ACE36; -extern short D_801ACE38; -extern s16 D_801ACE24; -extern s16 D_801ACE26; -extern s16 D_801ACE28; -extern s16 D_801ACE1C; -extern s16 D_801ACE1E; -extern s16 D_801ACE20; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ACE2C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ACE2E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ACE30); - (*(s16 *)&D_801ACE34) = buf[0]; - (*(s16 *)&D_801ACE36) = buf[1]; - (*(s16 *)&D_801ACE38) = buf[2]; - D_801ACE24 = D_80114F30 + buf[0]; - D_801ACDAC = 0; - D_801ACE26 = D_80114F34 + buf[1]; - D_801ACE28 = D_80114F38 + buf[2]; - D_801ACE1C = D_80114F24 + buf[0]; - D_801ACE1E = D_80114F28 + buf[1]; - D_801ACE20 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801ACDCC; -extern SV4 D_801ACDD4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ACDD4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801ACDCC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801ACDD4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ACDD4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801ACDCC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801ACDD4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801ACDF4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801ACDF4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801ACDAC; -extern s16 D_801AD0D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801ACDAC = D_801ACDAC + 1; - if (D_801ACDAC >= 0x1F) { - D_801AD0D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801ACDAC; -extern s16 D_801AD0D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ACDAC = D_801ACDAC + 1; - if (0x18 < D_801ACDAC) { - func_8012A4BC(); - D_801AD0D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801ACDAC; -extern void (*D_801ACDF0)(void); -extern short D_801ACE34; -extern short D_801ACE36; -extern short D_801ACE38; -extern s16 D_801AD0D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ACDAC = D_801ACDAC + 1; - if (D_801ACDAC >= 0x19) { - if (D_801ACDF0 != 0) { - (*D_801ACDF0)(); - } else { - D_80114F30 = D_80114F30 + D_801ACE34; - D_80114F34 = D_80114F34 + D_801ACE36; - D_80114F38 = D_80114F38 + D_801ACE38; - D_80114F24 = D_80114F24 + D_801ACE34; - D_80114F28 = D_80114F28 + D_801ACE36; - D_80114F2C = D_80114F2C + D_801ACE38; - func_8012A4BC(); - } - D_801AD0D8 = 0; - } -} - - - -extern void (*D_80189108[])(void); - -void func_8017BE60(void *a0) { - D_80189108[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_8018912C[])(void); - -void func_8017BEBC(void *a0) { - D_8018912C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80189134[])(void); - -void func_8017C150(void *a0) { - D_80189134[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80189120; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80189120, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017D174); - - -extern void (*D_8018958C[])(void); - -void func_8017DDD8(void *a0) { - D_8018958C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017DE14); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DE58(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80189594[])(void); - -void func_8017DE7C(void *a0) { - D_80189594[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017DEB8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017DEF8); - -extern void func_800D1EBC(void); - void func_8017DF60(void) { - func_800D1EBC(); - } - - - -extern void (*D_801895A0[])(void); - -void func_8017DF80(void *a0) { - D_801895A0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017DFBC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E01C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E044); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E06C); - - -extern void (*D_801895CC[])(void); - -void func_8017E124(void *a0) { - D_801895CC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E160); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E2E8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E4B4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E654); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E70C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E7C4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E81C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E950); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017E9A0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017EA24); - - -extern void (*D_801896A4[])(void); - -void func_8017EBA8(void *a0) { - D_801896A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017EBE4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017EE48); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017EFAC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F0F4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F1CC); - -extern s32 func_8017F30C(void); - -s32 func_8017F30C(void) { - return 0x49; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F314); - - -extern void (*D_80189708[])(void); - -void func_8017F3B8(void *a0) { - D_80189708[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F3F4); - -void func_8017F458(void) { -} - -extern void func_80178CBC(s32 a0, s32 a1); -extern M2C_UNK D_801896F0; - -void func_8017F460(void * arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_801896F0); - *(s16 *)((char *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F498); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F4D8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F534); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F598); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F6F8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F8DC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017F998); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FA44); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FAD0); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801A7AAC; - void func_8017FB4C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801A7AAC); - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FB7C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FC4C); - - -extern s32 func_8012BEE8(s32 arg); - void func_8017FCC0(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((u8 *)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FCF4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FDB8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FE90); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FF70); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8017FFB8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801800E0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180198); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180228); - - -extern s32 func_8012BEE8(s32 arg); - extern void func_80180AE4(s32 arg); - void func_8018026C(s32 arg0) { - if (!func_8012BEE8(arg0)) { - func_80180AE4(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801802A4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801802CC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801802FC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180388); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180440); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180530); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180588); - - -void func_8018062C(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8018063C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180724); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180780); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801808D8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801809A0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180A78); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180AE4); - - -extern s32 rand(void); - void func_80180BE0(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180C1C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180C88); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180E84); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80180FC0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181054); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801810E4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181240); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8018128C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801815E4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8018172C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801817E0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181B7C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181BE0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181CAC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181D08); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181E88); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80181F74); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182284); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801822D0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182300); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182384); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182708); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8018276C); - - -void func_801827B8(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s32 *)((s32)a0 + 0x1C) = 0x1E; - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s16 *)(v1 + 0x10) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801827D0); - -extern void func_80182A28(s32 arg0); - extern void func_8002A04C(s32 a0); - extern void func_80182858(s32 arg0); - void func_80182820(s32 arg0) { - func_80182A28(arg0); - ((void (*)(s32))func_8002A04C)(arg0); - func_80182858(arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182858); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C098(void *a0); - void func_8018290C(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xd0); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182944); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182A28); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182B20); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80182BF8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801833A4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801839AC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80183AE0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80183EA0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801840E4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184194); - -extern void (*D_801A8BF4[])(void); - -void func_80184278(void *a0) { - D_801A8BF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801842B4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184318); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801843AC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801844D4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184504); - -void func_80184530(void) { -} - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184538); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184624); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801846A4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184758); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184838); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801848A0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184900); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184990); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184A04); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184A54); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184AD4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184B74); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184C44); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184CD8); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184D14); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184DFC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184EC0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184F74); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80184FB4); - - -extern void (*D_801AA244[])(void); - -void func_80185008(void *a0) { - D_801AA244[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80185044); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80185140); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801853D0); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80185564); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_801855BC); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_80185638); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_801734BC", func_8018567C); - diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80178D40.c b/src/ov_SC03_112/ov_SC03_112_jr_80178D40.c new file mode 100644 index 000000000..f479e8804 --- /dev/null +++ b/src/ov_SC03_112/ov_SC03_112_jr_80178D40.c @@ -0,0 +1,4670 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188910[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801AC118; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80188904[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80188948[]; +extern unsigned short D_80188950[]; +extern unsigned short D_80188958[]; +extern unsigned char D_801AC120[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801AC118; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188960[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AC254; +extern M2C_UNK D_801AC258; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AC1E0; +extern void (*D_80188990[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801AC25C[]; +extern u8 D_801AC264[]; +extern u8 D_801AC214[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188998[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801889B4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801889BC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188A24[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801889C8; +extern u8 D_801889D4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188A58[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188A60[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188AB4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188AE8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188AD8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188B04; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188B7C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188B84[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188B8C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188B94[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188B9C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188BA4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188BB0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188BBC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188BC8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188BD8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188BE8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188BF0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188BF8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188C00[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188C08[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188C10[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188C18[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188C20[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188C28[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188C30[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188C38[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188C40[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188C48[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188C50[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188C58[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188C60[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188C68[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188C70[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188C78[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188C80[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188C88[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188C90[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188C98[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188CDC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188CA0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188D0C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188D48[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188DA0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188DB0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188DB8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188F20[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188F2C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801AB69C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AD0D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AC998; +extern short D_801AD14C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AD14C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AD14C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AC998 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AD14C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AD0A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AD0A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AD14C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AD14C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801ACDF4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AC99C; + extern s32 D_801ACDB0; + extern s16 D_801ACDB4; + extern s16 D_801ACDB8; + extern s16 D_801ACDBC; + extern s16 D_801ACDC0; + extern s32 D_801ACDC8; + extern s32 D_801ACDCC; + extern s32 D_801ACDDC; + extern s16 D_801ACDE0; + extern s16 D_801ACDE4; + extern s32 D_801ACDE8; + extern s32 D_801ACDF0; + extern s32 D_801ACDF4[10]; + extern s32 D_801ACFF0; + extern s16 D_801AD0A8; + extern s32 D_801AD0D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AD0A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801ACDB0); + D_801ACDB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ACDBC, D_801ACDC0 ? 0x48 : 0x40); + (*(s16*)&D_801AD14C) = 2; + break; + case 0: + func_80179B28(D_801ACDB0); + D_801ACDB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ACDB4, D_801ACDB8 ? 0x48 : 0x40); + (*(s16*)&D_801AD14C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801ACFF0 != 0) { + func_80179B28(D_801ACDB0); + D_801ACDB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801ACDB4, D_801ACDB8 ? 0x48 : 0x40); + (*(s16*)&D_801AD14C) = 1; + } else { + (*(s16*)&D_801AD14C) = 3; + } + break; + case 0x32: + func_80179B28(D_801ACDB0); + D_801ACDB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801ACDB4, + D_801ACDB8 ? 0x48 : 0x40); + (*(s16*)&D_801AD14C) = 1; + break; + case 2: + func_80179B28(D_801ACDB0); + if (D_801ACDC8 != 0) { + D_801AC998 = D_801ACDC8; + D_801ACDC8 = 0; + (*(s16*)&D_801AD14C) = 3; + return; + } + (*(s16*)&D_801AD14C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AD14C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AD14C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AD14C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AD14C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AD14C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x1B: + D_801ACDE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AD14C) = 4; + D_801AC99C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AD14C) = 5; + D_801ACDDC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801ACDDC = (s32)func_8017A3B0; + (*(s16*)&D_801AD14C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x24: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AD14C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AD14C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AD14C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD14C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD14C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AD14C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AD14C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AD14C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AD14C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ACDCC); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ACDCC); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ACDCC); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ACDCC); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x4E: + D_801ACDF0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x2B: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AD14C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AD0D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x34: + (*(s16*)&D_801AD14C) = 3; + D_801AC998 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801ACDC8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AD14C) = 3; + D_801AC998 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AD14C) = 3; + D_801AC998 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AC998 = *(s32 *)(D_801AC998 + 4); + return; + case 0x37: + (*(s16*)&D_801AD14C) = 3; + D_801ACDB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ACDB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AD14C) = 3; + D_801ACDBC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ACDC0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AD14C) = 3; + D_801ACDB4 = w1; + D_801ACDB8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AD14C) = 3; + D_801ACDBC = w2; + D_801ACDC0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x43: + D_801ACDDC = (s32)func_8017A3D8; + D_801ACDE4 = 0; + (*(s16*)&D_801AD14C) = 5; + D_801ACDE0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AD14C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AD14C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801ACDF4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AD14C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801ACDF4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AD14C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801ACDF4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AD14C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801ACDF4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AD14C) = 3; + break; + default: + break; + } +Lend: + D_801AC998 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ACDC4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801ACDC4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ACDC4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801ACDC4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801ACDEC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801ACDEC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801ACDA8; + +s32 func_8017A3B0(void) { + switch (D_801ACDA8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801ACDE4; +extern short D_801ACDE0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801ACDE4) { + case 0: + func_800D0CA0(1); + D_801ACDE4 = D_801ACDE4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801ACDE0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801ACDE4 = D_801ACDE4 + 1; + if (D_801ACDE4 < 0x1E) { + return 0; + } + D_801ACDE4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801ACE24; + extern s16 D_801ACE26; + extern s16 D_801ACE28; + extern s16 D_801ACE1C; + extern s16 D_801ACE1E; + extern s16 D_801ACE20; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ACE24, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ACE26, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ACE28, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ACE1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ACE1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ACE20, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801ACDAC; +extern u16 D_801ACE2C; +extern u16 D_801ACE2E; +extern u16 D_801ACE30; +extern s16 D_801AD0D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AD0D8 = 0; + D_801ACDAC = 0; + D_801ACE2C = D_80126B5E; + D_801ACE2E = D_80126B62; + D_801ACE30 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189068[]; + extern s16 D_801ACE24; + extern s16 D_801ACE1C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189068[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189068[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ACE24; + s16 *p78C = &D_801ACE1C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AD0D8 = 1; + D_801ACDAC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801ACDCC; + extern SV4_8017B368 D_801ACDD4; + extern s16 D_801ACE24; + extern s16 D_801ACE1C; + extern u16 D_80189068; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801ACDCC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801ACDD4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80189068)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80189068)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801ACE24) = loc0; + (*(SV4_8017B368 *)&D_801ACE1C) = loc1; + D_801AD0D8 = 1; + D_801ACDAC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189068[]; + extern s16 D_801ACE24; + extern s16 D_801ACE26; + extern s16 D_801ACE28; + extern s16 D_801ACE1C; + extern s16 D_801ACE1E; + extern s16 D_801ACE20; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189068[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189068[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ACE24; + s16 *p78C = &D_801ACE1C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801ACE26; + v798 = D_801ACE28; + v78C = *p78C; + v78E = D_801ACE1E; + v790 = D_801ACE20; + __asm__ __volatile__(""); + D_801AD0D8 = 1; + D_801ACDAC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ACDAC; +extern s16 D_801ACE24; +extern s16 D_801ACE26; +extern s16 D_801ACE28; +extern s16 D_801ACE1C; +extern s16 D_801ACE1E; +extern s16 D_801ACE20; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801ACDAC = 0; + D_801ACE24 = (s16) D_80114F30; + D_801ACE26 = (s16) D_80114F34; + D_801ACE28 = (s16) D_80114F38; + D_801ACE1C = (s16) D_80114F24; + D_801ACE1E = (s16) D_80114F28; + D_801ACE20 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801ACE3C; +extern s16 D_801ACE3E; +extern s16 D_801ACE40; +extern s16 D_801ACE44; +extern s16 D_801ACE46; +extern s16 D_801ACE48; + +void func_8017B824(void) { + D_801ACE3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801ACE3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801ACE40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801ACE44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801ACE46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801ACE48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801ACE3C; +extern s16 D_801ACE3E; +extern s16 D_801ACE40; +extern s16 D_801ACE44; +extern s16 D_801ACE46; +extern s16 D_801ACE48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801ACE3C; + D_80114F34 = D_801ACE3E; + D_80114F38 = D_801ACE40; + D_80114F24 = D_801ACE44; + D_80114F28 = D_801ACE46; + D_80114F2C = D_801ACE48; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801ACE24), src[8..15] -> (*(S8_8017B8E8 *)&D_801ACE1C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801ACE24) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801ACE1C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801ACE2C; +extern u16 D_801ACE2E; +extern u16 D_801ACE30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ACDAC; +extern short D_801ACE34; +extern short D_801ACE36; +extern short D_801ACE38; +extern s16 D_801ACE24; +extern s16 D_801ACE26; +extern s16 D_801ACE28; +extern s16 D_801ACE1C; +extern s16 D_801ACE1E; +extern s16 D_801ACE20; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ACE2C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ACE2E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ACE30); + (*(s16 *)&D_801ACE34) = buf[0]; + (*(s16 *)&D_801ACE36) = buf[1]; + (*(s16 *)&D_801ACE38) = buf[2]; + D_801ACE24 = D_80114F30 + buf[0]; + D_801ACDAC = 0; + D_801ACE26 = D_80114F34 + buf[1]; + D_801ACE28 = D_80114F38 + buf[2]; + D_801ACE1C = D_80114F24 + buf[0]; + D_801ACE1E = D_80114F28 + buf[1]; + D_801ACE20 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801ACDCC; +extern SV4 D_801ACDD4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ACDD4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801ACDCC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801ACDD4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ACDD4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801ACDCC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801ACDD4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801ACDF4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801ACDF4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801ACDAC; +extern s16 D_801AD0D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801ACDAC = D_801ACDAC + 1; + if (D_801ACDAC >= 0x1F) { + D_801AD0D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801ACDAC; +extern s16 D_801AD0D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ACDAC = D_801ACDAC + 1; + if (0x18 < D_801ACDAC) { + func_8012A4BC(); + D_801AD0D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801ACDAC; +extern void (*D_801ACDF0)(void); +extern short D_801ACE34; +extern short D_801ACE36; +extern short D_801ACE38; +extern s16 D_801AD0D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ACDAC = D_801ACDAC + 1; + if (D_801ACDAC >= 0x19) { + if (D_801ACDF0 != 0) { + (*D_801ACDF0)(); + } else { + D_80114F30 = D_80114F30 + D_801ACE34; + D_80114F34 = D_80114F34 + D_801ACE36; + D_80114F38 = D_80114F38 + D_801ACE38; + D_80114F24 = D_80114F24 + D_801ACE34; + D_80114F28 = D_80114F28 + D_801ACE36; + D_80114F2C = D_80114F2C + D_801ACE38; + func_8012A4BC(); + } + D_801AD0D8 = 0; + } +} + + + +extern void (*D_80189108[])(void); + +void func_8017BE60(void *a0) { + D_80189108[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_8018912C[])(void); + +void func_8017BEBC(void *a0) { + D_8018912C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80189134[])(void); + +void func_8017C150(void *a0) { + D_80189134[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80189120; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80189120, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017D174); + + +extern void (*D_8018958C[])(void); + +void func_8017DDD8(void *a0) { + D_8018958C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017DE14); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DE58(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80189594[])(void); + +void func_8017DE7C(void *a0) { + D_80189594[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017DEB8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017DEF8); + +extern void func_800D1EBC(void); + void func_8017DF60(void) { + func_800D1EBC(); + } + + + +extern void (*D_801895A0[])(void); + +void func_8017DF80(void *a0) { + D_801895A0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017DFBC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E01C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E044); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E06C); + + +extern void (*D_801895CC[])(void); + +void func_8017E124(void *a0) { + D_801895CC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E160); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E2E8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E4B4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E654); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E70C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E7C4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E81C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E950); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017E9A0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017EA24); + + +extern void (*D_801896A4[])(void); + +void func_8017EBA8(void *a0) { + D_801896A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017EBE4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017EE48); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017EFAC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F0F4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F1CC); + +extern s32 func_8017F30C(void); + +s32 func_8017F30C(void) { + return 0x49; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F314); + + +extern void (*D_80189708[])(void); + +void func_8017F3B8(void *a0) { + D_80189708[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F3F4); + +void func_8017F458(void) { +} + +extern void func_80178CBC(s32 a0, s32 a1); +extern M2C_UNK D_801896F0; + +void func_8017F460(void * arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_801896F0); + *(s16 *)((char *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F498); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F4D8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F534); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F598); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F6F8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F8DC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017F998); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FA44); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FAD0); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801A7AAC; + void func_8017FB4C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801A7AAC); + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FB7C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FC4C); + + +extern s32 func_8012BEE8(s32 arg); + void func_8017FCC0(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((u8 *)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FCF4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FDB8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FE90); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FF70); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8017FFB8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801800E0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180198); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180228); + + +extern s32 func_8012BEE8(s32 arg); + extern void func_80180AE4(s32 arg); + void func_8018026C(s32 arg0) { + if (!func_8012BEE8(arg0)) { + func_80180AE4(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801802A4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801802CC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801802FC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180388); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180440); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180530); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180588); + + +void func_8018062C(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8018063C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180724); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180780); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801808D8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801809A0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180A78); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180AE4); + + +extern s32 rand(void); + void func_80180BE0(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180C1C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180C88); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180E84); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80180FC0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181054); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801810E4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181240); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8018128C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801815E4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8018172C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801817E0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181B7C); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181BE0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181CAC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181D08); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181E88); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80181F74); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182284); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801822D0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182300); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182384); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182708); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8018276C); + + +void func_801827B8(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s16 *)(v1 + 0x10) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801827D0); + +extern void func_80182A28(s32 arg0); + extern void func_8002A04C(s32 a0); + extern void func_80182858(s32 arg0); + void func_80182820(s32 arg0) { + func_80182A28(arg0); + ((void (*)(s32))func_8002A04C)(arg0); + func_80182858(arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182858); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C098(void *a0); + void func_8018290C(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xd0); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182944); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182A28); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182B20); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80182BF8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801833A4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801839AC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80183AE0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80183EA0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801840E4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184194); + +extern void (*D_801A8BF4[])(void); + +void func_80184278(void *a0) { + D_801A8BF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801842B4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184318); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801843AC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801844D4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184504); + +void func_80184530(void) { +} + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184538); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184624); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801846A4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184758); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184838); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801848A0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184900); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184990); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184A04); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184A54); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184AD4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184B74); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184C44); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184CD8); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184D14); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184DFC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184EC0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184F74); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80184FB4); + + +extern void (*D_801AA244[])(void); + +void func_80185008(void *a0) { + D_801AA244[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80185044); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80185140); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801853D0); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80185564); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_801855BC); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_80185638); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_80178D40", func_8018567C); + + diff --git a/src/ov_SC03_113/ov_SC03_113_jr_801734BC.c b/src/ov_SC03_113/ov_SC03_113_jr_801734BC.c index 72e317df8..4ee3c03a7 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_801734BC.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_801734BC.c @@ -3084,1068 +3084,3 @@ void func_80178D18(void) { D_801A5CEC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A5954; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A5954 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A5954; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A5954 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A597C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A597C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A5938; - -s32 func_8017A3B0(void) { - switch (D_801A5938) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A5974; -extern short D_801A5970; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A5974) { - case 0: - func_800D0CA0(1); - D_801A5974 = D_801A5974 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A5970; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A5974 = D_801A5974 + 1; - if (D_801A5974 < 0x1E) { - return 0; - } - D_801A5974 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A59B4; - extern s16 D_801A59B6; - extern s16 D_801A59B8; - extern s16 D_801A59AC; - extern s16 D_801A59AE; - extern s16 D_801A59B0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A59B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A59B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A59B8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A59AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A59AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A59B0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A593C; -extern u16 D_801A59BC; -extern u16 D_801A59BE; -extern u16 D_801A59C0; -extern s16 D_801A5C78; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A5C78 = 0; - D_801A593C = 0; - D_801A59BC = D_80126B5E; - D_801A59BE = D_80126B62; - D_801A59C0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186718[]; - extern s16 D_801A59B4; - extern s16 D_801A59AC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186718[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186718[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A59B4; - s16 *p78C = &D_801A59AC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A5C78 = 1; - D_801A593C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A595C; - extern SV4_8017B368 D_801A5964; - extern s16 D_801A59B4; - extern s16 D_801A59AC; - extern u16 D_80186718; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A595C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A5964; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80186718)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80186718)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A59B4) = loc0; - (*(SV4_8017B368 *)&D_801A59AC) = loc1; - D_801A5C78 = 1; - D_801A593C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186718[]; - extern s16 D_801A59B4; - extern s16 D_801A59B6; - extern s16 D_801A59B8; - extern s16 D_801A59AC; - extern s16 D_801A59AE; - extern s16 D_801A59B0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186718[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186718[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A59B4; - s16 *p78C = &D_801A59AC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A59B6; - v798 = D_801A59B8; - v78C = *p78C; - v78E = D_801A59AE; - v790 = D_801A59B0; - __asm__ __volatile__(""); - D_801A5C78 = 1; - D_801A593C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A593C; -extern s16 D_801A59B4; -extern s16 D_801A59B6; -extern s16 D_801A59B8; -extern s16 D_801A59AC; -extern s16 D_801A59AE; -extern s16 D_801A59B0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A593C = 0; - D_801A59B4 = (s16) D_80114F30; - D_801A59B6 = (s16) D_80114F34; - D_801A59B8 = (s16) D_80114F38; - D_801A59AC = (s16) D_80114F24; - D_801A59AE = (s16) D_80114F28; - D_801A59B0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A59CC; -extern s16 D_801A59CE; -extern s16 D_801A59D0; -extern s16 D_801A59D4; -extern s16 D_801A59D6; -extern s16 D_801A59D8; - -void func_8017B824(void) { - D_801A59CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A59CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A59D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A59D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A59D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A59D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A59CC; -extern s16 D_801A59CE; -extern s16 D_801A59D0; -extern s16 D_801A59D4; -extern s16 D_801A59D6; -extern s16 D_801A59D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A59CC; - D_80114F34 = D_801A59CE; - D_80114F38 = D_801A59D0; - D_80114F24 = D_801A59D4; - D_80114F28 = D_801A59D6; - D_80114F2C = D_801A59D8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A59B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A59AC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A59B4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A59AC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A59BC; -extern u16 D_801A59BE; -extern u16 D_801A59C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A593C; -extern short D_801A59C4; -extern short D_801A59C6; -extern short D_801A59C8; -extern s16 D_801A59B4; -extern s16 D_801A59B6; -extern s16 D_801A59B8; -extern s16 D_801A59AC; -extern s16 D_801A59AE; -extern s16 D_801A59B0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A59BC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A59BE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A59C0); - (*(s16 *)&D_801A59C4) = buf[0]; - (*(s16 *)&D_801A59C6) = buf[1]; - (*(s16 *)&D_801A59C8) = buf[2]; - D_801A59B4 = D_80114F30 + buf[0]; - D_801A593C = 0; - D_801A59B6 = D_80114F34 + buf[1]; - D_801A59B8 = D_80114F38 + buf[2]; - D_801A59AC = D_80114F24 + buf[0]; - D_801A59AE = D_80114F28 + buf[1]; - D_801A59B0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A595C; -extern SV4 D_801A5964; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A5964) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A595C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A5964 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A5964)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A595C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A5964) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A5984[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A5984; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A593C; -extern s16 D_801A5C78; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A593C = D_801A593C + 1; - if (D_801A593C >= 0x1F) { - D_801A5C78 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A593C; -extern s16 D_801A5C78; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A593C = D_801A593C + 1; - if (0x18 < D_801A593C) { - func_8012A4BC(); - D_801A5C78 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A593C; -extern void (*D_801A5980)(void); -extern short D_801A59C4; -extern short D_801A59C6; -extern short D_801A59C8; -extern s16 D_801A5C78; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A593C = D_801A593C + 1; - if (D_801A593C >= 0x19) { - if (D_801A5980 != 0) { - (*D_801A5980)(); - } else { - D_80114F30 = D_80114F30 + D_801A59C4; - D_80114F34 = D_80114F34 + D_801A59C6; - D_80114F38 = D_80114F38 + D_801A59C8; - D_80114F24 = D_80114F24 + D_801A59C4; - D_80114F28 = D_80114F28 + D_801A59C6; - D_80114F2C = D_80114F2C + D_801A59C8; - func_8012A4BC(); - } - D_801A5C78 = 0; - } -} - - - -extern void (*D_801867B8[])(void); - -void func_8017BE60(void *a0) { - D_801867B8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_801867DC[])(void); - -void func_8017BEBC(void *a0) { - D_801867DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_801867E4[])(void); - -void func_8017C150(void *a0) { - D_801867E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_801867D0; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_801867D0, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017DDD8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017DF74); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017E178); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017E56C); - - -extern void (*D_80186EC0[])(void); - -void func_8017E6EC(void *a0) { - D_80186EC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017E728); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017E79C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017E878); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EA8C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EB60); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EC30); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EC88); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017ED80); - - -extern void (*D_80186F5C[])(void); - -void func_8017EDC0(void *a0) { - D_80186F5C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EDFC); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EE40(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80186F64[])(void); - -void func_8017EE64(void *a0) { - D_80186F64[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EEA0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EEE0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017EF5C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80186F70[])(void); - -void func_8017EF7C(void *a0) { - D_80186F70[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017EFB8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F02C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F054); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F07C); - - -extern void (*D_80186F9C[])(void); - -void func_8017F120(void *a0) { - D_80186F9C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F15C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F1FC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F394); - - -extern void (*D_80187174[])(void); - -void func_8017F4A0(void *a0) { - D_80187174[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F4DC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F6CC); - - -extern void (*D_801871A8[])(void); - -void func_8017F8C8(void *a0) { - D_801871A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F904); - -void func_8017F9F4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017F9FC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FAD4); - -void func_8017FB88(void) { -} - -s32 func_8017FB90(void) { - return 0x49; - } - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FB98); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FC3C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FCB8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FD78); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8017FEA0); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80180010); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801801A4); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801803F8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80180504); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801806A0); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8018075C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801807E8); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_8019CBBC[]; - s32 func_80180820(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019CBBC[0], &D_8019CBBC[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8018084C); - - -extern u8 D_80078EC1; - s32 func_801808F8(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80180910); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8018097C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181128); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181730); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181864); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181C24); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181E68); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80181F18); - - -extern void (*D_8019F340[])(void); - -void func_80181FFC(void *a0) { - D_8019F340[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182038); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_8018209C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182130); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182258); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182288); - -void func_801822B4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801822BC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801823A8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182428); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801824DC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801825BC); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182624); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182684); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182714); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182788); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801827D8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182858); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801828F8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_801829C8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182A5C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182A98); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182B80); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182C44); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182CF8); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_801734BC", func_80182D38); - diff --git a/src/ov_SC03_113/ov_SC03_113_jr_80178D40.c b/src/ov_SC03_113/ov_SC03_113_jr_80178D40.c new file mode 100644 index 000000000..7a346114a --- /dev/null +++ b/src/ov_SC03_113/ov_SC03_113_jr_80178D40.c @@ -0,0 +1,4514 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185FC0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A4CA8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185FB4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185FF8[]; +extern unsigned short D_80186000[]; +extern unsigned short D_80186008[]; +extern unsigned char D_801A4CB0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A4CA8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186010[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A4DE4; +extern M2C_UNK D_801A4DE8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A4D70; +extern void (*D_80186040[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A4DEC[]; +extern u8 D_801A4DF4[]; +extern u8 D_801A4DA4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80186048[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80186064[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018606C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801860D4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186078; +extern u8 D_80186084; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80186108[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186110[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80186164[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80186198[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80186188[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801861B4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018622C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80186234[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018623C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80186244[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018624C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80186254[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80186260[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018626C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80186278[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80186288[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80186298[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801862A0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801862A8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801862B0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801862B8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801862C0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801862C8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801862D0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801862D8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801862E0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801862E8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801862F0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801862F8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186300[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80186308[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186310[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80186318[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186320[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80186328[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80186330[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80186338[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80186340[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80186348[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018638C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80186350; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801863BC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801863F8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80186450[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80186460[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186468[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801865D0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801865DC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A4324; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A5C78; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A5528; +extern short D_801A5CEC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A5CEC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A5CEC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A5528 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A5CEC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A5C48 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A5C48 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A5CEC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A5CEC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A5984[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A552C; + extern s32 D_801A5940; + extern s16 D_801A5944; + extern s16 D_801A5948; + extern s16 D_801A594C; + extern s16 D_801A5950; + extern s32 D_801A5958; + extern s32 D_801A595C; + extern s32 D_801A596C; + extern s16 D_801A5970; + extern s16 D_801A5974; + extern s32 D_801A5978; + extern s32 D_801A5980; + extern s32 D_801A5984[10]; + extern s32 D_801A5B90; + extern s16 D_801A5C48; + extern s32 D_801A5C74; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A5C48; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A5940); + D_801A5940 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A594C, D_801A5950 ? 0x48 : 0x40); + (*(s16*)&D_801A5CEC) = 2; + break; + case 0: + func_80179B28(D_801A5940); + D_801A5940 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A5944, D_801A5948 ? 0x48 : 0x40); + (*(s16*)&D_801A5CEC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A5B90 != 0) { + func_80179B28(D_801A5940); + D_801A5940 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A5944, D_801A5948 ? 0x48 : 0x40); + (*(s16*)&D_801A5CEC) = 1; + } else { + (*(s16*)&D_801A5CEC) = 3; + } + break; + case 0x32: + func_80179B28(D_801A5940); + D_801A5940 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A5944, + D_801A5948 ? 0x48 : 0x40); + (*(s16*)&D_801A5CEC) = 1; + break; + case 2: + func_80179B28(D_801A5940); + if (D_801A5958 != 0) { + D_801A5528 = D_801A5958; + D_801A5958 = 0; + (*(s16*)&D_801A5CEC) = 3; + return; + } + (*(s16*)&D_801A5CEC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A5CEC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A5CEC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A5CEC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x1B: + D_801A5978 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A5CEC) = 4; + D_801A552C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A5CEC) = 5; + D_801A596C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A596C = (s32)func_8017A3B0; + (*(s16*)&D_801A5CEC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x24: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A5CEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A5CEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A5CEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A5CEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A5CEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A5CEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A5CEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A595C); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A595C); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A595C); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A595C); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x4E: + D_801A5980 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x2B: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A5CEC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A5C74 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x34: + (*(s16*)&D_801A5CEC) = 3; + D_801A5528 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A5958 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A5CEC) = 3; + D_801A5528 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A5CEC) = 3; + D_801A5528 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A5528 = *(s32 *)(D_801A5528 + 4); + return; + case 0x37: + (*(s16*)&D_801A5CEC) = 3; + D_801A5944 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A5948 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A5CEC) = 3; + D_801A594C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A5950 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A5CEC) = 3; + D_801A5944 = w1; + D_801A5948 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A5CEC) = 3; + D_801A594C = w2; + D_801A5950 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x43: + D_801A596C = (s32)func_8017A3D8; + D_801A5974 = 0; + (*(s16*)&D_801A5CEC) = 5; + D_801A5970 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A5CEC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A5CEC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A5984; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A5CEC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A5984; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A5CEC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A5984[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A5CEC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A5984; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A5CEC) = 3; + break; + default: + break; + } +Lend: + D_801A5528 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A5954; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A5954 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A5954; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A5954 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A597C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A597C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A5938; + +s32 func_8017A3B0(void) { + switch (D_801A5938) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A5974; +extern short D_801A5970; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A5974) { + case 0: + func_800D0CA0(1); + D_801A5974 = D_801A5974 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A5970; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A5974 = D_801A5974 + 1; + if (D_801A5974 < 0x1E) { + return 0; + } + D_801A5974 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A59B4; + extern s16 D_801A59B6; + extern s16 D_801A59B8; + extern s16 D_801A59AC; + extern s16 D_801A59AE; + extern s16 D_801A59B0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A59B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A59B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A59B8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A59AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A59AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A59B0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A593C; +extern u16 D_801A59BC; +extern u16 D_801A59BE; +extern u16 D_801A59C0; +extern s16 D_801A5C78; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A5C78 = 0; + D_801A593C = 0; + D_801A59BC = D_80126B5E; + D_801A59BE = D_80126B62; + D_801A59C0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186718[]; + extern s16 D_801A59B4; + extern s16 D_801A59AC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186718[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186718[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A59B4; + s16 *p78C = &D_801A59AC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A5C78 = 1; + D_801A593C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A595C; + extern SV4_8017B368 D_801A5964; + extern s16 D_801A59B4; + extern s16 D_801A59AC; + extern u16 D_80186718; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A595C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A5964; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80186718)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80186718)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A59B4) = loc0; + (*(SV4_8017B368 *)&D_801A59AC) = loc1; + D_801A5C78 = 1; + D_801A593C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186718[]; + extern s16 D_801A59B4; + extern s16 D_801A59B6; + extern s16 D_801A59B8; + extern s16 D_801A59AC; + extern s16 D_801A59AE; + extern s16 D_801A59B0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186718[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186718[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A59B4; + s16 *p78C = &D_801A59AC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A59B6; + v798 = D_801A59B8; + v78C = *p78C; + v78E = D_801A59AE; + v790 = D_801A59B0; + __asm__ __volatile__(""); + D_801A5C78 = 1; + D_801A593C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A593C; +extern s16 D_801A59B4; +extern s16 D_801A59B6; +extern s16 D_801A59B8; +extern s16 D_801A59AC; +extern s16 D_801A59AE; +extern s16 D_801A59B0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A593C = 0; + D_801A59B4 = (s16) D_80114F30; + D_801A59B6 = (s16) D_80114F34; + D_801A59B8 = (s16) D_80114F38; + D_801A59AC = (s16) D_80114F24; + D_801A59AE = (s16) D_80114F28; + D_801A59B0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A59CC; +extern s16 D_801A59CE; +extern s16 D_801A59D0; +extern s16 D_801A59D4; +extern s16 D_801A59D6; +extern s16 D_801A59D8; + +void func_8017B824(void) { + D_801A59CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A59CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A59D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A59D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A59D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A59D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A59CC; +extern s16 D_801A59CE; +extern s16 D_801A59D0; +extern s16 D_801A59D4; +extern s16 D_801A59D6; +extern s16 D_801A59D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A59CC; + D_80114F34 = D_801A59CE; + D_80114F38 = D_801A59D0; + D_80114F24 = D_801A59D4; + D_80114F28 = D_801A59D6; + D_80114F2C = D_801A59D8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A59B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A59AC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A59B4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A59AC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A59BC; +extern u16 D_801A59BE; +extern u16 D_801A59C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A593C; +extern short D_801A59C4; +extern short D_801A59C6; +extern short D_801A59C8; +extern s16 D_801A59B4; +extern s16 D_801A59B6; +extern s16 D_801A59B8; +extern s16 D_801A59AC; +extern s16 D_801A59AE; +extern s16 D_801A59B0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A59BC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A59BE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A59C0); + (*(s16 *)&D_801A59C4) = buf[0]; + (*(s16 *)&D_801A59C6) = buf[1]; + (*(s16 *)&D_801A59C8) = buf[2]; + D_801A59B4 = D_80114F30 + buf[0]; + D_801A593C = 0; + D_801A59B6 = D_80114F34 + buf[1]; + D_801A59B8 = D_80114F38 + buf[2]; + D_801A59AC = D_80114F24 + buf[0]; + D_801A59AE = D_80114F28 + buf[1]; + D_801A59B0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A595C; +extern SV4 D_801A5964; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A5964) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A595C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A5964 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A5964)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A595C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A5964) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A5984[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A5984; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A593C; +extern s16 D_801A5C78; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A593C = D_801A593C + 1; + if (D_801A593C >= 0x1F) { + D_801A5C78 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A593C; +extern s16 D_801A5C78; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A593C = D_801A593C + 1; + if (0x18 < D_801A593C) { + func_8012A4BC(); + D_801A5C78 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A593C; +extern void (*D_801A5980)(void); +extern short D_801A59C4; +extern short D_801A59C6; +extern short D_801A59C8; +extern s16 D_801A5C78; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A593C = D_801A593C + 1; + if (D_801A593C >= 0x19) { + if (D_801A5980 != 0) { + (*D_801A5980)(); + } else { + D_80114F30 = D_80114F30 + D_801A59C4; + D_80114F34 = D_80114F34 + D_801A59C6; + D_80114F38 = D_80114F38 + D_801A59C8; + D_80114F24 = D_80114F24 + D_801A59C4; + D_80114F28 = D_80114F28 + D_801A59C6; + D_80114F2C = D_80114F2C + D_801A59C8; + func_8012A4BC(); + } + D_801A5C78 = 0; + } +} + + + +extern void (*D_801867B8[])(void); + +void func_8017BE60(void *a0) { + D_801867B8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_801867DC[])(void); + +void func_8017BEBC(void *a0) { + D_801867DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_801867E4[])(void); + +void func_8017C150(void *a0) { + D_801867E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_801867D0; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_801867D0, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017DDD8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017DF74); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017E178); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017E56C); + + +extern void (*D_80186EC0[])(void); + +void func_8017E6EC(void *a0) { + D_80186EC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017E728); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017E79C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017E878); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EA8C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EB60); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EC30); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EC88); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017ED80); + + +extern void (*D_80186F5C[])(void); + +void func_8017EDC0(void *a0) { + D_80186F5C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EDFC); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EE40(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80186F64[])(void); + +void func_8017EE64(void *a0) { + D_80186F64[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EEA0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EEE0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017EF5C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80186F70[])(void); + +void func_8017EF7C(void *a0) { + D_80186F70[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017EFB8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F02C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F054); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F07C); + + +extern void (*D_80186F9C[])(void); + +void func_8017F120(void *a0) { + D_80186F9C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F15C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F1FC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F394); + + +extern void (*D_80187174[])(void); + +void func_8017F4A0(void *a0) { + D_80187174[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F4DC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F6CC); + + +extern void (*D_801871A8[])(void); + +void func_8017F8C8(void *a0) { + D_801871A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F904); + +void func_8017F9F4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017F9FC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FAD4); + +void func_8017FB88(void) { +} + +s32 func_8017FB90(void) { + return 0x49; + } + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FB98); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FC3C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FCB8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FD78); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8017FEA0); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80180010); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801801A4); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801803F8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80180504); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801806A0); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8018075C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801807E8); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_8019CBBC[]; + s32 func_80180820(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019CBBC[0], &D_8019CBBC[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8018084C); + + +extern u8 D_80078EC1; + s32 func_801808F8(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80180910); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8018097C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181128); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181730); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181864); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181C24); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181E68); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80181F18); + + +extern void (*D_8019F340[])(void); + +void func_80181FFC(void *a0) { + D_8019F340[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182038); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_8018209C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182130); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182258); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182288); + +void func_801822B4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801822BC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801823A8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182428); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801824DC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801825BC); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182624); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182684); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182714); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182788); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801827D8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182858); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801828F8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_801829C8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182A5C); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182A98); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182B80); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182C44); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182CF8); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_80178D40", func_80182D38); + + diff --git a/src/ov_SC03_114/ov_SC03_114_jr_801734BC.c b/src/ov_SC03_114/ov_SC03_114_jr_801734BC.c index 12dc9e613..3a867d58b 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_801734BC.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_801734BC.c @@ -3084,891 +3084,3 @@ void func_80178D18(void) { D_801A9864 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A95EC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A95EC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A95EC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A95EC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A9614; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A9614 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A95D0; - -s32 func_8017A3B0(void) { - switch (D_801A95D0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A960C; -extern short D_801A9608; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A960C) { - case 0: - func_800D0CA0(1); - D_801A960C = D_801A960C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A9608; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A960C = D_801A960C + 1; - if (D_801A960C < 0x1E) { - return 0; - } - D_801A960C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A964C; - extern s16 D_801A964E; - extern s16 D_801A9650; - extern s16 D_801A9644; - extern s16 D_801A9646; - extern s16 D_801A9648; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A964C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A964E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9650, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9644, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9646, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9648, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A95D4; -extern u16 D_801A9654; -extern u16 D_801A9656; -extern u16 D_801A9658; -extern s16 D_801A97F0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A97F0 = 0; - D_801A95D4 = 0; - D_801A9654 = D_80126B5E; - D_801A9656 = D_80126B62; - D_801A9658 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182380[]; - extern s16 D_801A964C; - extern s16 D_801A9644; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182380[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182380[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A964C; - s16 *p78C = &D_801A9644; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A97F0 = 1; - D_801A95D4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A95F4; - extern SV4_8017B368 D_801A95FC; - extern s16 D_801A964C; - extern s16 D_801A9644; - extern u16 D_80182380; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A95F4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A95FC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182380)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182380)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A964C) = loc0; - (*(SV4_8017B368 *)&D_801A9644) = loc1; - D_801A97F0 = 1; - D_801A95D4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182380[]; - extern s16 D_801A964C; - extern s16 D_801A964E; - extern s16 D_801A9650; - extern s16 D_801A9644; - extern s16 D_801A9646; - extern s16 D_801A9648; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182380[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182380[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A964C; - s16 *p78C = &D_801A9644; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A964E; - v798 = D_801A9650; - v78C = *p78C; - v78E = D_801A9646; - v790 = D_801A9648; - __asm__ __volatile__(""); - D_801A97F0 = 1; - D_801A95D4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A95D4; -extern s16 D_801A964C; -extern s16 D_801A964E; -extern s16 D_801A9650; -extern s16 D_801A9644; -extern s16 D_801A9646; -extern s16 D_801A9648; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A95D4 = 0; - D_801A964C = (s16) D_80114F30; - D_801A964E = (s16) D_80114F34; - D_801A9650 = (s16) D_80114F38; - D_801A9644 = (s16) D_80114F24; - D_801A9646 = (s16) D_80114F28; - D_801A9648 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A9664; -extern s16 D_801A9666; -extern s16 D_801A9668; -extern s16 D_801A966C; -extern s16 D_801A966E; -extern s16 D_801A9670; - -void func_8017B824(void) { - D_801A9664 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A9666 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A9668 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A966C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A966E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A9670 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A9664; -extern s16 D_801A9666; -extern s16 D_801A9668; -extern s16 D_801A966C; -extern s16 D_801A966E; -extern s16 D_801A9670; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A9664; - D_80114F34 = D_801A9666; - D_80114F38 = D_801A9668; - D_80114F24 = D_801A966C; - D_80114F28 = D_801A966E; - D_80114F2C = D_801A9670; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A964C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9644) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A964C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A9644) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A9654; -extern u16 D_801A9656; -extern u16 D_801A9658; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A95D4; -extern short D_801A965C; -extern short D_801A965E; -extern short D_801A9660; -extern s16 D_801A964C; -extern s16 D_801A964E; -extern s16 D_801A9650; -extern s16 D_801A9644; -extern s16 D_801A9646; -extern s16 D_801A9648; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9654); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9656); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9658); - (*(s16 *)&D_801A965C) = buf[0]; - (*(s16 *)&D_801A965E) = buf[1]; - (*(s16 *)&D_801A9660) = buf[2]; - D_801A964C = D_80114F30 + buf[0]; - D_801A95D4 = 0; - D_801A964E = D_80114F34 + buf[1]; - D_801A9650 = D_80114F38 + buf[2]; - D_801A9644 = D_80114F24 + buf[0]; - D_801A9646 = D_80114F28 + buf[1]; - D_801A9648 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A95F4; -extern SV4 D_801A95FC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A95FC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A95F4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A95FC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A95FC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A95F4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A95FC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A961C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A961C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A95D4; -extern s16 D_801A97F0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A95D4 = D_801A95D4 + 1; - if (D_801A95D4 >= 0x1F) { - D_801A97F0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A95D4; -extern s16 D_801A97F0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A95D4 = D_801A95D4 + 1; - if (0x18 < D_801A95D4) { - func_8012A4BC(); - D_801A97F0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A95D4; -extern void (*D_801A9618)(void); -extern short D_801A965C; -extern short D_801A965E; -extern short D_801A9660; -extern s16 D_801A97F0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A95D4 = D_801A95D4 + 1; - if (D_801A95D4 >= 0x19) { - if (D_801A9618 != 0) { - (*D_801A9618)(); - } else { - D_80114F30 = D_80114F30 + D_801A965C; - D_80114F34 = D_80114F34 + D_801A965E; - D_80114F38 = D_80114F38 + D_801A9660; - D_80114F24 = D_80114F24 + D_801A965C; - D_80114F28 = D_80114F28 + D_801A965E; - D_80114F2C = D_80114F2C + D_801A9660; - func_8012A4BC(); - } - D_801A97F0 = 0; - } -} - - - -extern void (*D_80182420[])(void); - -void func_8017BE60(void *a0) { - D_80182420[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018247C[])(void); - -void func_8017CD9C(void *a0) { - D_8018247C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80182484[])(void); - -void func_8017CE40(void *a0) { - D_80182484[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CEBC); - - -extern s32 func_800167F0(s32 arg); -extern void func_800CFBCC(s32 arg); - -s32 func_8017CF38(void) { - if ((func_800167F0(0x4) & 0xFFFF) == 0) { - return 0; - } else { - func_800CFBCC(0x2); - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CF70); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CF98); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017CFC0); - - -extern void (*D_801824A0[])(void); - -void func_8017D008(void *a0) { - D_801824A0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D044); - -void func_8017D0E4(void * arg0) { - *(s32 *)((char *)arg0 + 0x40) = -0x38D; - *(s32 *)((char *)arg0 + 0x44) = -0x44E; - *(s32 *)((char *)arg0 + 0x4C) = -0x2ED; - *(s32 *)((char *)arg0 + 0x3C) = 0; - *(s32 *)((char *)arg0 + 0x48) = 0; - *(s32 *)((char *)arg0 + 0x50) = -0xD8; - } - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D518); - - -extern void (*D_80183228[])(void); - -void func_8017D704(void *a0) { - D_80183228[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D740); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D7C8); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D7F8); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D814); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D8DC); - -void func_8017D920(void) { -} - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017D928); - -void func_8017DA28(void) { -} - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DA30); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DC38); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DCC0); - - -extern void (*D_80183254[])(void); - -void func_8017DD64(void *a0) { - D_80183254[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DDA0); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DE30); - - -extern void (*D_80183264[])(void); - -void func_8017DEA8(void *a0) { - D_80183264[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DEE4); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017DF88); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E014); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E070); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E170); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E270); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E2EC); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E78C); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E918); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_801734BC", func_8017E94C); - diff --git a/src/ov_SC03_114/ov_SC03_114_jr_80178D40.c b/src/ov_SC03_114/ov_SC03_114_jr_80178D40.c new file mode 100644 index 000000000..b21d65c4b --- /dev/null +++ b/src/ov_SC03_114/ov_SC03_114_jr_80178D40.c @@ -0,0 +1,4337 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181C28[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A8940; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181C1C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181C60[]; +extern unsigned short D_80181C68[]; +extern unsigned short D_80181C70[]; +extern unsigned char D_801A8948[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A8940; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181C78[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A8A7C; +extern M2C_UNK D_801A8A80; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A8A08; +extern void (*D_80181CA8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A8A84[]; +extern u8 D_801A8A8C[]; +extern u8 D_801A8A3C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181CB0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181CCC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181CD4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181D3C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181CE0; +extern u8 D_80181CEC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181D70[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181D78[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181DCC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181E00[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181DF0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181E1C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181E94[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181E9C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181EA4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181EAC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181EB4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181EBC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181EC8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181ED4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181EE0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181EF0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181F00[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181F08[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181F10[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181F18[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181F20[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181F28[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181F30[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181F38[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181F40[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181F48[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181F50[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181F58[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181F60[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181F68[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181F70[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181F78[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181F80[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181F88[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181F90[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181F98[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181FA0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181FA8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181FB0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181FF4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181FB8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80182024[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182060[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801820B8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801820C8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801820D0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182238[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182244[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A8030; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A97F0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A91C0; +extern short D_801A9864; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A9864) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A9864)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A91C0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A9864) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A97C0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A97C0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A9864) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A9864) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A961C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A91C4; + extern s32 D_801A95D8; + extern s16 D_801A95DC; + extern s16 D_801A95E0; + extern s16 D_801A95E4; + extern s16 D_801A95E8; + extern s32 D_801A95F0; + extern s32 D_801A95F4; + extern s32 D_801A9604; + extern s16 D_801A9608; + extern s16 D_801A960C; + extern s32 D_801A9610; + extern s32 D_801A9618; + extern s32 D_801A961C[10]; + extern s32 D_801A9708; + extern s16 D_801A97C0; + extern s32 D_801A97EC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A97C0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A95D8); + D_801A95D8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A95E4, D_801A95E8 ? 0x48 : 0x40); + (*(s16*)&D_801A9864) = 2; + break; + case 0: + func_80179B28(D_801A95D8); + D_801A95D8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A95DC, D_801A95E0 ? 0x48 : 0x40); + (*(s16*)&D_801A9864) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A9708 != 0) { + func_80179B28(D_801A95D8); + D_801A95D8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A95DC, D_801A95E0 ? 0x48 : 0x40); + (*(s16*)&D_801A9864) = 1; + } else { + (*(s16*)&D_801A9864) = 3; + } + break; + case 0x32: + func_80179B28(D_801A95D8); + D_801A95D8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A95DC, + D_801A95E0 ? 0x48 : 0x40); + (*(s16*)&D_801A9864) = 1; + break; + case 2: + func_80179B28(D_801A95D8); + if (D_801A95F0 != 0) { + D_801A91C0 = D_801A95F0; + D_801A95F0 = 0; + (*(s16*)&D_801A9864) = 3; + return; + } + (*(s16*)&D_801A9864) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A9864) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A9864) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A9864) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A9864) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A9864) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A9864) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A9864) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A9864) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A9864) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A9864) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A9864) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x1B: + D_801A9610 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A9864) = 4; + D_801A91C4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A9864) = 5; + D_801A9604 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A9604 = (s32)func_8017A3B0; + (*(s16*)&D_801A9864) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x24: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A9864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A9864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A9864) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A9864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A9864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A9864) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A9864) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A9864) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A9864) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A95F4); + (*(s16*)&D_801A9864) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A95F4); + (*(s16*)&D_801A9864) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A95F4); + (*(s16*)&D_801A9864) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A95F4); + (*(s16*)&D_801A9864) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + break; + case 0x4E: + D_801A9618 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x2B: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A9864) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A97EC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A9864) = 3; + break; + case 0x34: + (*(s16*)&D_801A9864) = 3; + D_801A91C0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A95F0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A9864) = 3; + D_801A91C0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A9864) = 3; + D_801A91C0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A91C0 = *(s32 *)(D_801A91C0 + 4); + return; + case 0x37: + (*(s16*)&D_801A9864) = 3; + D_801A95DC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A95E0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A9864) = 3; + D_801A95E4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A95E8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A9864) = 3; + D_801A95DC = w1; + D_801A95E0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A9864) = 3; + D_801A95E4 = w2; + D_801A95E8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + case 0x43: + D_801A9604 = (s32)func_8017A3D8; + D_801A960C = 0; + (*(s16*)&D_801A9864) = 5; + D_801A9608 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A9864) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A9864) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A9864) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A961C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A9864) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A961C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A9864) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A961C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A9864) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A961C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A9864) = 3; + break; + default: + break; + } +Lend: + D_801A91C0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A95EC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A95EC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A95EC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A95EC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A9614; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A9614 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A95D0; + +s32 func_8017A3B0(void) { + switch (D_801A95D0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A960C; +extern short D_801A9608; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A960C) { + case 0: + func_800D0CA0(1); + D_801A960C = D_801A960C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A9608; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A960C = D_801A960C + 1; + if (D_801A960C < 0x1E) { + return 0; + } + D_801A960C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A964C; + extern s16 D_801A964E; + extern s16 D_801A9650; + extern s16 D_801A9644; + extern s16 D_801A9646; + extern s16 D_801A9648; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A964C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A964E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9650, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9644, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9646, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9648, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A95D4; +extern u16 D_801A9654; +extern u16 D_801A9656; +extern u16 D_801A9658; +extern s16 D_801A97F0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A97F0 = 0; + D_801A95D4 = 0; + D_801A9654 = D_80126B5E; + D_801A9656 = D_80126B62; + D_801A9658 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182380[]; + extern s16 D_801A964C; + extern s16 D_801A9644; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182380[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182380[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A964C; + s16 *p78C = &D_801A9644; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A97F0 = 1; + D_801A95D4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A95F4; + extern SV4_8017B368 D_801A95FC; + extern s16 D_801A964C; + extern s16 D_801A9644; + extern u16 D_80182380; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A95F4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A95FC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182380)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182380)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A964C) = loc0; + (*(SV4_8017B368 *)&D_801A9644) = loc1; + D_801A97F0 = 1; + D_801A95D4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182380[]; + extern s16 D_801A964C; + extern s16 D_801A964E; + extern s16 D_801A9650; + extern s16 D_801A9644; + extern s16 D_801A9646; + extern s16 D_801A9648; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182380[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182380[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A964C; + s16 *p78C = &D_801A9644; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A964E; + v798 = D_801A9650; + v78C = *p78C; + v78E = D_801A9646; + v790 = D_801A9648; + __asm__ __volatile__(""); + D_801A97F0 = 1; + D_801A95D4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A95D4; +extern s16 D_801A964C; +extern s16 D_801A964E; +extern s16 D_801A9650; +extern s16 D_801A9644; +extern s16 D_801A9646; +extern s16 D_801A9648; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A95D4 = 0; + D_801A964C = (s16) D_80114F30; + D_801A964E = (s16) D_80114F34; + D_801A9650 = (s16) D_80114F38; + D_801A9644 = (s16) D_80114F24; + D_801A9646 = (s16) D_80114F28; + D_801A9648 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A9664; +extern s16 D_801A9666; +extern s16 D_801A9668; +extern s16 D_801A966C; +extern s16 D_801A966E; +extern s16 D_801A9670; + +void func_8017B824(void) { + D_801A9664 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A9666 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A9668 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A966C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A966E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A9670 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A9664; +extern s16 D_801A9666; +extern s16 D_801A9668; +extern s16 D_801A966C; +extern s16 D_801A966E; +extern s16 D_801A9670; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A9664; + D_80114F34 = D_801A9666; + D_80114F38 = D_801A9668; + D_80114F24 = D_801A966C; + D_80114F28 = D_801A966E; + D_80114F2C = D_801A9670; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A964C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9644) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A964C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A9644) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A9654; +extern u16 D_801A9656; +extern u16 D_801A9658; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A95D4; +extern short D_801A965C; +extern short D_801A965E; +extern short D_801A9660; +extern s16 D_801A964C; +extern s16 D_801A964E; +extern s16 D_801A9650; +extern s16 D_801A9644; +extern s16 D_801A9646; +extern s16 D_801A9648; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9654); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9656); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9658); + (*(s16 *)&D_801A965C) = buf[0]; + (*(s16 *)&D_801A965E) = buf[1]; + (*(s16 *)&D_801A9660) = buf[2]; + D_801A964C = D_80114F30 + buf[0]; + D_801A95D4 = 0; + D_801A964E = D_80114F34 + buf[1]; + D_801A9650 = D_80114F38 + buf[2]; + D_801A9644 = D_80114F24 + buf[0]; + D_801A9646 = D_80114F28 + buf[1]; + D_801A9648 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A95F4; +extern SV4 D_801A95FC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A95FC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A95F4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A95FC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A95FC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A95F4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A95FC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A961C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A961C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A95D4; +extern s16 D_801A97F0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A95D4 = D_801A95D4 + 1; + if (D_801A95D4 >= 0x1F) { + D_801A97F0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A95D4; +extern s16 D_801A97F0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A95D4 = D_801A95D4 + 1; + if (0x18 < D_801A95D4) { + func_8012A4BC(); + D_801A97F0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A95D4; +extern void (*D_801A9618)(void); +extern short D_801A965C; +extern short D_801A965E; +extern short D_801A9660; +extern s16 D_801A97F0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A95D4 = D_801A95D4 + 1; + if (D_801A95D4 >= 0x19) { + if (D_801A9618 != 0) { + (*D_801A9618)(); + } else { + D_80114F30 = D_80114F30 + D_801A965C; + D_80114F34 = D_80114F34 + D_801A965E; + D_80114F38 = D_80114F38 + D_801A9660; + D_80114F24 = D_80114F24 + D_801A965C; + D_80114F28 = D_80114F28 + D_801A965E; + D_80114F2C = D_80114F2C + D_801A9660; + func_8012A4BC(); + } + D_801A97F0 = 0; + } +} + + + +extern void (*D_80182420[])(void); + +void func_8017BE60(void *a0) { + D_80182420[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018247C[])(void); + +void func_8017CD9C(void *a0) { + D_8018247C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80182484[])(void); + +void func_8017CE40(void *a0) { + D_80182484[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CEBC); + + +extern s32 func_800167F0(s32 arg); +extern void func_800CFBCC(s32 arg); + +s32 func_8017CF38(void) { + if ((func_800167F0(0x4) & 0xFFFF) == 0) { + return 0; + } else { + func_800CFBCC(0x2); + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CF70); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CF98); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017CFC0); + + +extern void (*D_801824A0[])(void); + +void func_8017D008(void *a0) { + D_801824A0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D044); + +void func_8017D0E4(void * arg0) { + *(s32 *)((char *)arg0 + 0x40) = -0x38D; + *(s32 *)((char *)arg0 + 0x44) = -0x44E; + *(s32 *)((char *)arg0 + 0x4C) = -0x2ED; + *(s32 *)((char *)arg0 + 0x3C) = 0; + *(s32 *)((char *)arg0 + 0x48) = 0; + *(s32 *)((char *)arg0 + 0x50) = -0xD8; + } + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D518); + + +extern void (*D_80183228[])(void); + +void func_8017D704(void *a0) { + D_80183228[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D740); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D7C8); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D7F8); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D814); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D8DC); + +void func_8017D920(void) { +} + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017D928); + +void func_8017DA28(void) { +} + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DA30); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DC38); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DCC0); + + +extern void (*D_80183254[])(void); + +void func_8017DD64(void *a0) { + D_80183254[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DDA0); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DE30); + + +extern void (*D_80183264[])(void); + +void func_8017DEA8(void *a0) { + D_80183264[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DEE4); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017DF88); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E014); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E070); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E170); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E270); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E2EC); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E78C); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E918); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_80178D40", func_8017E94C); + + diff --git a/src/ov_SC03_115/ov_SC03_115_jr_801734BC.c b/src/ov_SC03_115/ov_SC03_115_jr_801734BC.c index 83d8bad2f..d9437d4bf 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_801734BC.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_801734BC.c @@ -3084,1089 +3084,3 @@ void func_80178D18(void) { D_8019513C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80194F44; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80194F44 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80194F44; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80194F44 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80194F6C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80194F6C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80194F28; - -s32 func_8017A3B0(void) { - switch (D_80194F28) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80194F64; -extern short D_80194F60; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80194F64) { - case 0: - func_800D0CA0(1); - D_80194F64 = D_80194F64 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80194F60; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80194F64 = D_80194F64 + 1; - if (D_80194F64 < 0x1E) { - return 0; - } - D_80194F64 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80194FA4; - extern s16 D_80194FA6; - extern s16 D_80194FA8; - extern s16 D_80194F9C; - extern s16 D_80194F9E; - extern s16 D_80194FA0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194FA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194FA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194FA8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80194F9C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80194F9E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194FA0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80194F2C; -extern u16 D_80194FAC; -extern u16 D_80194FAE; -extern u16 D_80194FB0; -extern s16 D_801950C8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801950C8 = 0; - D_80194F2C = 0; - D_80194FAC = D_80126B5E; - D_80194FAE = D_80126B62; - D_80194FB0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183DEC[]; - extern s16 D_80194FA4; - extern s16 D_80194F9C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183DEC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183DEC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194FA4; - s16 *p78C = &D_80194F9C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801950C8 = 1; - D_80194F2C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80194F4C; - extern SV4_8017B368 D_80194F54; - extern s16 D_80194FA4; - extern s16 D_80194F9C; - extern u16 D_80183DEC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80194F4C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80194F54; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183DEC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183DEC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80194FA4) = loc0; - (*(SV4_8017B368 *)&D_80194F9C) = loc1; - D_801950C8 = 1; - D_80194F2C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183DEC[]; - extern s16 D_80194FA4; - extern s16 D_80194FA6; - extern s16 D_80194FA8; - extern s16 D_80194F9C; - extern s16 D_80194F9E; - extern s16 D_80194FA0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183DEC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183DEC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194FA4; - s16 *p78C = &D_80194F9C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80194FA6; - v798 = D_80194FA8; - v78C = *p78C; - v78E = D_80194F9E; - v790 = D_80194FA0; - __asm__ __volatile__(""); - D_801950C8 = 1; - D_80194F2C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80194F2C; -extern s16 D_80194FA4; -extern s16 D_80194FA6; -extern s16 D_80194FA8; -extern s16 D_80194F9C; -extern s16 D_80194F9E; -extern s16 D_80194FA0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80194F2C = 0; - D_80194FA4 = (s16) D_80114F30; - D_80194FA6 = (s16) D_80114F34; - D_80194FA8 = (s16) D_80114F38; - D_80194F9C = (s16) D_80114F24; - D_80194F9E = (s16) D_80114F28; - D_80194FA0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80194FBC; -extern s16 D_80194FBE; -extern s16 D_80194FC0; -extern s16 D_80194FC4; -extern s16 D_80194FC6; -extern s16 D_80194FC8; - -void func_8017B824(void) { - D_80194FBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80194FBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80194FC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80194FC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80194FC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80194FC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80194FBC; -extern s16 D_80194FBE; -extern s16 D_80194FC0; -extern s16 D_80194FC4; -extern s16 D_80194FC6; -extern s16 D_80194FC8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80194FBC; - D_80114F34 = D_80194FBE; - D_80114F38 = D_80194FC0; - D_80114F24 = D_80194FC4; - D_80114F28 = D_80194FC6; - D_80114F2C = D_80194FC8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80194FA4), src[8..15] -> (*(S8_8017B8E8 *)&D_80194F9C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80194FA4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80194F9C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80194FAC; -extern u16 D_80194FAE; -extern u16 D_80194FB0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80194F2C; -extern short D_80194FB4; -extern short D_80194FB6; -extern short D_80194FB8; -extern s16 D_80194FA4; -extern s16 D_80194FA6; -extern s16 D_80194FA8; -extern s16 D_80194F9C; -extern s16 D_80194F9E; -extern s16 D_80194FA0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80194FAC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80194FAE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194FB0); - (*(s16 *)&D_80194FB4) = buf[0]; - (*(s16 *)&D_80194FB6) = buf[1]; - (*(s16 *)&D_80194FB8) = buf[2]; - D_80194FA4 = D_80114F30 + buf[0]; - D_80194F2C = 0; - D_80194FA6 = D_80114F34 + buf[1]; - D_80194FA8 = D_80114F38 + buf[2]; - D_80194F9C = D_80114F24 + buf[0]; - D_80194F9E = D_80114F28 + buf[1]; - D_80194FA0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80194F4C; -extern SV4 D_80194F54; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80194F54) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80194F4C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80194F54 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80194F54)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80194F4C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80194F54) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80194F74[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80194F74; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80194F2C; -extern s16 D_801950C8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80194F2C = D_80194F2C + 1; - if (D_80194F2C >= 0x1F) { - D_801950C8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80194F2C; -extern s16 D_801950C8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80194F2C = D_80194F2C + 1; - if (0x18 < D_80194F2C) { - func_8012A4BC(); - D_801950C8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80194F2C; -extern void (*D_80194F70)(void); -extern short D_80194FB4; -extern short D_80194FB6; -extern short D_80194FB8; -extern s16 D_801950C8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80194F2C = D_80194F2C + 1; - if (D_80194F2C >= 0x19) { - if (D_80194F70 != 0) { - (*D_80194F70)(); - } else { - D_80114F30 = D_80114F30 + D_80194FB4; - D_80114F34 = D_80114F34 + D_80194FB6; - D_80114F38 = D_80114F38 + D_80194FB8; - D_80114F24 = D_80114F24 + D_80194FB4; - D_80114F28 = D_80114F28 + D_80194FB6; - D_80114F2C = D_80114F2C + D_80194FB8; - func_8012A4BC(); - } - D_801950C8 = 0; - } -} - - - -extern void (*D_80183E8C[])(void); - -void func_8017BE60(void *a0) { - D_80183E8C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017BEBC); - - -extern void (*D_80183EE8[])(void); - -void func_8017CD9C(void *a0) { - D_80183EE8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80183EF0[])(void); - -void func_8017CE40(void *a0) { - D_80183EF0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017CE7C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEBC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017CF38); - - -extern void (*D_80183EFC[])(void); - -void func_8017CF58(void *a0) { - D_80183EFC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017CF94); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D008); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D030); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D058); - - -extern void (*D_80183F28[])(void); - -void func_8017D09C(void *a0) { - D_80183F28[*(u8 *)((s32)a0 + 0x214)](); -} - - -extern void func_80147060(u8 *a0); -extern void func_80171A1C(u8 *a0); - -void func_8017D0D8(s32 arg0) { - ((s32 (*)(s32))func_80147060)(arg0); - ((void (*)(s32))func_80171A1C)(arg0); -} - - -extern void func_80171A1C(u8 *a0); - void func_8017D108(void) { - ((void (*)(void))func_80171A1C)(); - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D128); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D1A4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D1EC); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D234); - -void func_8017D2B4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D2BC); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D2D0); - - -extern void (*D_80183F44[])(void); - -void func_8017D374(void *a0) { - D_80183F44[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D3B0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D420); - - -extern void (*D_80184110[])(void); - -void func_8017D5B8(void *a0) { - D_80184110[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_80194FE4; - s32 func_8017D5F4(void) { - return 0x2 - D_80194FE4; - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D608); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D628); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D684); - -extern s32 func_8017D058(void); - void func_8017D710(void) { - func_8017D058(); - } - - -extern s32 func_8017D2BC(void); - void func_8017D730(void) { - func_8017D2BC(); - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D750); - -void func_8017D7BC(void *a0) { - *(s16 *)((s32)a0 + 0x50) = 0; - *(s16 *)((s32)a0 + 0x52) = 0; - *(s16 *)((s32)a0 + 0x54) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D7CC); - -void func_8017D8C0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D8C8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D948); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017D9C4); - -extern s32 func_8017DA34(void); - -s32 func_8017DA34(void) { - return 0x59; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DA3C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DAC8); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_8018F71C; - void func_8017DB44(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_8018F71C); - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DC44); - -extern s32 func_8012BEE8(s32 arg); - void func_8017DCB8(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DCEC); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DDB0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DE88); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DF68); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017DFB0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E0D8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E190); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E220); - - -extern s32 func_8012BEE8(s32 arg); - extern void func_8017EADC(s32 arg); - void func_8017E264(s32 arg0) { - if (!func_8012BEE8(arg0)) { - func_8017EADC(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E29C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E2C4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E2F4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E380); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E438); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E528); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E580); - - -void func_8017E624(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E634); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E71C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E800); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E8D0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017E998); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EA70); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EADC); - - -extern s32 rand(void); - void func_8017EBD8(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EC14); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EC80); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EE7C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017EFB8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F04C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F0C8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F188); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F2B0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F420); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F5B4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F808); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017F914); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FAB0); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FB6C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FBF8); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_8018FF78[]; - s32 func_8017FC30(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8018FF78[0], &D_8018FF78[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FC5C); - -extern u8 D_80078EC1; - s32 func_8017FD08(void) { - return *(u8 *)&D_80078EC1 == 0x15; - } - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FD20); - - -extern void (*D_801925E4[])(void); - -void func_8017FD8C(void *a0) { - D_801925E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FDC8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_8017FEC4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_80180154); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_801802E8); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_80180340); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_801734BC", func_80180400); - diff --git a/src/ov_SC03_115/ov_SC03_115_jr_80178D40.c b/src/ov_SC03_115/ov_SC03_115_jr_80178D40.c new file mode 100644 index 000000000..763ee39cb --- /dev/null +++ b/src/ov_SC03_115/ov_SC03_115_jr_80178D40.c @@ -0,0 +1,4535 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183694[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80194298; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80183688[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801836CC[]; +extern unsigned short D_801836D4[]; +extern unsigned short D_801836DC[]; +extern unsigned char D_801942A0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80194298; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801836E4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801943D4; +extern M2C_UNK D_801943D8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80194360; +extern void (*D_80183714[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801943DC[]; +extern u8 D_801943E4[]; +extern u8 D_80194394[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018371C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183738[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80183740[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801837A8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018374C; +extern u8 D_80183758; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801837DC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801837E4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80183838[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018386C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018385C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80183888; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183900[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183908[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183910[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183918[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80183920[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183928[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80183934[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80183940[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018394C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018395C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018396C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80183974[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018397C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183984[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018398C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183994[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018399C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801839A4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801839AC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801839B4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801839BC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801839C4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801839CC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801839D4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801839DC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801839E4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801839EC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801839F4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801839FC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183A04[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183A0C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183A14[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183A1C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80183A60[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183A24; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80183A90[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80183ACC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183B24[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183B34[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183B3C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80183CA4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80183CB0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801939A4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801950C8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80194B18; +extern short D_8019513C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019513C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019513C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80194B18 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019513C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80195098 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80195098 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019513C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019513C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80194F74[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80194B1C; + extern s32 D_80194F30; + extern s16 D_80194F34; + extern s16 D_80194F38; + extern s16 D_80194F3C; + extern s16 D_80194F40; + extern s32 D_80194F48; + extern s32 D_80194F4C; + extern s32 D_80194F5C; + extern s16 D_80194F60; + extern s16 D_80194F64; + extern s32 D_80194F68; + extern s32 D_80194F70; + extern s32 D_80194F74[10]; + extern s32 D_80194FE0; + extern s16 D_80195098; + extern s32 D_801950C4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80195098; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80194F30); + D_80194F30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80194F3C, D_80194F40 ? 0x48 : 0x40); + (*(s16*)&D_8019513C) = 2; + break; + case 0: + func_80179B28(D_80194F30); + D_80194F30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80194F34, D_80194F38 ? 0x48 : 0x40); + (*(s16*)&D_8019513C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80194FE0 != 0) { + func_80179B28(D_80194F30); + D_80194F30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80194F34, D_80194F38 ? 0x48 : 0x40); + (*(s16*)&D_8019513C) = 1; + } else { + (*(s16*)&D_8019513C) = 3; + } + break; + case 0x32: + func_80179B28(D_80194F30); + D_80194F30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80194F34, + D_80194F38 ? 0x48 : 0x40); + (*(s16*)&D_8019513C) = 1; + break; + case 2: + func_80179B28(D_80194F30); + if (D_80194F48 != 0) { + D_80194B18 = D_80194F48; + D_80194F48 = 0; + (*(s16*)&D_8019513C) = 3; + return; + } + (*(s16*)&D_8019513C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019513C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019513C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019513C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019513C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019513C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019513C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019513C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019513C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019513C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019513C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019513C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x1B: + D_80194F68 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019513C) = 4; + D_80194B1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019513C) = 5; + D_80194F5C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80194F5C = (s32)func_8017A3B0; + (*(s16*)&D_8019513C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x24: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019513C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019513C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019513C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019513C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019513C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019513C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019513C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019513C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019513C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80194F4C); + (*(s16*)&D_8019513C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80194F4C); + (*(s16*)&D_8019513C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80194F4C); + (*(s16*)&D_8019513C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80194F4C); + (*(s16*)&D_8019513C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + break; + case 0x4E: + D_80194F70 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019513C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801950C4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019513C) = 3; + break; + case 0x34: + (*(s16*)&D_8019513C) = 3; + D_80194B18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80194F48 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019513C) = 3; + D_80194B18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019513C) = 3; + D_80194B18 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80194B18 = *(s32 *)(D_80194B18 + 4); + return; + case 0x37: + (*(s16*)&D_8019513C) = 3; + D_80194F34 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80194F38 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019513C) = 3; + D_80194F3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80194F40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019513C) = 3; + D_80194F34 = w1; + D_80194F38 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019513C) = 3; + D_80194F3C = w2; + D_80194F40 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + case 0x43: + D_80194F5C = (s32)func_8017A3D8; + D_80194F64 = 0; + (*(s16*)&D_8019513C) = 5; + D_80194F60 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019513C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019513C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019513C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80194F74; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019513C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80194F74; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019513C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80194F74[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019513C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80194F74; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019513C) = 3; + break; + default: + break; + } +Lend: + D_80194B18 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80194F44; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80194F44 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80194F44; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80194F44 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80194F6C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80194F6C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80194F28; + +s32 func_8017A3B0(void) { + switch (D_80194F28) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80194F64; +extern short D_80194F60; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80194F64) { + case 0: + func_800D0CA0(1); + D_80194F64 = D_80194F64 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80194F60; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80194F64 = D_80194F64 + 1; + if (D_80194F64 < 0x1E) { + return 0; + } + D_80194F64 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80194FA4; + extern s16 D_80194FA6; + extern s16 D_80194FA8; + extern s16 D_80194F9C; + extern s16 D_80194F9E; + extern s16 D_80194FA0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194FA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194FA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194FA8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80194F9C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80194F9E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194FA0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80194F2C; +extern u16 D_80194FAC; +extern u16 D_80194FAE; +extern u16 D_80194FB0; +extern s16 D_801950C8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801950C8 = 0; + D_80194F2C = 0; + D_80194FAC = D_80126B5E; + D_80194FAE = D_80126B62; + D_80194FB0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183DEC[]; + extern s16 D_80194FA4; + extern s16 D_80194F9C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183DEC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183DEC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194FA4; + s16 *p78C = &D_80194F9C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801950C8 = 1; + D_80194F2C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80194F4C; + extern SV4_8017B368 D_80194F54; + extern s16 D_80194FA4; + extern s16 D_80194F9C; + extern u16 D_80183DEC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80194F4C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80194F54; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183DEC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183DEC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80194FA4) = loc0; + (*(SV4_8017B368 *)&D_80194F9C) = loc1; + D_801950C8 = 1; + D_80194F2C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183DEC[]; + extern s16 D_80194FA4; + extern s16 D_80194FA6; + extern s16 D_80194FA8; + extern s16 D_80194F9C; + extern s16 D_80194F9E; + extern s16 D_80194FA0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183DEC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183DEC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194FA4; + s16 *p78C = &D_80194F9C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80194FA6; + v798 = D_80194FA8; + v78C = *p78C; + v78E = D_80194F9E; + v790 = D_80194FA0; + __asm__ __volatile__(""); + D_801950C8 = 1; + D_80194F2C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80194F2C; +extern s16 D_80194FA4; +extern s16 D_80194FA6; +extern s16 D_80194FA8; +extern s16 D_80194F9C; +extern s16 D_80194F9E; +extern s16 D_80194FA0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80194F2C = 0; + D_80194FA4 = (s16) D_80114F30; + D_80194FA6 = (s16) D_80114F34; + D_80194FA8 = (s16) D_80114F38; + D_80194F9C = (s16) D_80114F24; + D_80194F9E = (s16) D_80114F28; + D_80194FA0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80194FBC; +extern s16 D_80194FBE; +extern s16 D_80194FC0; +extern s16 D_80194FC4; +extern s16 D_80194FC6; +extern s16 D_80194FC8; + +void func_8017B824(void) { + D_80194FBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80194FBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80194FC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80194FC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80194FC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80194FC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80194FBC; +extern s16 D_80194FBE; +extern s16 D_80194FC0; +extern s16 D_80194FC4; +extern s16 D_80194FC6; +extern s16 D_80194FC8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80194FBC; + D_80114F34 = D_80194FBE; + D_80114F38 = D_80194FC0; + D_80114F24 = D_80194FC4; + D_80114F28 = D_80194FC6; + D_80114F2C = D_80194FC8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80194FA4), src[8..15] -> (*(S8_8017B8E8 *)&D_80194F9C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80194FA4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80194F9C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80194FAC; +extern u16 D_80194FAE; +extern u16 D_80194FB0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80194F2C; +extern short D_80194FB4; +extern short D_80194FB6; +extern short D_80194FB8; +extern s16 D_80194FA4; +extern s16 D_80194FA6; +extern s16 D_80194FA8; +extern s16 D_80194F9C; +extern s16 D_80194F9E; +extern s16 D_80194FA0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80194FAC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80194FAE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194FB0); + (*(s16 *)&D_80194FB4) = buf[0]; + (*(s16 *)&D_80194FB6) = buf[1]; + (*(s16 *)&D_80194FB8) = buf[2]; + D_80194FA4 = D_80114F30 + buf[0]; + D_80194F2C = 0; + D_80194FA6 = D_80114F34 + buf[1]; + D_80194FA8 = D_80114F38 + buf[2]; + D_80194F9C = D_80114F24 + buf[0]; + D_80194F9E = D_80114F28 + buf[1]; + D_80194FA0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80194F4C; +extern SV4 D_80194F54; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80194F54) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80194F4C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80194F54 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80194F54)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80194F4C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80194F54) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80194F74[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80194F74; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80194F2C; +extern s16 D_801950C8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80194F2C = D_80194F2C + 1; + if (D_80194F2C >= 0x1F) { + D_801950C8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80194F2C; +extern s16 D_801950C8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80194F2C = D_80194F2C + 1; + if (0x18 < D_80194F2C) { + func_8012A4BC(); + D_801950C8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80194F2C; +extern void (*D_80194F70)(void); +extern short D_80194FB4; +extern short D_80194FB6; +extern short D_80194FB8; +extern s16 D_801950C8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80194F2C = D_80194F2C + 1; + if (D_80194F2C >= 0x19) { + if (D_80194F70 != 0) { + (*D_80194F70)(); + } else { + D_80114F30 = D_80114F30 + D_80194FB4; + D_80114F34 = D_80114F34 + D_80194FB6; + D_80114F38 = D_80114F38 + D_80194FB8; + D_80114F24 = D_80114F24 + D_80194FB4; + D_80114F28 = D_80114F28 + D_80194FB6; + D_80114F2C = D_80114F2C + D_80194FB8; + func_8012A4BC(); + } + D_801950C8 = 0; + } +} + + + +extern void (*D_80183E8C[])(void); + +void func_8017BE60(void *a0) { + D_80183E8C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017BEBC); + + +extern void (*D_80183EE8[])(void); + +void func_8017CD9C(void *a0) { + D_80183EE8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80183EF0[])(void); + +void func_8017CE40(void *a0) { + D_80183EF0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017CE7C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEBC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017CF38); + + +extern void (*D_80183EFC[])(void); + +void func_8017CF58(void *a0) { + D_80183EFC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017CF94); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D008); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D030); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D058); + + +extern void (*D_80183F28[])(void); + +void func_8017D09C(void *a0) { + D_80183F28[*(u8 *)((s32)a0 + 0x214)](); +} + + +extern void func_80147060(u8 *a0); +extern void func_80171A1C(u8 *a0); + +void func_8017D0D8(s32 arg0) { + ((s32 (*)(s32))func_80147060)(arg0); + ((void (*)(s32))func_80171A1C)(arg0); +} + + +extern void func_80171A1C(u8 *a0); + void func_8017D108(void) { + ((void (*)(void))func_80171A1C)(); + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D128); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D1A4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D1EC); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D234); + +void func_8017D2B4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D2BC); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D2D0); + + +extern void (*D_80183F44[])(void); + +void func_8017D374(void *a0) { + D_80183F44[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D3B0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D420); + + +extern void (*D_80184110[])(void); + +void func_8017D5B8(void *a0) { + D_80184110[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 D_80194FE4; + s32 func_8017D5F4(void) { + return 0x2 - D_80194FE4; + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D608); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D628); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D684); + +extern s32 func_8017D058(void); + void func_8017D710(void) { + func_8017D058(); + } + + +extern s32 func_8017D2BC(void); + void func_8017D730(void) { + func_8017D2BC(); + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D750); + +void func_8017D7BC(void *a0) { + *(s16 *)((s32)a0 + 0x50) = 0; + *(s16 *)((s32)a0 + 0x52) = 0; + *(s16 *)((s32)a0 + 0x54) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D7CC); + +void func_8017D8C0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D8C8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D948); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017D9C4); + +extern s32 func_8017DA34(void); + +s32 func_8017DA34(void) { + return 0x59; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DA3C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DAC8); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_8018F71C; + void func_8017DB44(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_8018F71C); + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DC44); + +extern s32 func_8012BEE8(s32 arg); + void func_8017DCB8(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DCEC); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DDB0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DE88); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DF68); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017DFB0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E0D8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E190); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E220); + + +extern s32 func_8012BEE8(s32 arg); + extern void func_8017EADC(s32 arg); + void func_8017E264(s32 arg0) { + if (!func_8012BEE8(arg0)) { + func_8017EADC(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E29C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E2C4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E2F4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E380); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E438); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E528); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E580); + + +void func_8017E624(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E634); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E71C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E800); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E8D0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017E998); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EA70); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EADC); + + +extern s32 rand(void); + void func_8017EBD8(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EC14); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EC80); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EE7C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017EFB8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F04C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F0C8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F188); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F2B0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F420); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F5B4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F808); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017F914); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FAB0); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FB6C); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FBF8); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_8018FF78[]; + s32 func_8017FC30(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8018FF78[0], &D_8018FF78[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FC5C); + +extern u8 D_80078EC1; + s32 func_8017FD08(void) { + return *(u8 *)&D_80078EC1 == 0x15; + } + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FD20); + + +extern void (*D_801925E4[])(void); + +void func_8017FD8C(void *a0) { + D_801925E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FDC8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_8017FEC4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_80180154); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_801802E8); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_80180340); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_80178D40", func_80180400); + + diff --git a/src/ov_SC03_116/ov_SC03_116_jr_801734BC.c b/src/ov_SC03_116/ov_SC03_116_jr_801734BC.c index 2c54a8ca7..0db3ef758 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_801734BC.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_801734BC.c @@ -3084,980 +3084,3 @@ void func_80178D18(void) { D_80197D4C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80197AD4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80197AD4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80197AD4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80197AD4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80197AFC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80197AFC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80197AB8; - -s32 func_8017A3B0(void) { - switch (D_80197AB8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80197AF4; -extern short D_80197AF0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80197AF4) { - case 0: - func_800D0CA0(1); - D_80197AF4 = D_80197AF4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80197AF0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80197AF4 = D_80197AF4 + 1; - if (D_80197AF4 < 0x1E) { - return 0; - } - D_80197AF4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80197B34; - extern s16 D_80197B36; - extern s16 D_80197B38; - extern s16 D_80197B2C; - extern s16 D_80197B2E; - extern s16 D_80197B30; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80197B34, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80197B36, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80197B38, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80197B2C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80197B2E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80197B30, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80197ABC; -extern u16 D_80197B3C; -extern u16 D_80197B3E; -extern u16 D_80197B40; -extern s16 D_80197CD8; - -void func_8017B1D8(void) { - func_8012A418(); - D_80197CD8 = 0; - D_80197ABC = 0; - D_80197B3C = D_80126B5E; - D_80197B3E = D_80126B62; - D_80197B40 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801861F0[]; - extern s16 D_80197B34; - extern s16 D_80197B2C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801861F0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801861F0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80197B34; - s16 *p78C = &D_80197B2C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80197CD8 = 1; - D_80197ABC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80197ADC; - extern SV4_8017B368 D_80197AE4; - extern s16 D_80197B34; - extern s16 D_80197B2C; - extern u16 D_801861F0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80197ADC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80197AE4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801861F0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801861F0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80197B34) = loc0; - (*(SV4_8017B368 *)&D_80197B2C) = loc1; - D_80197CD8 = 1; - D_80197ABC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801861F0[]; - extern s16 D_80197B34; - extern s16 D_80197B36; - extern s16 D_80197B38; - extern s16 D_80197B2C; - extern s16 D_80197B2E; - extern s16 D_80197B30; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801861F0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801861F0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80197B34; - s16 *p78C = &D_80197B2C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80197B36; - v798 = D_80197B38; - v78C = *p78C; - v78E = D_80197B2E; - v790 = D_80197B30; - __asm__ __volatile__(""); - D_80197CD8 = 1; - D_80197ABC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80197ABC; -extern s16 D_80197B34; -extern s16 D_80197B36; -extern s16 D_80197B38; -extern s16 D_80197B2C; -extern s16 D_80197B2E; -extern s16 D_80197B30; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80197ABC = 0; - D_80197B34 = (s16) D_80114F30; - D_80197B36 = (s16) D_80114F34; - D_80197B38 = (s16) D_80114F38; - D_80197B2C = (s16) D_80114F24; - D_80197B2E = (s16) D_80114F28; - D_80197B30 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80197B4C; -extern s16 D_80197B4E; -extern s16 D_80197B50; -extern s16 D_80197B54; -extern s16 D_80197B56; -extern s16 D_80197B58; - -void func_8017B824(void) { - D_80197B4C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80197B4E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80197B50 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80197B54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80197B56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80197B58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80197B4C; -extern s16 D_80197B4E; -extern s16 D_80197B50; -extern s16 D_80197B54; -extern s16 D_80197B56; -extern s16 D_80197B58; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80197B4C; - D_80114F34 = D_80197B4E; - D_80114F38 = D_80197B50; - D_80114F24 = D_80197B54; - D_80114F28 = D_80197B56; - D_80114F2C = D_80197B58; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80197B34), src[8..15] -> (*(S8_8017B8E8 *)&D_80197B2C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80197B34) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80197B2C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80197B3C; -extern u16 D_80197B3E; -extern u16 D_80197B40; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80197ABC; -extern short D_80197B44; -extern short D_80197B46; -extern short D_80197B48; -extern s16 D_80197B34; -extern s16 D_80197B36; -extern s16 D_80197B38; -extern s16 D_80197B2C; -extern s16 D_80197B2E; -extern s16 D_80197B30; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80197B3C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80197B3E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80197B40); - (*(s16 *)&D_80197B44) = buf[0]; - (*(s16 *)&D_80197B46) = buf[1]; - (*(s16 *)&D_80197B48) = buf[2]; - D_80197B34 = D_80114F30 + buf[0]; - D_80197ABC = 0; - D_80197B36 = D_80114F34 + buf[1]; - D_80197B38 = D_80114F38 + buf[2]; - D_80197B2C = D_80114F24 + buf[0]; - D_80197B2E = D_80114F28 + buf[1]; - D_80197B30 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80197ADC; -extern SV4 D_80197AE4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80197AE4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80197ADC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80197AE4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80197AE4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80197ADC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80197AE4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80197B04[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80197B04; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80197ABC; -extern s16 D_80197CD8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80197ABC = D_80197ABC + 1; - if (D_80197ABC >= 0x1F) { - D_80197CD8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80197ABC; -extern s16 D_80197CD8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80197ABC = D_80197ABC + 1; - if (0x18 < D_80197ABC) { - func_8012A4BC(); - D_80197CD8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80197ABC; -extern void (*D_80197B00)(void); -extern short D_80197B44; -extern short D_80197B46; -extern short D_80197B48; -extern s16 D_80197CD8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80197ABC = D_80197ABC + 1; - if (D_80197ABC >= 0x19) { - if (D_80197B00 != 0) { - (*D_80197B00)(); - } else { - D_80114F30 = D_80114F30 + D_80197B44; - D_80114F34 = D_80114F34 + D_80197B46; - D_80114F38 = D_80114F38 + D_80197B48; - D_80114F24 = D_80114F24 + D_80197B44; - D_80114F28 = D_80114F28 + D_80197B46; - D_80114F2C = D_80114F2C + D_80197B48; - func_8012A4BC(); - } - D_80197CD8 = 0; - } -} - - - -extern void (*D_80186290[])(void); - -void func_8017BE60(void *a0) { - D_80186290[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8017BF14); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", listCdBuffer); - -extern s32 D_8012704C; - void func_80180980(void) { - D_8012704C = 0x1; - } - - - -extern void (*D_801862EC[])(void); - -void func_80180994(void *a0) { - D_801862EC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801809D0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180A14(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801862F4[])(void); - -void func_80180A38(void *a0) { - D_801862F4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180A74); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180AB4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_80180B30(void) { - func_800D1EBC(); - } - - - -extern void (*D_80186300[])(void); - -void func_80180B50(void *a0) { - D_80186300[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180B8C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180C1C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180C44); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180C6C); - - -extern void (*D_80186314[])(void); - -void func_80180D04(void *a0) { - D_80186314[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180D40); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180DE0); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180F78); - - -extern void (*D_80186324[])(void); - -void func_80180FBC(void *a0) { - D_80186324[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80180FF8); - -void func_80181028(void) { -} - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181030); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801810C8); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8018117C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181204); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801812AC); - - -extern void (*D_80186344[])(void); - -void func_801814B0(void *a0) { - D_80186344[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801814EC); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181550); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181580); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181618); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181674); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801816D8); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8018172C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801817D8); - -extern void func_80181864(void); - void func_80181844(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - func_80181864(); - } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181864); - -extern void func_801818DC(void); - void func_801818B8(void *a0) { - *(short *)((char *)a0 + 0xfe) = 0; - *(short *)((char *)a0 + 0x100) = 0; - ((void (*)(void))func_801818DC)(); - } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801818DC); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181954); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801819A4); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801819F4); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181A5C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181B44); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181B88); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181C4C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181E28); - - -extern void (*D_80186578[])(void); - -void func_80181F6C(void *a0) { - D_80186578[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80181FA8); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801820AC); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8018213C); - -void func_80182238(void) { -} - -extern s32 func_80181954(void); - void func_80182240(void) { - func_80181954(); - } - - -extern s32 func_801819A4(void); - void func_80182260(void) { - func_801819A4(); - } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80182280); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801822A0); - -extern void func_8013B7AC(void); - void func_8018232C(void) { - func_8013B7AC(); - } - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_8018234C); - - -extern void (*D_80195174[])(void); - -void func_80182378(void *a0) { - D_80195174[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801823B4); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801825A8); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80182658); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_80182708); - -void func_801827B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_801734BC", func_801827C0); - diff --git a/src/ov_SC03_116/ov_SC03_116_jr_80178D40.c b/src/ov_SC03_116/ov_SC03_116_jr_80178D40.c new file mode 100644 index 000000000..2c55d500f --- /dev/null +++ b/src/ov_SC03_116/ov_SC03_116_jr_80178D40.c @@ -0,0 +1,4426 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185A98[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80196E28; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185A8C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185AD0[]; +extern unsigned short D_80185AD8[]; +extern unsigned short D_80185AE0[]; +extern unsigned char D_80196E30[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80196E28; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185AE8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80196F64; +extern M2C_UNK D_80196F68; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80196EF0; +extern void (*D_80185B18[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80196F6C[]; +extern u8 D_80196F74[]; +extern u8 D_80196F24[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80185B20[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185B3C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185B44[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185BAC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185B50; +extern u8 D_80185B5C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185BE0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185BE8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185C3C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185C70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185C60[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185C8C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185D04[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80185D0C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185D14[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80185D1C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185D24[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185D2C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185D38[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185D44[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185D50[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185D60[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185D70[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185D78[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185D80[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185D88[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185D90[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185D98[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185DA0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185DA8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185DB0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185DB8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185DC0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185DC8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185DD0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185DD8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185DE0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185DE8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185DF0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185DF8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185E00[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185E08[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185E10[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185E18[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185E20[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185E64[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185E28; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185E94[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185ED0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185F28[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185F38[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185F40[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801860A8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801860B4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80196540; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80197CD8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801976A8; +extern short D_80197D4C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_80197D4C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_80197D4C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801976A8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_80197D4C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80197CA8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80197CA8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_80197D4C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_80197D4C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80197B04[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801976AC; + extern s32 D_80197AC0; + extern s16 D_80197AC4; + extern s16 D_80197AC8; + extern s16 D_80197ACC; + extern s16 D_80197AD0; + extern s32 D_80197AD8; + extern s32 D_80197ADC; + extern s32 D_80197AEC; + extern s16 D_80197AF0; + extern s16 D_80197AF4; + extern s32 D_80197AF8; + extern s32 D_80197B00; + extern s32 D_80197B04[10]; + extern s32 D_80197BF0; + extern s16 D_80197CA8; + extern s32 D_80197CD4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80197CA8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80197AC0); + D_80197AC0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80197ACC, D_80197AD0 ? 0x48 : 0x40); + (*(s16*)&D_80197D4C) = 2; + break; + case 0: + func_80179B28(D_80197AC0); + D_80197AC0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80197AC4, D_80197AC8 ? 0x48 : 0x40); + (*(s16*)&D_80197D4C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80197BF0 != 0) { + func_80179B28(D_80197AC0); + D_80197AC0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80197AC4, D_80197AC8 ? 0x48 : 0x40); + (*(s16*)&D_80197D4C) = 1; + } else { + (*(s16*)&D_80197D4C) = 3; + } + break; + case 0x32: + func_80179B28(D_80197AC0); + D_80197AC0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80197AC4, + D_80197AC8 ? 0x48 : 0x40); + (*(s16*)&D_80197D4C) = 1; + break; + case 2: + func_80179B28(D_80197AC0); + if (D_80197AD8 != 0) { + D_801976A8 = D_80197AD8; + D_80197AD8 = 0; + (*(s16*)&D_80197D4C) = 3; + return; + } + (*(s16*)&D_80197D4C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_80197D4C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_80197D4C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80197D4C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_80197D4C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80197D4C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x1B: + D_80197AF8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_80197D4C) = 4; + D_801976AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_80197D4C) = 5; + D_80197AEC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80197AEC = (s32)func_8017A3B0; + (*(s16*)&D_80197D4C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x24: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80197D4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80197D4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_80197D4C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80197D4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80197D4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80197D4C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80197D4C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80197D4C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_80197D4C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80197ADC); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80197ADC); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80197ADC); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80197ADC); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x4E: + D_80197B00 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x2B: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_80197D4C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80197CD4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x34: + (*(s16*)&D_80197D4C) = 3; + D_801976A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80197AD8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_80197D4C) = 3; + D_801976A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_80197D4C) = 3; + D_801976A8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801976A8 = *(s32 *)(D_801976A8 + 4); + return; + case 0x37: + (*(s16*)&D_80197D4C) = 3; + D_80197AC4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80197AC8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_80197D4C) = 3; + D_80197ACC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80197AD0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_80197D4C) = 3; + D_80197AC4 = w1; + D_80197AC8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_80197D4C) = 3; + D_80197ACC = w2; + D_80197AD0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x43: + D_80197AEC = (s32)func_8017A3D8; + D_80197AF4 = 0; + (*(s16*)&D_80197D4C) = 5; + D_80197AF0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80197D4C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80197D4C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80197B04; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_80197D4C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80197B04; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_80197D4C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80197B04[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_80197D4C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80197B04; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_80197D4C) = 3; + break; + default: + break; + } +Lend: + D_801976A8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80197AD4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80197AD4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80197AD4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80197AD4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80197AFC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80197AFC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80197AB8; + +s32 func_8017A3B0(void) { + switch (D_80197AB8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80197AF4; +extern short D_80197AF0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80197AF4) { + case 0: + func_800D0CA0(1); + D_80197AF4 = D_80197AF4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80197AF0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80197AF4 = D_80197AF4 + 1; + if (D_80197AF4 < 0x1E) { + return 0; + } + D_80197AF4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80197B34; + extern s16 D_80197B36; + extern s16 D_80197B38; + extern s16 D_80197B2C; + extern s16 D_80197B2E; + extern s16 D_80197B30; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80197B34, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80197B36, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80197B38, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80197B2C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80197B2E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80197B30, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80197ABC; +extern u16 D_80197B3C; +extern u16 D_80197B3E; +extern u16 D_80197B40; +extern s16 D_80197CD8; + +void func_8017B1D8(void) { + func_8012A418(); + D_80197CD8 = 0; + D_80197ABC = 0; + D_80197B3C = D_80126B5E; + D_80197B3E = D_80126B62; + D_80197B40 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801861F0[]; + extern s16 D_80197B34; + extern s16 D_80197B2C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801861F0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801861F0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80197B34; + s16 *p78C = &D_80197B2C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80197CD8 = 1; + D_80197ABC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80197ADC; + extern SV4_8017B368 D_80197AE4; + extern s16 D_80197B34; + extern s16 D_80197B2C; + extern u16 D_801861F0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80197ADC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80197AE4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801861F0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801861F0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80197B34) = loc0; + (*(SV4_8017B368 *)&D_80197B2C) = loc1; + D_80197CD8 = 1; + D_80197ABC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801861F0[]; + extern s16 D_80197B34; + extern s16 D_80197B36; + extern s16 D_80197B38; + extern s16 D_80197B2C; + extern s16 D_80197B2E; + extern s16 D_80197B30; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801861F0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801861F0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80197B34; + s16 *p78C = &D_80197B2C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80197B36; + v798 = D_80197B38; + v78C = *p78C; + v78E = D_80197B2E; + v790 = D_80197B30; + __asm__ __volatile__(""); + D_80197CD8 = 1; + D_80197ABC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80197ABC; +extern s16 D_80197B34; +extern s16 D_80197B36; +extern s16 D_80197B38; +extern s16 D_80197B2C; +extern s16 D_80197B2E; +extern s16 D_80197B30; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80197ABC = 0; + D_80197B34 = (s16) D_80114F30; + D_80197B36 = (s16) D_80114F34; + D_80197B38 = (s16) D_80114F38; + D_80197B2C = (s16) D_80114F24; + D_80197B2E = (s16) D_80114F28; + D_80197B30 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80197B4C; +extern s16 D_80197B4E; +extern s16 D_80197B50; +extern s16 D_80197B54; +extern s16 D_80197B56; +extern s16 D_80197B58; + +void func_8017B824(void) { + D_80197B4C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80197B4E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80197B50 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80197B54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80197B56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80197B58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80197B4C; +extern s16 D_80197B4E; +extern s16 D_80197B50; +extern s16 D_80197B54; +extern s16 D_80197B56; +extern s16 D_80197B58; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80197B4C; + D_80114F34 = D_80197B4E; + D_80114F38 = D_80197B50; + D_80114F24 = D_80197B54; + D_80114F28 = D_80197B56; + D_80114F2C = D_80197B58; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80197B34), src[8..15] -> (*(S8_8017B8E8 *)&D_80197B2C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80197B34) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80197B2C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80197B3C; +extern u16 D_80197B3E; +extern u16 D_80197B40; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80197ABC; +extern short D_80197B44; +extern short D_80197B46; +extern short D_80197B48; +extern s16 D_80197B34; +extern s16 D_80197B36; +extern s16 D_80197B38; +extern s16 D_80197B2C; +extern s16 D_80197B2E; +extern s16 D_80197B30; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80197B3C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80197B3E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80197B40); + (*(s16 *)&D_80197B44) = buf[0]; + (*(s16 *)&D_80197B46) = buf[1]; + (*(s16 *)&D_80197B48) = buf[2]; + D_80197B34 = D_80114F30 + buf[0]; + D_80197ABC = 0; + D_80197B36 = D_80114F34 + buf[1]; + D_80197B38 = D_80114F38 + buf[2]; + D_80197B2C = D_80114F24 + buf[0]; + D_80197B2E = D_80114F28 + buf[1]; + D_80197B30 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80197ADC; +extern SV4 D_80197AE4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80197AE4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80197ADC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80197AE4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80197AE4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80197ADC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80197AE4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80197B04[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80197B04; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80197ABC; +extern s16 D_80197CD8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80197ABC = D_80197ABC + 1; + if (D_80197ABC >= 0x1F) { + D_80197CD8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80197ABC; +extern s16 D_80197CD8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80197ABC = D_80197ABC + 1; + if (0x18 < D_80197ABC) { + func_8012A4BC(); + D_80197CD8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80197ABC; +extern void (*D_80197B00)(void); +extern short D_80197B44; +extern short D_80197B46; +extern short D_80197B48; +extern s16 D_80197CD8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80197ABC = D_80197ABC + 1; + if (D_80197ABC >= 0x19) { + if (D_80197B00 != 0) { + (*D_80197B00)(); + } else { + D_80114F30 = D_80114F30 + D_80197B44; + D_80114F34 = D_80114F34 + D_80197B46; + D_80114F38 = D_80114F38 + D_80197B48; + D_80114F24 = D_80114F24 + D_80197B44; + D_80114F28 = D_80114F28 + D_80197B46; + D_80114F2C = D_80114F2C + D_80197B48; + func_8012A4BC(); + } + D_80197CD8 = 0; + } +} + + + +extern void (*D_80186290[])(void); + +void func_8017BE60(void *a0) { + D_80186290[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8017BF14); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", listCdBuffer); + +extern s32 D_8012704C; + void func_80180980(void) { + D_8012704C = 0x1; + } + + + +extern void (*D_801862EC[])(void); + +void func_80180994(void *a0) { + D_801862EC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801809D0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180A14(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801862F4[])(void); + +void func_80180A38(void *a0) { + D_801862F4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180A74); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180AB4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_80180B30(void) { + func_800D1EBC(); + } + + + +extern void (*D_80186300[])(void); + +void func_80180B50(void *a0) { + D_80186300[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180B8C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180C1C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180C44); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180C6C); + + +extern void (*D_80186314[])(void); + +void func_80180D04(void *a0) { + D_80186314[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180D40); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180DE0); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180F78); + + +extern void (*D_80186324[])(void); + +void func_80180FBC(void *a0) { + D_80186324[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80180FF8); + +void func_80181028(void) { +} + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181030); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801810C8); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8018117C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181204); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801812AC); + + +extern void (*D_80186344[])(void); + +void func_801814B0(void *a0) { + D_80186344[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801814EC); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181550); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181580); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181618); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181674); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801816D8); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8018172C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801817D8); + +extern void func_80181864(void); + void func_80181844(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + func_80181864(); + } + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181864); + +extern void func_801818DC(void); + void func_801818B8(void *a0) { + *(short *)((char *)a0 + 0xfe) = 0; + *(short *)((char *)a0 + 0x100) = 0; + ((void (*)(void))func_801818DC)(); + } + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801818DC); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181954); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801819A4); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801819F4); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181A5C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181B44); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181B88); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181C4C); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181E28); + + +extern void (*D_80186578[])(void); + +void func_80181F6C(void *a0) { + D_80186578[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80181FA8); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801820AC); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8018213C); + +void func_80182238(void) { +} + +extern s32 func_80181954(void); + void func_80182240(void) { + func_80181954(); + } + + +extern s32 func_801819A4(void); + void func_80182260(void) { + func_801819A4(); + } + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80182280); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801822A0); + +extern void func_8013B7AC(void); + void func_8018232C(void) { + func_8013B7AC(); + } + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_8018234C); + + +extern void (*D_80195174[])(void); + +void func_80182378(void *a0) { + D_80195174[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801823B4); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801825A8); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80182658); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_80182708); + +void func_801827B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_80178D40", func_801827C0); + + diff --git a/src/ov_SC03_117/ov_SC03_117_jr_801734BC.c b/src/ov_SC03_117/ov_SC03_117_jr_801734BC.c index f92ed5aa6..a26b30ac7 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_801734BC.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_801734BC.c @@ -3084,1322 +3084,3 @@ void func_80178D18(void) { D_801CE944 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CE24C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CE24C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CE24C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CE24C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CE274; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CE274 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CE230; - -s32 func_8017A3B0(void) { - switch (D_801CE230) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CE2AC; - extern s16 D_801CE2AE; - extern s16 D_801CE2B0; - extern s16 D_801CE2A4; - extern s16 D_801CE2A6; - extern s16 D_801CE2A8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CE2AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CE2AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CE2B0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CE2A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CE2A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CE2A8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CE234; -extern u16 D_801CE2B4; -extern u16 D_801CE2B6; -extern u16 D_801CE2B8; -extern s16 D_801CE8D0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801CE8D0 = 0; - D_801CE234 = 0; - D_801CE2B4 = D_80126B5E; - D_801CE2B6 = D_80126B62; - D_801CE2B8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801881FC[]; - extern s16 D_801CE2AC; - extern s16 D_801CE2A4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801881FC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801881FC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CE2AC; - s16 *p78C = &D_801CE2A4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801CE8D0 = 1; - D_801CE234 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CE254; - extern SV4_8017B368 D_801CE25C; - extern s16 D_801CE2AC; - extern s16 D_801CE2A4; - extern u16 D_801881FC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CE254; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CE25C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801881FC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801881FC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CE2AC) = loc0; - (*(SV4_8017B368 *)&D_801CE2A4) = loc1; - D_801CE8D0 = 1; - D_801CE234 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801881FC[]; - extern s16 D_801CE2AC; - extern s16 D_801CE2AE; - extern s16 D_801CE2B0; - extern s16 D_801CE2A4; - extern s16 D_801CE2A6; - extern s16 D_801CE2A8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801881FC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801881FC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CE2AC; - s16 *p78C = &D_801CE2A4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CE2AE; - v798 = D_801CE2B0; - v78C = *p78C; - v78E = D_801CE2A6; - v790 = D_801CE2A8; - __asm__ __volatile__(""); - D_801CE8D0 = 1; - D_801CE234 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CE234; -extern s16 D_801CE2AC; -extern s16 D_801CE2AE; -extern s16 D_801CE2B0; -extern s16 D_801CE2A4; -extern s16 D_801CE2A6; -extern s16 D_801CE2A8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CE234 = 0; - D_801CE2AC = (s16) D_80114F30; - D_801CE2AE = (s16) D_80114F34; - D_801CE2B0 = (s16) D_80114F38; - D_801CE2A4 = (s16) D_80114F24; - D_801CE2A6 = (s16) D_80114F28; - D_801CE2A8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CE2C4; -extern s16 D_801CE2C6; -extern s16 D_801CE2C8; -extern s16 D_801CE2CC; -extern s16 D_801CE2CE; -extern s16 D_801CE2D0; - -void func_8017B824(void) { - D_801CE2C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CE2C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CE2C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CE2CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CE2CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CE2D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CE2C4; -extern s16 D_801CE2C6; -extern s16 D_801CE2C8; -extern s16 D_801CE2CC; -extern s16 D_801CE2CE; -extern s16 D_801CE2D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CE2C4; - D_80114F34 = D_801CE2C6; - D_80114F38 = D_801CE2C8; - D_80114F24 = D_801CE2CC; - D_80114F28 = D_801CE2CE; - D_80114F2C = D_801CE2D0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CE2AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801CE2A4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CE2AC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CE2A4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CE2B4; -extern u16 D_801CE2B6; -extern u16 D_801CE2B8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CE234; -extern short D_801CE2BC; -extern short D_801CE2BE; -extern short D_801CE2C0; -extern s16 D_801CE2AC; -extern s16 D_801CE2AE; -extern s16 D_801CE2B0; -extern s16 D_801CE2A4; -extern s16 D_801CE2A6; -extern s16 D_801CE2A8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CE2B4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CE2B6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CE2B8); - (*(s16 *)&D_801CE2BC) = buf[0]; - (*(s16 *)&D_801CE2BE) = buf[1]; - (*(s16 *)&D_801CE2C0) = buf[2]; - D_801CE2AC = D_80114F30 + buf[0]; - D_801CE234 = 0; - D_801CE2AE = D_80114F34 + buf[1]; - D_801CE2B0 = D_80114F38 + buf[2]; - D_801CE2A4 = D_80114F24 + buf[0]; - D_801CE2A6 = D_80114F28 + buf[1]; - D_801CE2A8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CE254; -extern SV4 D_801CE25C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CE25C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CE254 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CE25C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CE25C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CE254) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CE25C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CE27C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CE27C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CE234; -extern s16 D_801CE8D0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CE234 = D_801CE234 + 1; - if (D_801CE234 >= 0x1F) { - D_801CE8D0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CE234; -extern s16 D_801CE8D0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CE234 = D_801CE234 + 1; - if (0x18 < D_801CE234) { - func_8012A4BC(); - D_801CE8D0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CE234; -extern void (*D_801CE278)(void); -extern short D_801CE2BC; -extern short D_801CE2BE; -extern short D_801CE2C0; -extern s16 D_801CE8D0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CE234 = D_801CE234 + 1; - if (D_801CE234 >= 0x19) { - if (D_801CE278 != 0) { - (*D_801CE278)(); - } else { - D_80114F30 = D_80114F30 + D_801CE2BC; - D_80114F34 = D_80114F34 + D_801CE2BE; - D_80114F38 = D_80114F38 + D_801CE2C0; - D_80114F24 = D_80114F24 + D_801CE2BC; - D_80114F28 = D_80114F28 + D_801CE2BE; - D_80114F2C = D_80114F2C + D_801CE2C0; - func_8012A4BC(); - } - D_801CE8D0 = 0; - } -} - - - -extern void (*D_8018829C[])(void); - -void func_8017BE60(void *a0) { - D_8018829C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017BEBC); - - -extern void (*D_80188358[])(void); - -void func_8017CD9C(void *a0) { - D_80188358[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CDD8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CE18); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CE94); - -void func_8017CEF4(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CEFC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CF24); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CF50); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017CFB0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D07C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D248); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D2A4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D300); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D364); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D414); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D4D8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D598); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D5DC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D6A8); - - -extern void (*D_801883FC[])(void); - -void func_8017D804(void *a0) { - D_801883FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D840); - - -extern void (*D_8018841C[])(void); - -void func_8017D8A0(void *a0) { - D_8018841C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017D8DC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DAA0); - - -extern void (*D_80188424[])(void); - -void func_8017DB34(void *a0) { - D_80188424[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80188410; - -void func_8017DB70(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80188410, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DC14); - - -extern void (*D_8018847C[])(void); - -void func_8017DC78(void *a0) { - D_8018847C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DCB4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DCF8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188484[])(void); - -void func_8017DD1C(void *a0) { - D_80188484[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DD58); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DD9C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DDDC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DE58); - - -extern void (*D_80188498[])(void); - -void func_8017DE78(void *a0) { - D_80188498[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DEB4); - - -extern void (*D_801884A4[])(void); - -void func_8017DF44(void *a0) { - D_801884A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DF80); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017DFC0); - - -extern void (*D_801884C4[])(void); - -void func_8017DFE8(void *a0) { - D_801884C4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E024); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E058); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E0A0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E0C8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E0F0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E118); - - -extern void (*D_801884EC[])(void); - -void func_8017E1DC(void *a0) { - D_801884EC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E218); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E300); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E498); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E6A0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E99C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017E9BC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017EA1C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017EB34); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017EBCC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017ECC4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017EE78); - -extern s32 func_80029178(s32 arg); - s32 func_8017EF14(void) { - return func_80029178(0xBB) & 0xFF; - } - - -extern void func_800D0CE0(void); - void func_8017EF34(void) { - func_800D0CE0(); - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017EF54); - - -extern void (*D_80188788[])(void); - -void func_8017EFF0(void *a0) { - D_80188788[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F02C); - - -extern void (*D_80188794[])(void); - -void func_8017F25C(void *a0) { - D_80188794[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F298); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F2D8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F344); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F410); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F474); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F4C4); - - -extern void (*D_8018879C[])(void); - -void func_8017F568(void *a0) { - D_8018879C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F5A4); - - -extern void (*D_801887D4[])(void); - -void func_8017F750(void *a0) { - D_801887D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F78C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F894); - -void func_8017F97C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017F984); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FA00); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FA90); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FB04); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FC30); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FCD4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FCF0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FDB4); - - -extern void (*D_801887DC[])(void); - -void func_8017FE68(void *a0) { - D_801887DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FEA4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8017FED8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", listCdBuffer); - - -extern void (*D_801887E8[])(void); - -void func_80180010(void *a0) { - D_801887E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018004C(void *a0) { - *(s16 *)((char *)a0 + 0x2) += 1; - *(s32 *)((char *)a0 + 0x14) = 0x20000; - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180064); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018012C); - - -extern void (*D_80188808[])(void); - -void func_80180358(void *a0) { - D_80188808[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180394); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180454); - - -extern void (*D_80188810[])(void); - -void func_801804DC(void *a0) { - D_80188810[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180518); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180558); - - -extern void (*D_80188818[])(void); - -void func_801805EC(void *a0) { - D_80188818[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180628); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180748); - -extern void (*D_80188B40[])(void); - -void func_80180874(void *a0) { - D_80188B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801808B0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018094C); - -void func_801809C0(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801809C8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180A70); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180AB4); - - -extern void (*D_80188B5C[])(void); - -void func_80180B88(void *a0) { - D_80188B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180BC4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180C18); - -void func_80180C68(void) { -} - - -s32 func_80180C70(void) { - return 73; -} - - -extern void func_8013373C(s32 arg0); - void func_80180C78(void) { - func_8013373C(0); - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180C98); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180CF0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180D6C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180E2C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80180F54); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801810C4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181258); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801814AC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801815B8); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181754); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181810); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018189C); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801C0FBC[]; - s32 func_801818D4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801C0FBC[0], &D_801C0FBC[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181900); - - -extern u8 D_80078EC1; - s32 func_801819AC(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801819C4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181A30); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80181C80); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018242C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80182A34); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80182B68); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80182F28); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018316C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018321C); - - -extern void (*D_801C3740[])(void); - -void func_80183300(void *a0) { - D_801C3740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018333C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801833A0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183434); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018355C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018358C); - -void func_801835B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801835C0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801836AC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018372C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801837E0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801838C0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183928); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183988); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183A18); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183A8C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183ADC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183B5C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183BFC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183CCC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183D60); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183D9C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183E84); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183F48); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80183FFC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018403C); - -extern void (*D_801CB124[])(void); - -void func_80184090(void *a0) { - D_801CB124[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801840CC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801841A0); - -void func_801841C8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801841D0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_8018431C); - -extern void func_8012C218(void *a0); - void func_8018443C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184468); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184478); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184488); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_801844C8(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801844FC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184520); - -extern void (*D_801CB14C[])(void); - -void func_80184584(void *a0) { - D_801CB14C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_801845C0); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184648); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184708); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_801734BC", func_80184778); - diff --git a/src/ov_SC03_117/ov_SC03_117_jr_80178D40.c b/src/ov_SC03_117/ov_SC03_117_jr_80178D40.c new file mode 100644 index 000000000..7b7aef099 --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_80178D40.c @@ -0,0 +1,4768 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187AA4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CD5A0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187A98[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187ADC[]; +extern unsigned short D_80187AE4[]; +extern unsigned short D_80187AEC[]; +extern unsigned char D_801CD5A8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CD5A0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187AF4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CD6DC; +extern M2C_UNK D_801CD6E0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CD668; +extern void (*D_80187B24[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CD6E4[]; +extern u8 D_801CD6EC[]; +extern u8 D_801CD69C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187B2C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187B48[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187B50[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187BB8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187B5C; +extern u8 D_80187B68; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187BEC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187BF4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187C48[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187C7C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187C6C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187C98; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187D10[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187D18[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187D20[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80187D28[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187D30[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80187D38[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187D44[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187D50[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187D5C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187D6C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187D7C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187D84[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187D8C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187D94[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187D9C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187DA4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187DAC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187DB4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187DBC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187DC4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187DCC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187DD4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187DDC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187DE4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187DEC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187DF4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187DFC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187E04[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187E0C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187E14[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187E1C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187E24[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187E2C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187E70[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187E34; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187EA0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187EDC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187F34[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187F44[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187F4C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801880B4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801880C0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CCBE0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801CE8D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CDE20; +extern short D_801CE944; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801CE944) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801CE944)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CDE20 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801CE944) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801CE8A0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801CE8A0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801CE944) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801CE944) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CE27C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CDE24; + extern s32 D_801CE238; + extern s16 D_801CE23C; + extern s16 D_801CE240; + extern s16 D_801CE244; + extern s16 D_801CE248; + extern s32 D_801CE250; + extern s32 D_801CE254; + extern s32 D_801CE264; + extern s16 D_801CE268; + extern s16 D_801CE26C; + extern s32 D_801CE270; + extern s32 D_801CE278; + extern s32 D_801CE27C[10]; + extern s32 D_801CE7E8; + extern s16 D_801CE8A0; + extern s32 D_801CE8CC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801CE8A0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CE238); + D_801CE238 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CE244, D_801CE248 ? 0x48 : 0x40); + (*(s16*)&D_801CE944) = 2; + break; + case 0: + func_80179B28(D_801CE238); + D_801CE238 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CE23C, D_801CE240 ? 0x48 : 0x40); + (*(s16*)&D_801CE944) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801CE7E8 != 0) { + func_80179B28(D_801CE238); + D_801CE238 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CE23C, D_801CE240 ? 0x48 : 0x40); + (*(s16*)&D_801CE944) = 1; + } else { + (*(s16*)&D_801CE944) = 3; + } + break; + case 0x32: + func_80179B28(D_801CE238); + D_801CE238 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CE23C, + D_801CE240 ? 0x48 : 0x40); + (*(s16*)&D_801CE944) = 1; + break; + case 2: + func_80179B28(D_801CE238); + if (D_801CE250 != 0) { + D_801CDE20 = D_801CE250; + D_801CE250 = 0; + (*(s16*)&D_801CE944) = 3; + return; + } + (*(s16*)&D_801CE944) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801CE944) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801CE944) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE944) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801CE944) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801CE944) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801CE944) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE944) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801CE944) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801CE944) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801CE944) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801CE944) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x1B: + D_801CE270 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801CE944) = 4; + D_801CDE24 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801CE944) = 5; + D_801CE264 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CE264 = (s32)func_8017A3B0; + (*(s16*)&D_801CE944) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x24: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE944) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801CE944) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801CE944) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE944) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE944) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801CE944) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE944) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801CE944) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801CE944) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CE254); + (*(s16*)&D_801CE944) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CE254); + (*(s16*)&D_801CE944) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CE254); + (*(s16*)&D_801CE944) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CE254); + (*(s16*)&D_801CE944) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + break; + case 0x4E: + D_801CE278 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x2B: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801CE944) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801CE8CC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801CE944) = 3; + break; + case 0x34: + (*(s16*)&D_801CE944) = 3; + D_801CDE20 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CE250 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801CE944) = 3; + D_801CDE20 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801CE944) = 3; + D_801CDE20 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CDE20 = *(s32 *)(D_801CDE20 + 4); + return; + case 0x37: + (*(s16*)&D_801CE944) = 3; + D_801CE23C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CE240 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801CE944) = 3; + D_801CE244 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CE248 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801CE944) = 3; + D_801CE23C = w1; + D_801CE240 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801CE944) = 3; + D_801CE244 = w2; + D_801CE248 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + case 0x43: + D_801CE264 = (s32)func_8017A3D8; + D_801CE26C = 0; + (*(s16*)&D_801CE944) = 5; + D_801CE268 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801CE944) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801CE944) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801CE944) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CE27C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801CE944) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CE27C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801CE944) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CE27C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801CE944) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CE27C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801CE944) = 3; + break; + default: + break; + } +Lend: + D_801CDE20 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CE24C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CE24C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CE24C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CE24C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CE274; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CE274 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CE230; + +s32 func_8017A3B0(void) { + switch (D_801CE230) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CE2AC; + extern s16 D_801CE2AE; + extern s16 D_801CE2B0; + extern s16 D_801CE2A4; + extern s16 D_801CE2A6; + extern s16 D_801CE2A8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CE2AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CE2AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CE2B0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CE2A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CE2A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CE2A8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CE234; +extern u16 D_801CE2B4; +extern u16 D_801CE2B6; +extern u16 D_801CE2B8; +extern s16 D_801CE8D0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801CE8D0 = 0; + D_801CE234 = 0; + D_801CE2B4 = D_80126B5E; + D_801CE2B6 = D_80126B62; + D_801CE2B8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801881FC[]; + extern s16 D_801CE2AC; + extern s16 D_801CE2A4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801881FC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801881FC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CE2AC; + s16 *p78C = &D_801CE2A4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801CE8D0 = 1; + D_801CE234 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CE254; + extern SV4_8017B368 D_801CE25C; + extern s16 D_801CE2AC; + extern s16 D_801CE2A4; + extern u16 D_801881FC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CE254; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CE25C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801881FC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801881FC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CE2AC) = loc0; + (*(SV4_8017B368 *)&D_801CE2A4) = loc1; + D_801CE8D0 = 1; + D_801CE234 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801881FC[]; + extern s16 D_801CE2AC; + extern s16 D_801CE2AE; + extern s16 D_801CE2B0; + extern s16 D_801CE2A4; + extern s16 D_801CE2A6; + extern s16 D_801CE2A8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801881FC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801881FC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CE2AC; + s16 *p78C = &D_801CE2A4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CE2AE; + v798 = D_801CE2B0; + v78C = *p78C; + v78E = D_801CE2A6; + v790 = D_801CE2A8; + __asm__ __volatile__(""); + D_801CE8D0 = 1; + D_801CE234 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CE234; +extern s16 D_801CE2AC; +extern s16 D_801CE2AE; +extern s16 D_801CE2B0; +extern s16 D_801CE2A4; +extern s16 D_801CE2A6; +extern s16 D_801CE2A8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CE234 = 0; + D_801CE2AC = (s16) D_80114F30; + D_801CE2AE = (s16) D_80114F34; + D_801CE2B0 = (s16) D_80114F38; + D_801CE2A4 = (s16) D_80114F24; + D_801CE2A6 = (s16) D_80114F28; + D_801CE2A8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CE2C4; +extern s16 D_801CE2C6; +extern s16 D_801CE2C8; +extern s16 D_801CE2CC; +extern s16 D_801CE2CE; +extern s16 D_801CE2D0; + +void func_8017B824(void) { + D_801CE2C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CE2C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CE2C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CE2CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CE2CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CE2D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CE2C4; +extern s16 D_801CE2C6; +extern s16 D_801CE2C8; +extern s16 D_801CE2CC; +extern s16 D_801CE2CE; +extern s16 D_801CE2D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CE2C4; + D_80114F34 = D_801CE2C6; + D_80114F38 = D_801CE2C8; + D_80114F24 = D_801CE2CC; + D_80114F28 = D_801CE2CE; + D_80114F2C = D_801CE2D0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CE2AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801CE2A4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CE2AC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CE2A4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CE2B4; +extern u16 D_801CE2B6; +extern u16 D_801CE2B8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CE234; +extern short D_801CE2BC; +extern short D_801CE2BE; +extern short D_801CE2C0; +extern s16 D_801CE2AC; +extern s16 D_801CE2AE; +extern s16 D_801CE2B0; +extern s16 D_801CE2A4; +extern s16 D_801CE2A6; +extern s16 D_801CE2A8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CE2B4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CE2B6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CE2B8); + (*(s16 *)&D_801CE2BC) = buf[0]; + (*(s16 *)&D_801CE2BE) = buf[1]; + (*(s16 *)&D_801CE2C0) = buf[2]; + D_801CE2AC = D_80114F30 + buf[0]; + D_801CE234 = 0; + D_801CE2AE = D_80114F34 + buf[1]; + D_801CE2B0 = D_80114F38 + buf[2]; + D_801CE2A4 = D_80114F24 + buf[0]; + D_801CE2A6 = D_80114F28 + buf[1]; + D_801CE2A8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CE254; +extern SV4 D_801CE25C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CE25C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CE254 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CE25C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CE25C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CE254) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CE25C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CE27C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CE27C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CE234; +extern s16 D_801CE8D0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CE234 = D_801CE234 + 1; + if (D_801CE234 >= 0x1F) { + D_801CE8D0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CE234; +extern s16 D_801CE8D0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CE234 = D_801CE234 + 1; + if (0x18 < D_801CE234) { + func_8012A4BC(); + D_801CE8D0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CE234; +extern void (*D_801CE278)(void); +extern short D_801CE2BC; +extern short D_801CE2BE; +extern short D_801CE2C0; +extern s16 D_801CE8D0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CE234 = D_801CE234 + 1; + if (D_801CE234 >= 0x19) { + if (D_801CE278 != 0) { + (*D_801CE278)(); + } else { + D_80114F30 = D_80114F30 + D_801CE2BC; + D_80114F34 = D_80114F34 + D_801CE2BE; + D_80114F38 = D_80114F38 + D_801CE2C0; + D_80114F24 = D_80114F24 + D_801CE2BC; + D_80114F28 = D_80114F28 + D_801CE2BE; + D_80114F2C = D_80114F2C + D_801CE2C0; + func_8012A4BC(); + } + D_801CE8D0 = 0; + } +} + + + +extern void (*D_8018829C[])(void); + +void func_8017BE60(void *a0) { + D_8018829C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017BEBC); + + +extern void (*D_80188358[])(void); + +void func_8017CD9C(void *a0) { + D_80188358[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CDD8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CE18); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CE94); + +void func_8017CEF4(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CEFC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CF24); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CF50); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017CFB0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D07C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D248); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D2A4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D300); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D364); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D414); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D4D8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D598); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D5DC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D6A8); + + +extern void (*D_801883FC[])(void); + +void func_8017D804(void *a0) { + D_801883FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D840); + + +extern void (*D_8018841C[])(void); + +void func_8017D8A0(void *a0) { + D_8018841C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017D8DC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DAA0); + + +extern void (*D_80188424[])(void); + +void func_8017DB34(void *a0) { + D_80188424[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80188410; + +void func_8017DB70(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80188410, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DC14); + + +extern void (*D_8018847C[])(void); + +void func_8017DC78(void *a0) { + D_8018847C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DCB4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DCF8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188484[])(void); + +void func_8017DD1C(void *a0) { + D_80188484[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DD58); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DD9C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DDDC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DE58); + + +extern void (*D_80188498[])(void); + +void func_8017DE78(void *a0) { + D_80188498[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DEB4); + + +extern void (*D_801884A4[])(void); + +void func_8017DF44(void *a0) { + D_801884A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DF80); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017DFC0); + + +extern void (*D_801884C4[])(void); + +void func_8017DFE8(void *a0) { + D_801884C4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E024); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E058); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E0A0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E0C8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E0F0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E118); + + +extern void (*D_801884EC[])(void); + +void func_8017E1DC(void *a0) { + D_801884EC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E218); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E300); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E498); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E6A0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E99C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017E9BC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017EA1C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017EB34); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017EBCC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017ECC4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017EE78); + +extern s32 func_80029178(s32 arg); + s32 func_8017EF14(void) { + return func_80029178(0xBB) & 0xFF; + } + + +extern void func_800D0CE0(void); + void func_8017EF34(void) { + func_800D0CE0(); + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017EF54); + + +extern void (*D_80188788[])(void); + +void func_8017EFF0(void *a0) { + D_80188788[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F02C); + + +extern void (*D_80188794[])(void); + +void func_8017F25C(void *a0) { + D_80188794[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F298); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F2D8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F344); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F410); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F474); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F4C4); + + +extern void (*D_8018879C[])(void); + +void func_8017F568(void *a0) { + D_8018879C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F5A4); + + +extern void (*D_801887D4[])(void); + +void func_8017F750(void *a0) { + D_801887D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F78C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F894); + +void func_8017F97C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017F984); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FA00); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FA90); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FB04); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FC30); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FCD4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FCF0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FDB4); + + +extern void (*D_801887DC[])(void); + +void func_8017FE68(void *a0) { + D_801887DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FEA4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8017FED8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", listCdBuffer); + + +extern void (*D_801887E8[])(void); + +void func_80180010(void *a0) { + D_801887E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018004C(void *a0) { + *(s16 *)((char *)a0 + 0x2) += 1; + *(s32 *)((char *)a0 + 0x14) = 0x20000; + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180064); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018012C); + + +extern void (*D_80188808[])(void); + +void func_80180358(void *a0) { + D_80188808[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180394); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180454); + + +extern void (*D_80188810[])(void); + +void func_801804DC(void *a0) { + D_80188810[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180518); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180558); + + +extern void (*D_80188818[])(void); + +void func_801805EC(void *a0) { + D_80188818[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180628); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180748); + +extern void (*D_80188B40[])(void); + +void func_80180874(void *a0) { + D_80188B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801808B0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018094C); + +void func_801809C0(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801809C8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180A70); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180AB4); + + +extern void (*D_80188B5C[])(void); + +void func_80180B88(void *a0) { + D_80188B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180BC4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180C18); + +void func_80180C68(void) { +} + + +s32 func_80180C70(void) { + return 73; +} + + +extern void func_8013373C(s32 arg0); + void func_80180C78(void) { + func_8013373C(0); + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180C98); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180CF0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180D6C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180E2C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80180F54); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801810C4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181258); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801814AC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801815B8); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181754); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181810); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018189C); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801C0FBC[]; + s32 func_801818D4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801C0FBC[0], &D_801C0FBC[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181900); + + +extern u8 D_80078EC1; + s32 func_801819AC(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801819C4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181A30); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80181C80); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018242C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80182A34); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80182B68); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80182F28); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018316C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018321C); + + +extern void (*D_801C3740[])(void); + +void func_80183300(void *a0) { + D_801C3740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018333C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801833A0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183434); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018355C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018358C); + +void func_801835B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801835C0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801836AC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018372C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801837E0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801838C0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183928); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183988); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183A18); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183A8C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183ADC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183B5C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183BFC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183CCC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183D60); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183D9C); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183E84); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183F48); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80183FFC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018403C); + +extern void (*D_801CB124[])(void); + +void func_80184090(void *a0) { + D_801CB124[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801840CC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801841A0); + +void func_801841C8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801841D0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_8018431C); + +extern void func_8012C218(void *a0); + void func_8018443C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184468); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184478); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184488); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_801844C8(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801844FC); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184520); + +extern void (*D_801CB14C[])(void); + +void func_80184584(void *a0) { + D_801CB14C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_801845C0); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184648); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184708); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_80178D40", func_80184778); + + diff --git a/src/ov_SC03_118/ov_SC03_118_jr_801734BC.c b/src/ov_SC03_118/ov_SC03_118_jr_801734BC.c index 387191c5d..3436ac920 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_801734BC.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_801734BC.c @@ -3084,1732 +3084,3 @@ void func_80178D18(void) { D_801D484C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D419C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D419C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D419C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D419C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D41C4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D41C4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D4180; - -s32 func_8017A3B0(void) { - switch (D_801D4180) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D41BC; -extern short D_801D41B8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D41BC) { - case 0: - func_800D0CA0(1); - D_801D41BC = D_801D41BC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D41B8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D41BC = D_801D41BC + 1; - if (D_801D41BC < 0x1E) { - return 0; - } - D_801D41BC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D41FC; - extern s16 D_801D41FE; - extern s16 D_801D4200; - extern s16 D_801D41F4; - extern s16 D_801D41F6; - extern s16 D_801D41F8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D41FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D41FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4200, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D41F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D41F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D41F8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D4184; -extern u16 D_801D4204; -extern u16 D_801D4206; -extern u16 D_801D4208; -extern s16 D_801D47D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D47D8 = 0; - D_801D4184 = 0; - D_801D4204 = D_80126B5E; - D_801D4206 = D_80126B62; - D_801D4208 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018D2A8[]; - extern s16 D_801D41FC; - extern s16 D_801D41F4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D41FC; - s16 *p78C = &D_801D41F4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D47D8 = 1; - D_801D4184 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D41A4; - extern SV4_8017B368 D_801D41AC; - extern s16 D_801D41FC; - extern s16 D_801D41F4; - extern u16 D_8018D2A8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D41A4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D41AC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D41FC) = loc0; - (*(SV4_8017B368 *)&D_801D41F4) = loc1; - D_801D47D8 = 1; - D_801D4184 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018D2A8[]; - extern s16 D_801D41FC; - extern s16 D_801D41FE; - extern s16 D_801D4200; - extern s16 D_801D41F4; - extern s16 D_801D41F6; - extern s16 D_801D41F8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D41FC; - s16 *p78C = &D_801D41F4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D41FE; - v798 = D_801D4200; - v78C = *p78C; - v78E = D_801D41F6; - v790 = D_801D41F8; - __asm__ __volatile__(""); - D_801D47D8 = 1; - D_801D4184 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4184; -extern s16 D_801D41FC; -extern s16 D_801D41FE; -extern s16 D_801D4200; -extern s16 D_801D41F4; -extern s16 D_801D41F6; -extern s16 D_801D41F8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D4184 = 0; - D_801D41FC = (s16) D_80114F30; - D_801D41FE = (s16) D_80114F34; - D_801D4200 = (s16) D_80114F38; - D_801D41F4 = (s16) D_80114F24; - D_801D41F6 = (s16) D_80114F28; - D_801D41F8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D4214; -extern s16 D_801D4216; -extern s16 D_801D4218; -extern s16 D_801D421C; -extern s16 D_801D421E; -extern s16 D_801D4220; - -void func_8017B824(void) { - D_801D4214 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D4216 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D4218 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D421C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D421E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D4220 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D4214; -extern s16 D_801D4216; -extern s16 D_801D4218; -extern s16 D_801D421C; -extern s16 D_801D421E; -extern s16 D_801D4220; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D4214; - D_80114F34 = D_801D4216; - D_80114F38 = D_801D4218; - D_80114F24 = D_801D421C; - D_80114F28 = D_801D421E; - D_80114F2C = D_801D4220; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D41FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D41F4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D41FC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D41F4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D4204; -extern u16 D_801D4206; -extern u16 D_801D4208; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4184; -extern short D_801D420C; -extern short D_801D420E; -extern short D_801D4210; -extern s16 D_801D41FC; -extern s16 D_801D41FE; -extern s16 D_801D4200; -extern s16 D_801D41F4; -extern s16 D_801D41F6; -extern s16 D_801D41F8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4204); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4206); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4208); - (*(s16 *)&D_801D420C) = buf[0]; - (*(s16 *)&D_801D420E) = buf[1]; - (*(s16 *)&D_801D4210) = buf[2]; - D_801D41FC = D_80114F30 + buf[0]; - D_801D4184 = 0; - D_801D41FE = D_80114F34 + buf[1]; - D_801D4200 = D_80114F38 + buf[2]; - D_801D41F4 = D_80114F24 + buf[0]; - D_801D41F6 = D_80114F28 + buf[1]; - D_801D41F8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D41A4; -extern SV4 D_801D41AC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D41AC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D41A4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D41AC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D41AC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D41A4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D41AC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D41CC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D41CC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D4184; -extern s16 D_801D47D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D4184 = D_801D4184 + 1; - if (D_801D4184 >= 0x1F) { - D_801D47D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D4184; -extern s16 D_801D47D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4184 = D_801D4184 + 1; - if (0x18 < D_801D4184) { - func_8012A4BC(); - D_801D47D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D4184; -extern void (*D_801D41C8)(void); -extern short D_801D420C; -extern short D_801D420E; -extern short D_801D4210; -extern s16 D_801D47D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4184 = D_801D4184 + 1; - if (D_801D4184 >= 0x19) { - if (D_801D41C8 != 0) { - (*D_801D41C8)(); - } else { - D_80114F30 = D_80114F30 + D_801D420C; - D_80114F34 = D_80114F34 + D_801D420E; - D_80114F38 = D_80114F38 + D_801D4210; - D_80114F24 = D_80114F24 + D_801D420C; - D_80114F28 = D_80114F28 + D_801D420E; - D_80114F2C = D_80114F2C + D_801D4210; - func_8012A4BC(); - } - D_801D47D8 = 0; - } -} - - - -extern void (*D_8018D348[])(void); - -void func_8017BE60(void *a0) { - D_8018D348[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018D354[])(void); - -void func_8017BEE4(void *a0) { - D_8018D354[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017BFA0); - - -extern void (*D_8018D360[])(void); - -void func_8017BFC8(void *a0) { - D_8018D360[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C084); - - -extern void (*D_8018D420[])(void); - -void func_8017C0C8(void *a0) { - D_8018D420[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C104); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C12C); - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C624); - - -extern void (*D_8018D460[])(void); - -void func_8017C664(void *a0) { - D_8018D460[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CE10); - - -extern void (*D_8018D480[])(void); - -void func_8017CE54(void *a0) { - D_8018D480[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D098); - - -extern void (*D_8018D490[])(void); - -void func_8017D0DC(void *a0) { - D_8018D490[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018D49C[])(void); - -void func_8017D63C(void *a0) { - D_8018D49C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DA98); - - -extern void (*D_8018D620[])(void); - -void func_8017DB00(void *a0) { - D_8018D620[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DC28); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017E120); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017E324); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017E718); - - -extern void (*D_8018D920[])(void); - -void func_8017E898(void *a0) { - D_8018D920[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017E8D4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017E948); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EA24); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EC38); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017ED0C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EDDC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EE34); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EF2C); - - -extern void (*D_8018D95C[])(void); - -void func_8017EF6C(void *a0) { - D_8018D95C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F16C); - - -extern void (*D_8018D964[])(void); - -void func_8017F200(void *a0) { - D_8018D964[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018D950; - -void func_8017F23C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018D950, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F2E0); - - -extern void (*D_8018DA1C[])(void); - -void func_8017F344(void *a0) { - D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F380); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F3C0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F43C); - -DEFINE_func_8017F49C() /* dedup: shared engine-core @0x8017F49C (src/shared) */ - -DEFINE_func_8017F4A4() /* dedup: shared engine-core @0x8017F4A4 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F4CC); - -extern s16 D_80126B0C; - s32 func_8017F4E8(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F4F8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F558); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F624); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F7F0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F84C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F8A8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F90C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017F9BC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017FA80); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017FB40); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8017FB84); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80180A64); - - -extern void (*D_8018DD98[])(void); - -void func_8018165C(void *a0) { - D_8018DD98[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181698); - - -extern s32 func_800167F0(s32 a0); - -s32 func_801816DC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018DDA0[])(void); - -void func_80181700(void *a0) { - D_8018DDA0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018173C); - - -extern void (*D_8018DDA8[])(void); - -void func_80181780(void *a0) { - D_8018DDA8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801817BC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801817FC); - -extern void func_800D1EBC(void); - void func_8018188C(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018DDB4[])(void); - -void func_801818AC(void *a0) { - D_8018DDB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801818E8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80181928(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801819A4); - -DEFINE_func_801819C4() /* dedup: shared engine-core @0x801819C4 (src/shared) */ - -DEFINE_func_801819EC() /* dedup: shared engine-core @0x801819EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181A14); - -DEFINE_func_80181A3C() /* dedup: shared engine-core @0x80181A3C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181A64); - - -extern void (*D_8018DDF0[])(void); - -void func_80181B08(void *a0) { - D_8018DDF0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181B44); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181C78); - - -extern void (*D_8018DE08[])(void); - -void func_80181E1C(void *a0) { - D_8018DE08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80181E58); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018201C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018219C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018226C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182380); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801823F8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018244C); - -DEFINE_func_8018248C() /* dedup: shared engine-core @0x8018248C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801824A0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80182550(void *arg0) { - ((void (*)(void *, int))func_8012AD44)(arg0, 0x8); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182570); - -extern void func_8013CAE8(void); - void func_80182590(void) { - func_8013CAE8(); - } - - - -extern void (*D_8018E0E4[])(void); - -void func_801825B0(void *a0) { - D_8018E0E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801825EC); - -DEFINE_func_80182704() /* dedup: shared engine-core @0x80182704 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182714); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018276C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801827A0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018283C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801828A4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801828C4); - -extern void func_800D0C48(s32 arg); - void func_801828E4(void) { - func_800D0C48(0x1); - } - - -DEFINE_func_80182904() /* dedup: shared engine-core @0x80182904 (src/shared) */ - -DEFINE_func_80182910() /* dedup: shared engine-core @0x80182910 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018291C); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018295C(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x74D, 0); - } - - -DEFINE_func_80182988() /* dedup: shared engine-core @0x80182988 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_801829E4(u8 *a0); -extern void (*D_8018E134[])(int); - -void func_80182998(int param_1) -{ - ((void (*)(void))func_801829E4)(); - D_8018E134[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801829E4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182A34); - -DEFINE_func_80182ADC() /* dedup: shared engine-core @0x80182ADC (src/shared) */ - -DEFINE_func_80182AE4() /* dedup: shared engine-core @0x80182AE4 (src/shared) */ - -extern s32 func_80128ED8(void *a0, void *a1); - extern s32 D_801D42F8; - void func_80182AEC(void *arg0) { - ((void (*)(s32 *, s32))func_80128ED8)(*(s32 *)((s32)arg0 + 0xCC), &D_801D42F8); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182B18); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182BC4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182C34); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182CC4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182D14); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182DC4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182E38); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182E88); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182F44); - -extern void func_8018291C(void); - void func_80182FAC(void) { - func_8018291C(); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80182FCC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018302C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801830C4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183178); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801831D0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183228); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183280); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801832E0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801833C4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801834DC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183634); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801837B0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183830); - -DEFINE_func_801838A4() /* dedup: shared engine-core @0x801838A4 (src/shared) */ - - -DEFINE_func_801838E0() /* dedup: shared engine-core @0x801838E0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018391C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801839F4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183A60); - -DEFINE_func_80183AF8() /* dedup: shared engine-core @0x80183AF8 (src/shared) */ - -DEFINE_func_80183B00() /* dedup: shared engine-core @0x80183B00 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183B3C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183B84); - -DEFINE_func_80183C50() /* dedup: shared engine-core @0x80183C50 (src/shared) */ - - -extern void (*D_8018EC08[])(void); - -void func_80183C58(void *a0) { - D_8018EC08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183C94); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80183D68); - -void func_80184164(void) { -} - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018416C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801841C0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184214); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801842DC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184334); - - -extern void (*D_8018EC14[])(void); - -void func_80184430(void *a0) { - D_8018EC14[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_8018EF38[])(void); - -void func_8018446C(void *a0) { - D_8018EF38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801844A8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184540); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801845C8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184618); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184644); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184664); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184698); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801846CC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184718); - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE4D0; - void func_8018474C(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE4D0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C584C; - void func_80184778(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C584C); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE558; - void func_801847A4(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE558); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C55CC; - void func_801847D0(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C55CC); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C573C; - void func_801847FC(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C573C); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C57C4; - void func_80184828(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C57C4); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE5E0; - void func_80184854(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE5E0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE668; - void func_80184880(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE668); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE6B0; - void func_801848AC(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE6B0); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801848D8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018490C); - - -extern void (*D_8018EF74[])(void); - -void func_80184940(void *a0) { - D_8018EF74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018497C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184A1C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184B18); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184B94); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184CE0); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018EF90[])(); - -void func_80184DD8(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018EF90[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184E24); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184E78); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80184F18); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018517C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801851C8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018523C); - - -extern void (*D_801C5928[])(void); - -void func_8018545C(void *a0) { - D_801C5928[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185498); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018552C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185550); - - -extern s16 D_801D446C; - extern s16 D_801D446E; - extern s16 D_801D4470; - extern s16 D_801D4472; - void func_801855F0(s32 arg0, s32 arg1, s32 arg2) { - D_801D446C = *(u16 *)((s32)arg0 + 0x0); - D_801D446E = *(u16 *)((s32)arg0 + 0x2); - D_801D4470 = arg1; - D_801D4472 = arg2; - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185620); - - -extern s16 D_801D4472; - void func_80185698(s32 arg0) { - *(s16 *)((s32)&D_801D4472 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801856B4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018570C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801857E0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018581C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185868); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185944); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185C08); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185C2C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185C54); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185CDC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185D48); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185DB8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185E30); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185E7C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185F98); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80185FD4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801860E8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801863CC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80186B78); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187180); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801872B4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187674); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801878B8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187968); - - -extern void (*D_801C705C[])(void); - -void func_80187A4C(void *a0) { - D_801C705C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187A88); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187AEC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187B80); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187CA8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187CD8); - -DEFINE_func_80187D04() /* dedup: shared engine-core @0x80187D04 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187DF8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187E78); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80187F2C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018800C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188074); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801880D4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188164); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801881D8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188228); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801882A8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188348); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188418); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801884AC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801884E8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801885D0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188694); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188748); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188788); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801887DC); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188990); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188C8C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188DE4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188E8C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188EB0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188F14); - -extern void func_80131E00(struct S80131E00 *a0, s32 a1); - void func_80188F90(s32 arg0) { - ((void (*)(s32, s32))func_80131E00)(arg0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80188FB0); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189074); - - -extern void (*D_801D1070[])(void); - -void func_8018913C(void *a0) { - D_801D1070[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189178); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018924C); - -DEFINE_func_80189274() /* dedup: shared engine-core @0x80189274 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018927C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801893C8); - -extern void func_8012C218(void *a0); - s32 func_801894E8(void * arg0) { - *(s16 *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189514); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189524); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189534); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_80189574(s32 arg0) { - register s32 temp_v0 __asm__("$2"); - temp_v0 = *(s32 *)(arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801895A8); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801895CC); - - -extern void (*D_801D1098[])(void); - -void func_80189630(void *a0) { - D_801D1098[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_8018966C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801896F4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_801897B4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801734BC", func_80189824); - diff --git a/src/ov_SC03_118/ov_SC03_118_jr_80178D40.c b/src/ov_SC03_118/ov_SC03_118_jr_80178D40.c new file mode 100644 index 000000000..3ade08cc2 --- /dev/null +++ b/src/ov_SC03_118/ov_SC03_118_jr_80178D40.c @@ -0,0 +1,5178 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018CB50[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D34F0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018CB44[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018CB88[]; +extern unsigned short D_8018CB90[]; +extern unsigned short D_8018CB98[]; +extern unsigned char D_801D34F8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D34F0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018CBA0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D362C; +extern M2C_UNK D_801D3630; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D35B8; +extern void (*D_8018CBD0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D3634[]; +extern u8 D_801D363C[]; +extern u8 D_801D35EC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018CBD8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018CBF4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018CBFC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018CC64[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CC08; +extern u8 D_8018CC14; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018CC98[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018CCA0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018CCF4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018CD28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018CD18[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018CD44; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018CDBC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018CDC4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018CDCC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018CDD4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018CDDC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018CDE4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018CDF0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018CDFC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018CE08[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018CE18[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018CE28[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018CE30[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018CE38[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018CE40[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018CE48[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018CE50[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018CE58[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018CE60[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018CE68[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018CE70[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018CE78[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018CE80[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018CE88[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018CE90[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018CE98[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018CEA0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018CEA8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018CEB0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018CEB8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018CEC0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018CEC8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018CED0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018CED8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018CF1C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018CEE0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018CF4C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018CF88[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018CFE0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018CFF0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018CFF8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018D160[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018D16C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D2B3C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D47D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D3D70; +extern short D_801D484C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D484C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D484C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D3D70 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D484C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D47A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D47A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D484C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D484C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D41CC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D3D74; + extern s32 D_801D4188; + extern s16 D_801D418C; + extern s16 D_801D4190; + extern s16 D_801D4194; + extern s16 D_801D4198; + extern s32 D_801D41A0; + extern s32 D_801D41A4; + extern s32 D_801D41B4; + extern s16 D_801D41B8; + extern s16 D_801D41BC; + extern s32 D_801D41C0; + extern s32 D_801D41C8; + extern s32 D_801D41CC[10]; + extern s32 D_801D46F0; + extern s16 D_801D47A8; + extern s32 D_801D47D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D47A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D4194, D_801D4198 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 2; + break; + case 0: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D418C, D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D46F0 != 0) { + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D418C, D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + } else { + (*(s16*)&D_801D484C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D418C, + D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + break; + case 2: + func_80179B28(D_801D4188); + if (D_801D41A0 != 0) { + D_801D3D70 = D_801D41A0; + D_801D41A0 = 0; + (*(s16*)&D_801D484C) = 3; + return; + } + (*(s16*)&D_801D484C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D484C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1B: + D_801D41C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D484C) = 4; + D_801D3D74 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D484C) = 5; + D_801D41B4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D41B4 = (s32)func_8017A3B0; + (*(s16*)&D_801D484C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x24: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D484C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D484C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D484C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4E: + D_801D41C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x2B: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D47D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x34: + (*(s16*)&D_801D484C) = 3; + D_801D3D70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D41A0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D484C) = 3; + D_801D3D70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D484C) = 3; + D_801D3D70 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D3D70 = *(s32 *)(D_801D3D70 + 4); + return; + case 0x37: + (*(s16*)&D_801D484C) = 3; + D_801D418C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4190 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D484C) = 3; + D_801D4194 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4198 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D484C) = 3; + D_801D418C = w1; + D_801D4190 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D484C) = 3; + D_801D4194 = w2; + D_801D4198 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x43: + D_801D41B4 = (s32)func_8017A3D8; + D_801D41BC = 0; + (*(s16*)&D_801D484C) = 5; + D_801D41B8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D41CC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D484C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D41CC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D484C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D41CC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D484C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D41CC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D484C) = 3; + break; + default: + break; + } +Lend: + D_801D3D70 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D419C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D419C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D419C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D419C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D41C4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D41C4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D4180; + +s32 func_8017A3B0(void) { + switch (D_801D4180) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D41BC; +extern short D_801D41B8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D41BC) { + case 0: + func_800D0CA0(1); + D_801D41BC = D_801D41BC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D41B8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D41BC = D_801D41BC + 1; + if (D_801D41BC < 0x1E) { + return 0; + } + D_801D41BC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D41FC; + extern s16 D_801D41FE; + extern s16 D_801D4200; + extern s16 D_801D41F4; + extern s16 D_801D41F6; + extern s16 D_801D41F8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D41FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D41FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4200, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D41F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D41F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D41F8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D4184; +extern u16 D_801D4204; +extern u16 D_801D4206; +extern u16 D_801D4208; +extern s16 D_801D47D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D47D8 = 0; + D_801D4184 = 0; + D_801D4204 = D_80126B5E; + D_801D4206 = D_80126B62; + D_801D4208 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018D2A8[]; + extern s16 D_801D41FC; + extern s16 D_801D41F4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D41FC; + s16 *p78C = &D_801D41F4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D47D8 = 1; + D_801D4184 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D41A4; + extern SV4_8017B368 D_801D41AC; + extern s16 D_801D41FC; + extern s16 D_801D41F4; + extern u16 D_8018D2A8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D41A4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D41AC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D41FC) = loc0; + (*(SV4_8017B368 *)&D_801D41F4) = loc1; + D_801D47D8 = 1; + D_801D4184 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018D2A8[]; + extern s16 D_801D41FC; + extern s16 D_801D41FE; + extern s16 D_801D4200; + extern s16 D_801D41F4; + extern s16 D_801D41F6; + extern s16 D_801D41F8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D41FC; + s16 *p78C = &D_801D41F4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D41FE; + v798 = D_801D4200; + v78C = *p78C; + v78E = D_801D41F6; + v790 = D_801D41F8; + __asm__ __volatile__(""); + D_801D47D8 = 1; + D_801D4184 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4184; +extern s16 D_801D41FC; +extern s16 D_801D41FE; +extern s16 D_801D4200; +extern s16 D_801D41F4; +extern s16 D_801D41F6; +extern s16 D_801D41F8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D4184 = 0; + D_801D41FC = (s16) D_80114F30; + D_801D41FE = (s16) D_80114F34; + D_801D4200 = (s16) D_80114F38; + D_801D41F4 = (s16) D_80114F24; + D_801D41F6 = (s16) D_80114F28; + D_801D41F8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D4214; +extern s16 D_801D4216; +extern s16 D_801D4218; +extern s16 D_801D421C; +extern s16 D_801D421E; +extern s16 D_801D4220; + +void func_8017B824(void) { + D_801D4214 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D4216 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D4218 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D421C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D421E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D4220 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D4214; +extern s16 D_801D4216; +extern s16 D_801D4218; +extern s16 D_801D421C; +extern s16 D_801D421E; +extern s16 D_801D4220; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D4214; + D_80114F34 = D_801D4216; + D_80114F38 = D_801D4218; + D_80114F24 = D_801D421C; + D_80114F28 = D_801D421E; + D_80114F2C = D_801D4220; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D41FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D41F4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D41FC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D41F4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D4204; +extern u16 D_801D4206; +extern u16 D_801D4208; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4184; +extern short D_801D420C; +extern short D_801D420E; +extern short D_801D4210; +extern s16 D_801D41FC; +extern s16 D_801D41FE; +extern s16 D_801D4200; +extern s16 D_801D41F4; +extern s16 D_801D41F6; +extern s16 D_801D41F8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4204); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4206); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4208); + (*(s16 *)&D_801D420C) = buf[0]; + (*(s16 *)&D_801D420E) = buf[1]; + (*(s16 *)&D_801D4210) = buf[2]; + D_801D41FC = D_80114F30 + buf[0]; + D_801D4184 = 0; + D_801D41FE = D_80114F34 + buf[1]; + D_801D4200 = D_80114F38 + buf[2]; + D_801D41F4 = D_80114F24 + buf[0]; + D_801D41F6 = D_80114F28 + buf[1]; + D_801D41F8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D41A4; +extern SV4 D_801D41AC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D41AC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D41A4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D41AC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D41AC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D41A4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D41AC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D41CC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D41CC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D4184; +extern s16 D_801D47D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D4184 = D_801D4184 + 1; + if (D_801D4184 >= 0x1F) { + D_801D47D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D4184; +extern s16 D_801D47D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4184 = D_801D4184 + 1; + if (0x18 < D_801D4184) { + func_8012A4BC(); + D_801D47D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D4184; +extern void (*D_801D41C8)(void); +extern short D_801D420C; +extern short D_801D420E; +extern short D_801D4210; +extern s16 D_801D47D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4184 = D_801D4184 + 1; + if (D_801D4184 >= 0x19) { + if (D_801D41C8 != 0) { + (*D_801D41C8)(); + } else { + D_80114F30 = D_80114F30 + D_801D420C; + D_80114F34 = D_80114F34 + D_801D420E; + D_80114F38 = D_80114F38 + D_801D4210; + D_80114F24 = D_80114F24 + D_801D420C; + D_80114F28 = D_80114F28 + D_801D420E; + D_80114F2C = D_80114F2C + D_801D4210; + func_8012A4BC(); + } + D_801D47D8 = 0; + } +} + + + +extern void (*D_8018D348[])(void); + +void func_8017BE60(void *a0) { + D_8018D348[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018D354[])(void); + +void func_8017BEE4(void *a0) { + D_8018D354[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017BFA0); + + +extern void (*D_8018D360[])(void); + +void func_8017BFC8(void *a0) { + D_8018D360[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C084); + + +extern void (*D_8018D420[])(void); + +void func_8017C0C8(void *a0) { + D_8018D420[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C104); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C12C); + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C624); + + +extern void (*D_8018D460[])(void); + +void func_8017C664(void *a0) { + D_8018D460[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CE10); + + +extern void (*D_8018D480[])(void); + +void func_8017CE54(void *a0) { + D_8018D480[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D098); + + +extern void (*D_8018D490[])(void); + +void func_8017D0DC(void *a0) { + D_8018D490[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018D49C[])(void); + +void func_8017D63C(void *a0) { + D_8018D49C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DA98); + + +extern void (*D_8018D620[])(void); + +void func_8017DB00(void *a0) { + D_8018D620[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DC28); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017E120); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017E324); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017E718); + + +extern void (*D_8018D920[])(void); + +void func_8017E898(void *a0) { + D_8018D920[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017E8D4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017E948); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EA24); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EC38); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017ED0C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EDDC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EE34); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EF2C); + + +extern void (*D_8018D95C[])(void); + +void func_8017EF6C(void *a0) { + D_8018D95C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F16C); + + +extern void (*D_8018D964[])(void); + +void func_8017F200(void *a0) { + D_8018D964[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018D950; + +void func_8017F23C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018D950, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F2E0); + + +extern void (*D_8018DA1C[])(void); + +void func_8017F344(void *a0) { + D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F380); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F3C0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F43C); + +DEFINE_func_8017F49C() /* dedup: shared engine-core @0x8017F49C (src/shared) */ + +DEFINE_func_8017F4A4() /* dedup: shared engine-core @0x8017F4A4 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F4CC); + +extern s16 D_80126B0C; + s32 func_8017F4E8(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F4F8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F558); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F624); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F7F0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F84C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F8A8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F90C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017F9BC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017FA80); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017FB40); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8017FB84); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80180A64); + + +extern void (*D_8018DD98[])(void); + +void func_8018165C(void *a0) { + D_8018DD98[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181698); + + +extern s32 func_800167F0(s32 a0); + +s32 func_801816DC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018DDA0[])(void); + +void func_80181700(void *a0) { + D_8018DDA0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018173C); + + +extern void (*D_8018DDA8[])(void); + +void func_80181780(void *a0) { + D_8018DDA8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801817BC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801817FC); + +extern void func_800D1EBC(void); + void func_8018188C(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018DDB4[])(void); + +void func_801818AC(void *a0) { + D_8018DDB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801818E8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80181928(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801819A4); + +DEFINE_func_801819C4() /* dedup: shared engine-core @0x801819C4 (src/shared) */ + +DEFINE_func_801819EC() /* dedup: shared engine-core @0x801819EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181A14); + +DEFINE_func_80181A3C() /* dedup: shared engine-core @0x80181A3C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181A64); + + +extern void (*D_8018DDF0[])(void); + +void func_80181B08(void *a0) { + D_8018DDF0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181B44); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181C78); + + +extern void (*D_8018DE08[])(void); + +void func_80181E1C(void *a0) { + D_8018DE08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80181E58); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018201C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018219C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018226C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182380); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801823F8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018244C); + +DEFINE_func_8018248C() /* dedup: shared engine-core @0x8018248C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801824A0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80182550(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x8); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182570); + +extern void func_8013CAE8(void); + void func_80182590(void) { + func_8013CAE8(); + } + + + +extern void (*D_8018E0E4[])(void); + +void func_801825B0(void *a0) { + D_8018E0E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801825EC); + +DEFINE_func_80182704() /* dedup: shared engine-core @0x80182704 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182714); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018276C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801827A0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018283C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801828A4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801828C4); + +extern void func_800D0C48(s32 arg); + void func_801828E4(void) { + func_800D0C48(0x1); + } + + +DEFINE_func_80182904() /* dedup: shared engine-core @0x80182904 (src/shared) */ + +DEFINE_func_80182910() /* dedup: shared engine-core @0x80182910 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018291C); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018295C(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x74D, 0); + } + + +DEFINE_func_80182988() /* dedup: shared engine-core @0x80182988 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_801829E4(u8 *a0); +extern void (*D_8018E134[])(int); + +void func_80182998(int param_1) +{ + ((void (*)(void))func_801829E4)(); + D_8018E134[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801829E4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182A34); + +DEFINE_func_80182ADC() /* dedup: shared engine-core @0x80182ADC (src/shared) */ + +DEFINE_func_80182AE4() /* dedup: shared engine-core @0x80182AE4 (src/shared) */ + +extern s32 func_80128ED8(void *a0, void *a1); + extern s32 D_801D42F8; + void func_80182AEC(void *arg0) { + ((void (*)(s32 *, s32))func_80128ED8)(*(s32 *)((s32)arg0 + 0xCC), &D_801D42F8); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182B18); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182BC4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182C34); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182CC4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182D14); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182DC4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182E38); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182E88); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182F44); + +extern void func_8018291C(void); + void func_80182FAC(void) { + func_8018291C(); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80182FCC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018302C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801830C4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183178); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801831D0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183228); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183280); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801832E0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801833C4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801834DC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183634); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801837B0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183830); + +DEFINE_func_801838A4() /* dedup: shared engine-core @0x801838A4 (src/shared) */ + + +DEFINE_func_801838E0() /* dedup: shared engine-core @0x801838E0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018391C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801839F4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183A60); + +DEFINE_func_80183AF8() /* dedup: shared engine-core @0x80183AF8 (src/shared) */ + +DEFINE_func_80183B00() /* dedup: shared engine-core @0x80183B00 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183B3C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183B84); + +DEFINE_func_80183C50() /* dedup: shared engine-core @0x80183C50 (src/shared) */ + + +extern void (*D_8018EC08[])(void); + +void func_80183C58(void *a0) { + D_8018EC08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183C94); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80183D68); + +void func_80184164(void) { +} + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018416C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801841C0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184214); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801842DC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184334); + + +extern void (*D_8018EC14[])(void); + +void func_80184430(void *a0) { + D_8018EC14[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_8018EF38[])(void); + +void func_8018446C(void *a0) { + D_8018EF38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801844A8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184540); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801845C8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184618); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184644); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184664); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184698); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801846CC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184718); + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE4D0; + void func_8018474C(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE4D0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C584C; + void func_80184778(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C584C); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE558; + void func_801847A4(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE558); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C55CC; + void func_801847D0(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C55CC); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C573C; + void func_801847FC(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C573C); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C57C4; + void func_80184828(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C57C4); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE5E0; + void func_80184854(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE5E0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE668; + void func_80184880(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE668); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE6B0; + void func_801848AC(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE6B0); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801848D8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018490C); + + +extern void (*D_8018EF74[])(void); + +void func_80184940(void *a0) { + D_8018EF74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018497C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184A1C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184B18); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184B94); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184CE0); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018EF90[])(); + +void func_80184DD8(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018EF90[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184E24); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184E78); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80184F18); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018517C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801851C8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018523C); + + +extern void (*D_801C5928[])(void); + +void func_8018545C(void *a0) { + D_801C5928[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185498); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018552C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185550); + + +extern s16 D_801D446C; + extern s16 D_801D446E; + extern s16 D_801D4470; + extern s16 D_801D4472; + void func_801855F0(s32 arg0, s32 arg1, s32 arg2) { + D_801D446C = *(u16 *)((s32)arg0 + 0x0); + D_801D446E = *(u16 *)((s32)arg0 + 0x2); + D_801D4470 = arg1; + D_801D4472 = arg2; + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185620); + + +extern s16 D_801D4472; + void func_80185698(s32 arg0) { + *(s16 *)((s32)&D_801D4472 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801856B4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018570C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801857E0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018581C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185868); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185944); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185C08); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185C2C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185C54); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185CDC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185D48); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185DB8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185E30); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185E7C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185F98); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80185FD4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801860E8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801863CC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80186B78); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187180); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801872B4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187674); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801878B8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187968); + + +extern void (*D_801C705C[])(void); + +void func_80187A4C(void *a0) { + D_801C705C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187A88); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187AEC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187B80); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187CA8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187CD8); + +DEFINE_func_80187D04() /* dedup: shared engine-core @0x80187D04 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187DF8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187E78); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80187F2C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018800C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188074); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801880D4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188164); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801881D8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188228); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801882A8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188348); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188418); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801884AC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801884E8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801885D0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188694); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188748); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188788); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801887DC); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188990); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188C8C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188DE4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188E8C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188EB0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188F14); + +extern void func_80131E00(struct S80131E00 *a0, s32 a1); + void func_80188F90(s32 arg0) { + ((void (*)(s32, s32))func_80131E00)(arg0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80188FB0); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189074); + + +extern void (*D_801D1070[])(void); + +void func_8018913C(void *a0) { + D_801D1070[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189178); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018924C); + +DEFINE_func_80189274() /* dedup: shared engine-core @0x80189274 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018927C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801893C8); + +extern void func_8012C218(void *a0); + s32 func_801894E8(void * arg0) { + *(s16 *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189514); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189524); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189534); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_80189574(s32 arg0) { + register s32 temp_v0 __asm__("$2"); + temp_v0 = *(s32 *)(arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801895A8); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801895CC); + + +extern void (*D_801D1098[])(void); + +void func_80189630(void *a0) { + D_801D1098[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_8018966C); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801896F4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_801897B4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_80178D40", func_80189824); + + diff --git a/src/ov_SC03_119/ov_SC03_119_jr_801734BC.c b/src/ov_SC03_119/ov_SC03_119_jr_801734BC.c index d09285548..85d36f71f 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_801734BC.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_801734BC.c @@ -3084,1692 +3084,3 @@ void func_80178D18(void) { D_801D484C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D419C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D419C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D419C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D419C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D41C4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D41C4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D4180; - -s32 func_8017A3B0(void) { - switch (D_801D4180) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D41FC; - extern s16 D_801D41FE; - extern s16 D_801D4200; - extern s16 D_801D41F4; - extern s16 D_801D41F6; - extern s16 D_801D41F8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D41FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D41FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4200, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D41F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D41F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D41F8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D4184; -extern u16 D_801D4204; -extern u16 D_801D4206; -extern u16 D_801D4208; -extern s16 D_801D47D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D47D8 = 0; - D_801D4184 = 0; - D_801D4204 = D_80126B5E; - D_801D4206 = D_80126B62; - D_801D4208 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018D2A8[]; - extern s16 D_801D41FC; - extern s16 D_801D41F4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D41FC; - s16 *p78C = &D_801D41F4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D47D8 = 1; - D_801D4184 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D41A4; - extern SV4_8017B368 D_801D41AC; - extern s16 D_801D41FC; - extern s16 D_801D41F4; - extern u16 D_8018D2A8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D41A4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D41AC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D41FC) = loc0; - (*(SV4_8017B368 *)&D_801D41F4) = loc1; - D_801D47D8 = 1; - D_801D4184 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018D2A8[]; - extern s16 D_801D41FC; - extern s16 D_801D41FE; - extern s16 D_801D4200; - extern s16 D_801D41F4; - extern s16 D_801D41F6; - extern s16 D_801D41F8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D41FC; - s16 *p78C = &D_801D41F4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D41FE; - v798 = D_801D4200; - v78C = *p78C; - v78E = D_801D41F6; - v790 = D_801D41F8; - __asm__ __volatile__(""); - D_801D47D8 = 1; - D_801D4184 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4184; -extern s16 D_801D41FC; -extern s16 D_801D41FE; -extern s16 D_801D4200; -extern s16 D_801D41F4; -extern s16 D_801D41F6; -extern s16 D_801D41F8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D4184 = 0; - D_801D41FC = (s16) D_80114F30; - D_801D41FE = (s16) D_80114F34; - D_801D4200 = (s16) D_80114F38; - D_801D41F4 = (s16) D_80114F24; - D_801D41F6 = (s16) D_80114F28; - D_801D41F8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D4214; -extern s16 D_801D4216; -extern s16 D_801D4218; -extern s16 D_801D421C; -extern s16 D_801D421E; -extern s16 D_801D4220; - -void func_8017B824(void) { - D_801D4214 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D4216 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D4218 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D421C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D421E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D4220 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D4214; -extern s16 D_801D4216; -extern s16 D_801D4218; -extern s16 D_801D421C; -extern s16 D_801D421E; -extern s16 D_801D4220; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D4214; - D_80114F34 = D_801D4216; - D_80114F38 = D_801D4218; - D_80114F24 = D_801D421C; - D_80114F28 = D_801D421E; - D_80114F2C = D_801D4220; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D41FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D41F4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D41FC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D41F4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D4204; -extern u16 D_801D4206; -extern u16 D_801D4208; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4184; -extern short D_801D420C; -extern short D_801D420E; -extern short D_801D4210; -extern s16 D_801D41FC; -extern s16 D_801D41FE; -extern s16 D_801D4200; -extern s16 D_801D41F4; -extern s16 D_801D41F6; -extern s16 D_801D41F8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4204); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4206); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4208); - (*(s16 *)&D_801D420C) = buf[0]; - (*(s16 *)&D_801D420E) = buf[1]; - (*(s16 *)&D_801D4210) = buf[2]; - D_801D41FC = D_80114F30 + buf[0]; - D_801D4184 = 0; - D_801D41FE = D_80114F34 + buf[1]; - D_801D4200 = D_80114F38 + buf[2]; - D_801D41F4 = D_80114F24 + buf[0]; - D_801D41F6 = D_80114F28 + buf[1]; - D_801D41F8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D41A4; -extern SV4 D_801D41AC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D41AC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D41A4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D41AC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D41AC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D41A4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D41AC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D41CC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D41CC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D4184; -extern s16 D_801D47D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D4184 = D_801D4184 + 1; - if (D_801D4184 >= 0x1F) { - D_801D47D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D4184; -extern s16 D_801D47D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4184 = D_801D4184 + 1; - if (0x18 < D_801D4184) { - func_8012A4BC(); - D_801D47D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D4184; -extern void (*D_801D41C8)(void); -extern short D_801D420C; -extern short D_801D420E; -extern short D_801D4210; -extern s16 D_801D47D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4184 = D_801D4184 + 1; - if (D_801D4184 >= 0x19) { - if (D_801D41C8 != 0) { - (*D_801D41C8)(); - } else { - D_80114F30 = D_80114F30 + D_801D420C; - D_80114F34 = D_80114F34 + D_801D420E; - D_80114F38 = D_80114F38 + D_801D4210; - D_80114F24 = D_80114F24 + D_801D420C; - D_80114F28 = D_80114F28 + D_801D420E; - D_80114F2C = D_80114F2C + D_801D4210; - func_8012A4BC(); - } - D_801D47D8 = 0; - } -} - - - -extern void (*D_8018D348[])(void); - -void func_8017BE60(void *a0) { - D_8018D348[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018D354[])(void); - -void func_8017BEE4(void *a0) { - D_8018D354[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017BFA0); - - -extern void (*D_8018D360[])(void); - -void func_8017BFC8(void *a0) { - D_8018D360[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C084); - - -extern void (*D_8018D420[])(void); - -void func_8017C0C8(void *a0) { - D_8018D420[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C104); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C12C); - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C624); - - -extern void (*D_8018D460[])(void); - -void func_8017C664(void *a0) { - D_8018D460[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CE10); - - -extern void (*D_8018D480[])(void); - -void func_8017CE54(void *a0) { - D_8018D480[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D098); - - -extern void (*D_8018D490[])(void); - -void func_8017D0DC(void *a0) { - D_8018D490[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018D49C[])(void); - -void func_8017D63C(void *a0) { - D_8018D49C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DA98); - - -extern void (*D_8018D620[])(void); - -void func_8017DB00(void *a0) { - D_8018D620[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DC28); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017DF84); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017E120); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017E324); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017E718); - - -extern void (*D_8018D920[])(void); - -void func_8017E898(void *a0) { - D_8018D920[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017E8D4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017E948); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EA24); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EC38); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017ED0C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EDDC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EE34); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EF2C); - - -extern void (*D_8018D95C[])(void); - -void func_8017EF6C(void *a0) { - D_8018D95C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F16C); - - -extern void (*D_8018D964[])(void); - -void func_8017F200(void *a0) { - D_8018D964[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018D950; - -void func_8017F23C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018D950, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F2E0); - - -extern void (*D_8018DA1C[])(void); - -void func_8017F344(void *a0) { - D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F380); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F3C0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F43C); - -DEFINE_func_8017F49C() /* dedup: shared engine-core @0x8017F49C (src/shared) */ - -DEFINE_func_8017F4A4() /* dedup: shared engine-core @0x8017F4A4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F4CC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F4E8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F4F8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F558); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F624); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F7F0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F84C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F8A8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F90C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017F9BC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017FA80); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017FB40); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8017FB84); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80180A64); - - -extern void (*D_8018DD98[])(void); - -void func_8018165C(void *a0) { - D_8018DD98[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80181698); - - -extern s32 func_800167F0(s32 a0); - -s32 func_801816DC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018DDA0[])(void); - -void func_80181700(void *a0) { - D_8018DDA0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018173C); - - -extern void (*D_8018DDA8[])(void); - -void func_80181780(void *a0) { - D_8018DDA8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801817BC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801817FC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018188C); - - -extern void (*D_8018DDB4[])(void); - -void func_801818AC(void *a0) { - D_8018DDB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801818E8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80181928(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_801819A4(void) { - func_800D1EBC(); - } - - -DEFINE_func_801819C4() /* dedup: shared engine-core @0x801819C4 (src/shared) */ - - -DEFINE_func_801819EC() /* dedup: shared engine-core @0x801819EC (src/shared) */ - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018DDD0; - void func_80181A14(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018DDD0, 0x1000000); - } - - -DEFINE_func_80181A3C() /* dedup: shared engine-core @0x80181A3C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80181A64); - - -extern void (*D_8018DDF0[])(void); - -void func_80181B08(void *a0) { - D_8018DDF0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80181B44); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80181C78); - - -extern void (*D_8018DE08[])(void); - -void func_80181E1C(void *a0) { - D_8018DE08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80181E58); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018201C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018219C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018226C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182380); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801823F8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018244C); - -DEFINE_func_8018248C() /* dedup: shared engine-core @0x8018248C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801824A0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182550); - -extern s32 func_801831D0(void); - void func_80182570(void) { - func_801831D0(); - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182590); - - -extern void (*D_8018E0E4[])(void); - -void func_801825B0(void *a0) { - D_8018E0E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801825EC); - -DEFINE_func_80182704() /* dedup: shared engine-core @0x80182704 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182714); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018276C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801827A0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018283C); - -extern s32 func_8017BEBC(void); - void func_801828A4(void) { - func_8017BEBC(); - } - - -extern s32 func_8017BFA0(void); - void func_801828C4(void) { - func_8017BFA0(); - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801828E4); - -DEFINE_func_80182904() /* dedup: shared engine-core @0x80182904 (src/shared) */ - - -DEFINE_func_80182910() /* dedup: shared engine-core @0x80182910 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018291C); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018295C(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x74D, 0); - } - - -DEFINE_func_80182988() /* dedup: shared engine-core @0x80182988 (src/shared) */ - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_801829E4(u8 *a0); -extern void (*D_8018E134[])(int); - -void func_80182998(int param_1) -{ - ((void (*)(void))func_801829E4)(); - D_8018E134[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801829E4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182A34); - -DEFINE_func_80182ADC() /* dedup: shared engine-core @0x80182ADC (src/shared) */ - -DEFINE_func_80182AE4() /* dedup: shared engine-core @0x80182AE4 (src/shared) */ - - -extern s32 func_80128ED8(void *a0, void *a1); - extern s32 D_801D42F8; - void func_80182AEC(void *arg0) { - ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801D42F8); - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182B18); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182BC4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182C34); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182CC4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182D14); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182DC4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182E38); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182E88); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182F44); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182FAC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80182FCC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018302C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801830C4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183178); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801831D0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183228); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183280); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801832E0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801833C4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801834DC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183634); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801837B0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183830); - -DEFINE_func_801838A4() /* dedup: shared engine-core @0x801838A4 (src/shared) */ - -DEFINE_func_801838E0() /* dedup: shared engine-core @0x801838E0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018391C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801839F4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183A60); - -DEFINE_func_80183AF8() /* dedup: shared engine-core @0x80183AF8 (src/shared) */ - -DEFINE_func_80183B00() /* dedup: shared engine-core @0x80183B00 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183B3C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183B84); - -DEFINE_func_80183C50() /* dedup: shared engine-core @0x80183C50 (src/shared) */ - - -extern void (*D_8018EC08[])(void); - -void func_80183C58(void *a0) { - D_8018EC08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183C94); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80183D68); - -void func_80184164(void) { -} - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018416C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801841C0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184214); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801842DC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184334); - - -extern void (*D_8018EC14[])(void); - -void func_80184430(void *a0) { - D_8018EC14[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_8018EF38[])(void); - -void func_8018446C(void *a0) { - D_8018EF38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801844A8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184540); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801845C8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184618); - -extern s32 func_8001AAA0(s32 arg); - s32 func_80184644(void) { - return func_8001AAA0(0x5A) != 0; - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184664); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184698); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801846CC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184718); - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE4D0; - void func_8018474C(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE4D0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C584C; - void func_80184778(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C584C); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE558; - void func_801847A4(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE558); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C55CC; - void func_801847D0(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C55CC); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C573C; - void func_801847FC(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C573C); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801C57C4; - void func_80184828(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C57C4); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE5E0; - void func_80184854(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE5E0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE668; - void func_80184880(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE668); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801BE6B0; - void func_801848AC(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE6B0); - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801848D8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018490C); - - -extern void (*D_8018EF74[])(void); - -void func_80184940(void *a0) { - D_8018EF74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018497C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184A1C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184B18); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184B94); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184CE0); - - -// @class: struct -// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) - -extern u16 D_801270C0; -extern void (*D_8018EF90[])(); - -void func_80184DD8(int param_1) -{ - if (*(s16 *)&D_801270C0 != 3) { - D_8018EF90[*(u16 *)(param_1 + 2)](); - } -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184E24); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184E78); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80184F18); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018517C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801851C8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018523C); - - -extern void (*D_801C5928[])(void); - -void func_8018545C(void *a0) { - D_801C5928[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185498); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018552C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185550); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801855F0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185620); - -extern s32 D_801D4472; - void func_80185698(s32 arg0) { - *(s16 *)((s32)&D_801D4472 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801856B4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018570C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801857E0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018581C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185868); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185944); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185C08); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185C2C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185C54); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185CDC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185D48); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185DB8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185E30); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185E7C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185F98); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80185FD4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801860E8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801863CC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80186B78); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187180); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801872B4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187674); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801878B8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187968); - - -extern void (*D_801C705C[])(void); - -void func_80187A4C(void *a0) { - D_801C705C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187A88); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187AEC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187B80); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187CA8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187CD8); - -DEFINE_func_80187D04() /* dedup: shared engine-core @0x80187D04 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187DF8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187E78); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80187F2C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018800C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188074); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801880D4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188164); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801881D8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188228); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801882A8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188348); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188418); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801884AC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801884E8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801885D0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188694); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188748); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188788); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801887DC); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188990); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188C8C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188DE4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188E8C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188EB0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188F14); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188F90); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80188FB0); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189074); - - -extern void (*D_801D1070[])(void); - -void func_8018913C(void *a0) { - D_801D1070[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189178); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018924C); - -DEFINE_func_80189274() /* dedup: shared engine-core @0x80189274 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018927C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801893C8); - - -extern void func_8012C218(void *a0); - s32 func_801894E8(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189514); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189524); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189534); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80189574(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801895A8); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801895CC); - - -extern void (*D_801D1098[])(void); - -void func_80189630(void *a0) { - D_801D1098[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_8018966C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801896F4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_801897B4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_801734BC", func_80189824); - diff --git a/src/ov_SC03_119/ov_SC03_119_jr_80178D40.c b/src/ov_SC03_119/ov_SC03_119_jr_80178D40.c new file mode 100644 index 000000000..3b804a010 --- /dev/null +++ b/src/ov_SC03_119/ov_SC03_119_jr_80178D40.c @@ -0,0 +1,5138 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018CB50[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D34F0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018CB44[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018CB88[]; +extern unsigned short D_8018CB90[]; +extern unsigned short D_8018CB98[]; +extern unsigned char D_801D34F8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D34F0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018CBA0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D362C; +extern M2C_UNK D_801D3630; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D35B8; +extern void (*D_8018CBD0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D3634[]; +extern u8 D_801D363C[]; +extern u8 D_801D35EC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018CBD8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018CBF4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018CBFC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018CC64[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018CC08; +extern u8 D_8018CC14; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018CC98[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018CCA0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018CCF4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018CD28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018CD18[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018CD44; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018CDBC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018CDC4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018CDCC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018CDD4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018CDDC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018CDE4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018CDF0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018CDFC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018CE08[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018CE18[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018CE28[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018CE30[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018CE38[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018CE40[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018CE48[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018CE50[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018CE58[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018CE60[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018CE68[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018CE70[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018CE78[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018CE80[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018CE88[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018CE90[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018CE98[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018CEA0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018CEA8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018CEB0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018CEB8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018CEC0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018CEC8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018CED0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018CED8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018CF1C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018CEE0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018CF4C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018CF88[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018CFE0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018CFF0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018CFF8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018D160[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018D16C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D2B3C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D47D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D3D70; +extern short D_801D484C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D484C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D484C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D3D70 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D484C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D47A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D47A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D484C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D484C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D41CC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D3D74; + extern s32 D_801D4188; + extern s16 D_801D418C; + extern s16 D_801D4190; + extern s16 D_801D4194; + extern s16 D_801D4198; + extern s32 D_801D41A0; + extern s32 D_801D41A4; + extern s32 D_801D41B4; + extern s16 D_801D41B8; + extern s16 D_801D41BC; + extern s32 D_801D41C0; + extern s32 D_801D41C8; + extern s32 D_801D41CC[10]; + extern s32 D_801D46F0; + extern s16 D_801D47A8; + extern s32 D_801D47D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D47A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D4194, D_801D4198 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 2; + break; + case 0: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D418C, D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D46F0 != 0) { + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D418C, D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + } else { + (*(s16*)&D_801D484C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D4188); + D_801D4188 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D418C, + D_801D4190 ? 0x48 : 0x40); + (*(s16*)&D_801D484C) = 1; + break; + case 2: + func_80179B28(D_801D4188); + if (D_801D41A0 != 0) { + D_801D3D70 = D_801D41A0; + D_801D41A0 = 0; + (*(s16*)&D_801D484C) = 3; + return; + } + (*(s16*)&D_801D484C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D484C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D484C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D484C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D484C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1B: + D_801D41C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D484C) = 4; + D_801D3D74 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D484C) = 5; + D_801D41B4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D41B4 = (s32)func_8017A3B0; + (*(s16*)&D_801D484C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x24: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D484C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D484C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D484C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D484C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D484C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D41A4); + (*(s16*)&D_801D484C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4E: + D_801D41C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x2B: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D484C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D47D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D484C) = 3; + break; + case 0x34: + (*(s16*)&D_801D484C) = 3; + D_801D3D70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D41A0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D484C) = 3; + D_801D3D70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D484C) = 3; + D_801D3D70 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D3D70 = *(s32 *)(D_801D3D70 + 4); + return; + case 0x37: + (*(s16*)&D_801D484C) = 3; + D_801D418C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4190 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D484C) = 3; + D_801D4194 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4198 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D484C) = 3; + D_801D418C = w1; + D_801D4190 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D484C) = 3; + D_801D4194 = w2; + D_801D4198 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + case 0x43: + D_801D41B4 = (s32)func_8017A3D8; + D_801D41BC = 0; + (*(s16*)&D_801D484C) = 5; + D_801D41B8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D484C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D484C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D484C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D41CC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D484C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D41CC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D484C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D41CC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D484C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D41CC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D484C) = 3; + break; + default: + break; + } +Lend: + D_801D3D70 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D419C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D419C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D419C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D419C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D41C4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D41C4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D4180; + +s32 func_8017A3B0(void) { + switch (D_801D4180) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D41FC; + extern s16 D_801D41FE; + extern s16 D_801D4200; + extern s16 D_801D41F4; + extern s16 D_801D41F6; + extern s16 D_801D41F8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D41FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D41FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4200, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D41F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D41F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D41F8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D4184; +extern u16 D_801D4204; +extern u16 D_801D4206; +extern u16 D_801D4208; +extern s16 D_801D47D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D47D8 = 0; + D_801D4184 = 0; + D_801D4204 = D_80126B5E; + D_801D4206 = D_80126B62; + D_801D4208 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018D2A8[]; + extern s16 D_801D41FC; + extern s16 D_801D41F4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D41FC; + s16 *p78C = &D_801D41F4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D47D8 = 1; + D_801D4184 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D41A4; + extern SV4_8017B368 D_801D41AC; + extern s16 D_801D41FC; + extern s16 D_801D41F4; + extern u16 D_8018D2A8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D41A4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D41AC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018D2A8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D41FC) = loc0; + (*(SV4_8017B368 *)&D_801D41F4) = loc1; + D_801D47D8 = 1; + D_801D4184 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018D2A8[]; + extern s16 D_801D41FC; + extern s16 D_801D41FE; + extern s16 D_801D4200; + extern s16 D_801D41F4; + extern s16 D_801D41F6; + extern s16 D_801D41F8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018D2A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D41FC; + s16 *p78C = &D_801D41F4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D41FE; + v798 = D_801D4200; + v78C = *p78C; + v78E = D_801D41F6; + v790 = D_801D41F8; + __asm__ __volatile__(""); + D_801D47D8 = 1; + D_801D4184 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4184; +extern s16 D_801D41FC; +extern s16 D_801D41FE; +extern s16 D_801D4200; +extern s16 D_801D41F4; +extern s16 D_801D41F6; +extern s16 D_801D41F8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D4184 = 0; + D_801D41FC = (s16) D_80114F30; + D_801D41FE = (s16) D_80114F34; + D_801D4200 = (s16) D_80114F38; + D_801D41F4 = (s16) D_80114F24; + D_801D41F6 = (s16) D_80114F28; + D_801D41F8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D4214; +extern s16 D_801D4216; +extern s16 D_801D4218; +extern s16 D_801D421C; +extern s16 D_801D421E; +extern s16 D_801D4220; + +void func_8017B824(void) { + D_801D4214 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D4216 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D4218 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D421C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D421E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D4220 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D4214; +extern s16 D_801D4216; +extern s16 D_801D4218; +extern s16 D_801D421C; +extern s16 D_801D421E; +extern s16 D_801D4220; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D4214; + D_80114F34 = D_801D4216; + D_80114F38 = D_801D4218; + D_80114F24 = D_801D421C; + D_80114F28 = D_801D421E; + D_80114F2C = D_801D4220; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D41FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D41F4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D41FC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D41F4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D4204; +extern u16 D_801D4206; +extern u16 D_801D4208; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4184; +extern short D_801D420C; +extern short D_801D420E; +extern short D_801D4210; +extern s16 D_801D41FC; +extern s16 D_801D41FE; +extern s16 D_801D4200; +extern s16 D_801D41F4; +extern s16 D_801D41F6; +extern s16 D_801D41F8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4204); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4206); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4208); + (*(s16 *)&D_801D420C) = buf[0]; + (*(s16 *)&D_801D420E) = buf[1]; + (*(s16 *)&D_801D4210) = buf[2]; + D_801D41FC = D_80114F30 + buf[0]; + D_801D4184 = 0; + D_801D41FE = D_80114F34 + buf[1]; + D_801D4200 = D_80114F38 + buf[2]; + D_801D41F4 = D_80114F24 + buf[0]; + D_801D41F6 = D_80114F28 + buf[1]; + D_801D41F8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D41A4; +extern SV4 D_801D41AC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D41AC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D41A4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D41AC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D41AC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D41A4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D41AC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D41CC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D41CC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D4184; +extern s16 D_801D47D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D4184 = D_801D4184 + 1; + if (D_801D4184 >= 0x1F) { + D_801D47D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D4184; +extern s16 D_801D47D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4184 = D_801D4184 + 1; + if (0x18 < D_801D4184) { + func_8012A4BC(); + D_801D47D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D4184; +extern void (*D_801D41C8)(void); +extern short D_801D420C; +extern short D_801D420E; +extern short D_801D4210; +extern s16 D_801D47D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4184 = D_801D4184 + 1; + if (D_801D4184 >= 0x19) { + if (D_801D41C8 != 0) { + (*D_801D41C8)(); + } else { + D_80114F30 = D_80114F30 + D_801D420C; + D_80114F34 = D_80114F34 + D_801D420E; + D_80114F38 = D_80114F38 + D_801D4210; + D_80114F24 = D_80114F24 + D_801D420C; + D_80114F28 = D_80114F28 + D_801D420E; + D_80114F2C = D_80114F2C + D_801D4210; + func_8012A4BC(); + } + D_801D47D8 = 0; + } +} + + + +extern void (*D_8018D348[])(void); + +void func_8017BE60(void *a0) { + D_8018D348[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018D354[])(void); + +void func_8017BEE4(void *a0) { + D_8018D354[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017BFA0); + + +extern void (*D_8018D360[])(void); + +void func_8017BFC8(void *a0) { + D_8018D360[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C084); + + +extern void (*D_8018D420[])(void); + +void func_8017C0C8(void *a0) { + D_8018D420[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C104); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C12C); + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C624); + + +extern void (*D_8018D460[])(void); + +void func_8017C664(void *a0) { + D_8018D460[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CE10); + + +extern void (*D_8018D480[])(void); + +void func_8017CE54(void *a0) { + D_8018D480[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D098); + + +extern void (*D_8018D490[])(void); + +void func_8017D0DC(void *a0) { + D_8018D490[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018D49C[])(void); + +void func_8017D63C(void *a0) { + D_8018D49C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DA98); + + +extern void (*D_8018D620[])(void); + +void func_8017DB00(void *a0) { + D_8018D620[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DC28); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017DF84); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017E120); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017E324); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017E718); + + +extern void (*D_8018D920[])(void); + +void func_8017E898(void *a0) { + D_8018D920[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017E8D4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017E948); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EA24); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EC38); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017ED0C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EDDC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EE34); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EF2C); + + +extern void (*D_8018D95C[])(void); + +void func_8017EF6C(void *a0) { + D_8018D95C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F16C); + + +extern void (*D_8018D964[])(void); + +void func_8017F200(void *a0) { + D_8018D964[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018D950; + +void func_8017F23C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018D950, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F2E0); + + +extern void (*D_8018DA1C[])(void); + +void func_8017F344(void *a0) { + D_8018DA1C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F380); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F3C0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F43C); + +DEFINE_func_8017F49C() /* dedup: shared engine-core @0x8017F49C (src/shared) */ + +DEFINE_func_8017F4A4() /* dedup: shared engine-core @0x8017F4A4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F4CC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F4E8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F4F8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F558); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F624); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F7F0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F84C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F8A8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F90C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017F9BC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017FA80); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017FB40); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8017FB84); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80180A64); + + +extern void (*D_8018DD98[])(void); + +void func_8018165C(void *a0) { + D_8018DD98[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80181698); + + +extern s32 func_800167F0(s32 a0); + +s32 func_801816DC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018DDA0[])(void); + +void func_80181700(void *a0) { + D_8018DDA0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018173C); + + +extern void (*D_8018DDA8[])(void); + +void func_80181780(void *a0) { + D_8018DDA8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801817BC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801817FC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018188C); + + +extern void (*D_8018DDB4[])(void); + +void func_801818AC(void *a0) { + D_8018DDB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801818E8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80181928(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_801819A4(void) { + func_800D1EBC(); + } + + +DEFINE_func_801819C4() /* dedup: shared engine-core @0x801819C4 (src/shared) */ + + +DEFINE_func_801819EC() /* dedup: shared engine-core @0x801819EC (src/shared) */ + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018DDD0; + void func_80181A14(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018DDD0, 0x1000000); + } + + +DEFINE_func_80181A3C() /* dedup: shared engine-core @0x80181A3C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80181A64); + + +extern void (*D_8018DDF0[])(void); + +void func_80181B08(void *a0) { + D_8018DDF0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80181B44); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80181C78); + + +extern void (*D_8018DE08[])(void); + +void func_80181E1C(void *a0) { + D_8018DE08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80181E58); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018201C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018219C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018226C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182380); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801823F8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018244C); + +DEFINE_func_8018248C() /* dedup: shared engine-core @0x8018248C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801824A0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182550); + +extern s32 func_801831D0(void); + void func_80182570(void) { + func_801831D0(); + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182590); + + +extern void (*D_8018E0E4[])(void); + +void func_801825B0(void *a0) { + D_8018E0E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801825EC); + +DEFINE_func_80182704() /* dedup: shared engine-core @0x80182704 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182714); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018276C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801827A0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018283C); + +extern s32 func_8017BEBC(void); + void func_801828A4(void) { + func_8017BEBC(); + } + + +extern s32 func_8017BFA0(void); + void func_801828C4(void) { + func_8017BFA0(); + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801828E4); + +DEFINE_func_80182904() /* dedup: shared engine-core @0x80182904 (src/shared) */ + + +DEFINE_func_80182910() /* dedup: shared engine-core @0x80182910 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018291C); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018295C(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x74D, 0); + } + + +DEFINE_func_80182988() /* dedup: shared engine-core @0x80182988 (src/shared) */ + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_801829E4(u8 *a0); +extern void (*D_8018E134[])(int); + +void func_80182998(int param_1) +{ + ((void (*)(void))func_801829E4)(); + D_8018E134[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801829E4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182A34); + +DEFINE_func_80182ADC() /* dedup: shared engine-core @0x80182ADC (src/shared) */ + +DEFINE_func_80182AE4() /* dedup: shared engine-core @0x80182AE4 (src/shared) */ + + +extern s32 func_80128ED8(void *a0, void *a1); + extern s32 D_801D42F8; + void func_80182AEC(void *arg0) { + ((void (*)(s32, s32))func_80128ED8)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801D42F8); + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182B18); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182BC4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182C34); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182CC4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182D14); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182DC4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182E38); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182E88); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182F44); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182FAC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80182FCC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018302C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801830C4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183178); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801831D0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183228); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183280); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801832E0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801833C4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801834DC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183634); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801837B0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183830); + +DEFINE_func_801838A4() /* dedup: shared engine-core @0x801838A4 (src/shared) */ + +DEFINE_func_801838E0() /* dedup: shared engine-core @0x801838E0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018391C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801839F4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183A60); + +DEFINE_func_80183AF8() /* dedup: shared engine-core @0x80183AF8 (src/shared) */ + +DEFINE_func_80183B00() /* dedup: shared engine-core @0x80183B00 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183B3C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183B84); + +DEFINE_func_80183C50() /* dedup: shared engine-core @0x80183C50 (src/shared) */ + + +extern void (*D_8018EC08[])(void); + +void func_80183C58(void *a0) { + D_8018EC08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183C94); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80183D68); + +void func_80184164(void) { +} + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018416C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801841C0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184214); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801842DC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184334); + + +extern void (*D_8018EC14[])(void); + +void func_80184430(void *a0) { + D_8018EC14[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_8018EF38[])(void); + +void func_8018446C(void *a0) { + D_8018EF38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801844A8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184540); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801845C8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184618); + +extern s32 func_8001AAA0(s32 arg); + s32 func_80184644(void) { + return func_8001AAA0(0x5A) != 0; + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184664); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184698); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801846CC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184718); + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE4D0; + void func_8018474C(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE4D0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C584C; + void func_80184778(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C584C); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE558; + void func_801847A4(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE558); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C55CC; + void func_801847D0(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C55CC); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C573C; + void func_801847FC(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C573C); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801C57C4; + void func_80184828(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801C57C4); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE5E0; + void func_80184854(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE5E0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE668; + void func_80184880(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE668); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801BE6B0; + void func_801848AC(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_801BE6B0); + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801848D8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018490C); + + +extern void (*D_8018EF74[])(void); + +void func_80184940(void *a0) { + D_8018EF74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018497C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184A1C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184B18); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184B94); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184CE0); + + +// @class: struct +// @stuck: none — MATCH (array-of-fnptr %lo-fold + signed-halfword guard) + +extern u16 D_801270C0; +extern void (*D_8018EF90[])(); + +void func_80184DD8(int param_1) +{ + if (*(s16 *)&D_801270C0 != 3) { + D_8018EF90[*(u16 *)(param_1 + 2)](); + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184E24); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184E78); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80184F18); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018517C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801851C8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018523C); + + +extern void (*D_801C5928[])(void); + +void func_8018545C(void *a0) { + D_801C5928[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185498); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018552C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185550); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801855F0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185620); + +extern s32 D_801D4472; + void func_80185698(s32 arg0) { + *(s16 *)((s32)&D_801D4472 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801856B4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018570C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801857E0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018581C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185868); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185944); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185C08); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185C2C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185C54); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185CDC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185D48); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185DB8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185E30); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185E7C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185F98); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80185FD4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801860E8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801863CC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80186B78); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187180); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801872B4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187674); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801878B8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187968); + + +extern void (*D_801C705C[])(void); + +void func_80187A4C(void *a0) { + D_801C705C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187A88); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187AEC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187B80); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187CA8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187CD8); + +DEFINE_func_80187D04() /* dedup: shared engine-core @0x80187D04 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187DF8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187E78); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80187F2C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018800C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188074); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801880D4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188164); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801881D8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188228); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801882A8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188348); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188418); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801884AC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801884E8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801885D0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188694); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188748); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188788); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801887DC); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188990); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188C8C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188DE4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188E8C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188EB0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188F14); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188F90); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80188FB0); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189074); + + +extern void (*D_801D1070[])(void); + +void func_8018913C(void *a0) { + D_801D1070[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189178); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018924C); + +DEFINE_func_80189274() /* dedup: shared engine-core @0x80189274 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018927C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801893C8); + + +extern void func_8012C218(void *a0); + s32 func_801894E8(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189514); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189524); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189534); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80189574(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801895A8); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801895CC); + + +extern void (*D_801D1098[])(void); + +void func_80189630(void *a0) { + D_801D1098[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_8018966C); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801896F4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_801897B4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_80178D40", func_80189824); + + diff --git a/src/ov_SC03_121/ov_SC03_121_jr_801734BC.c b/src/ov_SC03_121/ov_SC03_121_jr_801734BC.c index 6e99b260c..bee950463 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_801734BC.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_801734BC.c @@ -3084,1043 +3084,3 @@ void func_80178D18(void) { D_801AEFAC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AEC44; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AEC44 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AEC44; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AEC44 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AEC6C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AEC6C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AEC28; - -s32 func_8017A3B0(void) { - switch (D_801AEC28) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AEC64; -extern short D_801AEC60; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AEC64) { - case 0: - func_800D0CA0(1); - D_801AEC64 = D_801AEC64 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AEC60; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AEC64 = D_801AEC64 + 1; - if (D_801AEC64 < 0x1E) { - return 0; - } - D_801AEC64 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AECA4; - extern s16 D_801AECA6; - extern s16 D_801AECA8; - extern s16 D_801AEC9C; - extern s16 D_801AEC9E; - extern s16 D_801AECA0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AECA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AECA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AECA8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AEC9C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AEC9E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AECA0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AEC2C; -extern u16 D_801AECAC; -extern u16 D_801AECAE; -extern u16 D_801AECB0; -extern s16 D_801AEF38; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AEF38 = 0; - D_801AEC2C = 0; - D_801AECAC = D_80126B5E; - D_801AECAE = D_80126B62; - D_801AECB0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185AC4[]; - extern s16 D_801AECA4; - extern s16 D_801AEC9C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185AC4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185AC4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AECA4; - s16 *p78C = &D_801AEC9C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AEF38 = 1; - D_801AEC2C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AEC4C; - extern SV4_8017B368 D_801AEC54; - extern s16 D_801AECA4; - extern s16 D_801AEC9C; - extern u16 D_80185AC4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AEC4C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AEC54; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185AC4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185AC4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AECA4) = loc0; - (*(SV4_8017B368 *)&D_801AEC9C) = loc1; - D_801AEF38 = 1; - D_801AEC2C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185AC4[]; - extern s16 D_801AECA4; - extern s16 D_801AECA6; - extern s16 D_801AECA8; - extern s16 D_801AEC9C; - extern s16 D_801AEC9E; - extern s16 D_801AECA0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185AC4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185AC4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AECA4; - s16 *p78C = &D_801AEC9C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AECA6; - v798 = D_801AECA8; - v78C = *p78C; - v78E = D_801AEC9E; - v790 = D_801AECA0; - __asm__ __volatile__(""); - D_801AEF38 = 1; - D_801AEC2C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AEC2C; -extern s16 D_801AECA4; -extern s16 D_801AECA6; -extern s16 D_801AECA8; -extern s16 D_801AEC9C; -extern s16 D_801AEC9E; -extern s16 D_801AECA0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AEC2C = 0; - D_801AECA4 = (s16) D_80114F30; - D_801AECA6 = (s16) D_80114F34; - D_801AECA8 = (s16) D_80114F38; - D_801AEC9C = (s16) D_80114F24; - D_801AEC9E = (s16) D_80114F28; - D_801AECA0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AECBC; -extern s16 D_801AECBE; -extern s16 D_801AECC0; -extern s16 D_801AECC4; -extern s16 D_801AECC6; -extern s16 D_801AECC8; - -void func_8017B824(void) { - D_801AECBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AECBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AECC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AECC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AECC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AECC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AECBC; -extern s16 D_801AECBE; -extern s16 D_801AECC0; -extern s16 D_801AECC4; -extern s16 D_801AECC6; -extern s16 D_801AECC8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AECBC; - D_80114F34 = D_801AECBE; - D_80114F38 = D_801AECC0; - D_80114F24 = D_801AECC4; - D_80114F28 = D_801AECC6; - D_80114F2C = D_801AECC8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AECA4), src[8..15] -> (*(S8_8017B8E8 *)&D_801AEC9C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AECA4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AEC9C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AECAC; -extern u16 D_801AECAE; -extern u16 D_801AECB0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AEC2C; -extern short D_801AECB4; -extern short D_801AECB6; -extern short D_801AECB8; -extern s16 D_801AECA4; -extern s16 D_801AECA6; -extern s16 D_801AECA8; -extern s16 D_801AEC9C; -extern s16 D_801AEC9E; -extern s16 D_801AECA0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AECAC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AECAE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AECB0); - (*(s16 *)&D_801AECB4) = buf[0]; - (*(s16 *)&D_801AECB6) = buf[1]; - (*(s16 *)&D_801AECB8) = buf[2]; - D_801AECA4 = D_80114F30 + buf[0]; - D_801AEC2C = 0; - D_801AECA6 = D_80114F34 + buf[1]; - D_801AECA8 = D_80114F38 + buf[2]; - D_801AEC9C = D_80114F24 + buf[0]; - D_801AEC9E = D_80114F28 + buf[1]; - D_801AECA0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AEC4C; -extern SV4 D_801AEC54; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AEC54) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AEC4C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AEC54 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AEC54)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AEC4C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AEC54) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AEC74[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AEC74; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AEC2C; -extern s16 D_801AEF38; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AEC2C = D_801AEC2C + 1; - if (D_801AEC2C >= 0x1F) { - D_801AEF38 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AEC2C; -extern s16 D_801AEF38; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AEC2C = D_801AEC2C + 1; - if (0x18 < D_801AEC2C) { - func_8012A4BC(); - D_801AEF38 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AEC2C; -extern void (*D_801AEC70)(void); -extern short D_801AECB4; -extern short D_801AECB6; -extern short D_801AECB8; -extern s16 D_801AEF38; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AEC2C = D_801AEC2C + 1; - if (D_801AEC2C >= 0x19) { - if (D_801AEC70 != 0) { - (*D_801AEC70)(); - } else { - D_80114F30 = D_80114F30 + D_801AECB4; - D_80114F34 = D_80114F34 + D_801AECB6; - D_80114F38 = D_80114F38 + D_801AECB8; - D_80114F24 = D_80114F24 + D_801AECB4; - D_80114F28 = D_80114F28 + D_801AECB6; - D_80114F2C = D_80114F2C + D_801AECB8; - func_8012A4BC(); - } - D_801AEF38 = 0; - } -} - - - -extern void (*D_80185B64[])(void); - -void func_8017BE60(void *a0) { - D_80185B64[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017CE3C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017CEA4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D024); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D064); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D104); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D16C); - -void func_8017D1B4(void) { -} - -extern u8 D_80078EC0; - void func_8017D1BC(void) { - D_80078EC0 = (D_80078EC0 & 0x7F); - } - - - -extern void (*D_80185C2C[])(void); - -void func_8017D1DC(void *a0) { - D_80185C2C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D218); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D25C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80185C34[])(void); - -void func_8017D280(void *a0) { - D_80185C34[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017D2BC(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D2D8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D354(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D374); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D39C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D3C4); - - -extern void (*D_80185C58[])(void); - -void func_8017D460(void *a0) { - D_80185C58[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D49C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D4C4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D65C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D788); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017D8D4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017DC24); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017DDB4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017DF2C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017E1D0); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017E710); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017E880); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017EFFC); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F174); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F234); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F374); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F4C8); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F578); - - -extern void (*D_80185E7C[])(void); - -void func_8017F69C(void *a0) { - D_80185E7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F6D8); - - -extern void (*D_80185ED0[])(void); - -void func_8017F840(void *a0) { - D_80185ED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F87C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F91C); - -extern void func_80131E00(struct S80131E00 *a0, s32 a1); - void func_8017F978(void *arg0) { - ((void (*)(void *, int))func_80131E00)(arg0, 0x11); - } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017F998); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FA64); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FA84); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FAC8); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FB28); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FBD8); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FC50); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FCB8); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FD14); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FD88); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FDC4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FE6C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_8017FF8C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180038); - -void func_801800A8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_801800B0); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801AB6F4; - -void func_801801DC(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AB6F4); - *(s16 *)((u8 *)arg0 + 0x2) = 0x2; -} - - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801AAFFC; - -void func_80180214(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AAFFC); - *(s16 *)((u8 *)arg0 + 0x2) = 0x2; -} - - -s32 func_8018024C(void) { - return 0x40; - } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180254); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180568); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180850); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180B1C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80180E64); - - -extern void (*D_8019BC80[])(void); - -void func_801811DC(void *a0) { - D_8019BC80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181218); - - -extern void (*D_8019BCB4[])(void); - -void func_801813AC(void *a0) { - D_8019BCB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_801813E8); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_801816C0); - - -extern void (*D_8019BD84[])(void); - -void func_80181868(void *a0) { - D_8019BD84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_801818A4); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801818E4(void) { - func_8002D4C8(0x79E, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181908); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_801819B8); - -void func_80181A98(void) { -} - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181AA0); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181B34); - - -extern s32 D_801AEE38; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80181BE8(s32 a0, s32 a1) { - D_801AEE38 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181C18); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_801734BC", func_80181E5C); - -extern void (*D_801ABCB8[])(void); - -void func_801820FC(void *a0) { - D_801ABCB8[*(u16 *)((s32)a0 + 0x2)](); -} - diff --git a/src/ov_SC03_121/ov_SC03_121_jr_80178D40.c b/src/ov_SC03_121/ov_SC03_121_jr_80178D40.c new file mode 100644 index 000000000..6a3fbcfb7 --- /dev/null +++ b/src/ov_SC03_121/ov_SC03_121_jr_80178D40.c @@ -0,0 +1,4489 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018536C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801ADF98; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185360[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801853A4[]; +extern unsigned short D_801853AC[]; +extern unsigned short D_801853B4[]; +extern unsigned char D_801ADFA0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801ADF98; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801853BC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AE0D4; +extern M2C_UNK D_801AE0D8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AE060; +extern void (*D_801853EC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801AE0DC[]; +extern u8 D_801AE0E4[]; +extern u8 D_801AE094[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801853F4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185410[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185418[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185480[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185424; +extern u8 D_80185430; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801854B4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801854BC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185510[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185544[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185534[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185560; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801855D8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801855E0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801855E8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801855F0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801855F8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185600[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018560C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185618[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185624[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185634[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185644[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018564C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185654[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018565C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185664[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018566C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185674[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018567C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185684[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018568C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185694[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018569C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801856A4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801856AC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801856B4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801856BC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801856C4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801856CC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801856D4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801856DC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801856E4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801856EC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801856F4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185738[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801856FC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185768[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801857A4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801857FC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018580C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185814[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018597C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185988[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801AD644; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AEF38; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AE818; +extern short D_801AEFAC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AEFAC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AEFAC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AE818 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AEFAC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AEF08 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AEF08 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AEFAC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AEFAC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AEC74[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AE81C; + extern s32 D_801AEC30; + extern s16 D_801AEC34; + extern s16 D_801AEC38; + extern s16 D_801AEC3C; + extern s16 D_801AEC40; + extern s32 D_801AEC48; + extern s32 D_801AEC4C; + extern s32 D_801AEC5C; + extern s16 D_801AEC60; + extern s16 D_801AEC64; + extern s32 D_801AEC68; + extern s32 D_801AEC70; + extern s32 D_801AEC74[10]; + extern s32 D_801AEE50; + extern s16 D_801AEF08; + extern s32 D_801AEF34; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AEF08; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AEC30); + D_801AEC30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AEC3C, D_801AEC40 ? 0x48 : 0x40); + (*(s16*)&D_801AEFAC) = 2; + break; + case 0: + func_80179B28(D_801AEC30); + D_801AEC30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AEC34, D_801AEC38 ? 0x48 : 0x40); + (*(s16*)&D_801AEFAC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AEE50 != 0) { + func_80179B28(D_801AEC30); + D_801AEC30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AEC34, D_801AEC38 ? 0x48 : 0x40); + (*(s16*)&D_801AEFAC) = 1; + } else { + (*(s16*)&D_801AEFAC) = 3; + } + break; + case 0x32: + func_80179B28(D_801AEC30); + D_801AEC30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AEC34, + D_801AEC38 ? 0x48 : 0x40); + (*(s16*)&D_801AEFAC) = 1; + break; + case 2: + func_80179B28(D_801AEC30); + if (D_801AEC48 != 0) { + D_801AE818 = D_801AEC48; + D_801AEC48 = 0; + (*(s16*)&D_801AEFAC) = 3; + return; + } + (*(s16*)&D_801AEFAC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AEFAC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AEFAC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AEFAC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x1B: + D_801AEC68 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AEFAC) = 4; + D_801AE81C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AEFAC) = 5; + D_801AEC5C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AEC5C = (s32)func_8017A3B0; + (*(s16*)&D_801AEFAC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x24: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AEFAC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AEFAC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AEFAC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AEFAC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AEFAC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AEFAC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AEFAC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AEC4C); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AEC4C); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AEC4C); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AEC4C); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x4E: + D_801AEC70 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x2B: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AEFAC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AEF34 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x34: + (*(s16*)&D_801AEFAC) = 3; + D_801AE818 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AEC48 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AEFAC) = 3; + D_801AE818 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AEFAC) = 3; + D_801AE818 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AE818 = *(s32 *)(D_801AE818 + 4); + return; + case 0x37: + (*(s16*)&D_801AEFAC) = 3; + D_801AEC34 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AEC38 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AEFAC) = 3; + D_801AEC3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AEC40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AEFAC) = 3; + D_801AEC34 = w1; + D_801AEC38 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AEFAC) = 3; + D_801AEC3C = w2; + D_801AEC40 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x43: + D_801AEC5C = (s32)func_8017A3D8; + D_801AEC64 = 0; + (*(s16*)&D_801AEFAC) = 5; + D_801AEC60 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AEFAC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AEFAC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AEC74; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AEFAC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AEC74; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AEFAC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AEC74[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AEFAC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AEC74; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AEFAC) = 3; + break; + default: + break; + } +Lend: + D_801AE818 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AEC44; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AEC44 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AEC44; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AEC44 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AEC6C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AEC6C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AEC28; + +s32 func_8017A3B0(void) { + switch (D_801AEC28) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AEC64; +extern short D_801AEC60; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AEC64) { + case 0: + func_800D0CA0(1); + D_801AEC64 = D_801AEC64 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AEC60; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AEC64 = D_801AEC64 + 1; + if (D_801AEC64 < 0x1E) { + return 0; + } + D_801AEC64 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AECA4; + extern s16 D_801AECA6; + extern s16 D_801AECA8; + extern s16 D_801AEC9C; + extern s16 D_801AEC9E; + extern s16 D_801AECA0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AECA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AECA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AECA8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AEC9C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AEC9E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AECA0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AEC2C; +extern u16 D_801AECAC; +extern u16 D_801AECAE; +extern u16 D_801AECB0; +extern s16 D_801AEF38; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AEF38 = 0; + D_801AEC2C = 0; + D_801AECAC = D_80126B5E; + D_801AECAE = D_80126B62; + D_801AECB0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185AC4[]; + extern s16 D_801AECA4; + extern s16 D_801AEC9C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185AC4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185AC4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AECA4; + s16 *p78C = &D_801AEC9C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AEF38 = 1; + D_801AEC2C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AEC4C; + extern SV4_8017B368 D_801AEC54; + extern s16 D_801AECA4; + extern s16 D_801AEC9C; + extern u16 D_80185AC4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AEC4C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AEC54; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185AC4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185AC4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AECA4) = loc0; + (*(SV4_8017B368 *)&D_801AEC9C) = loc1; + D_801AEF38 = 1; + D_801AEC2C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185AC4[]; + extern s16 D_801AECA4; + extern s16 D_801AECA6; + extern s16 D_801AECA8; + extern s16 D_801AEC9C; + extern s16 D_801AEC9E; + extern s16 D_801AECA0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185AC4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185AC4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AECA4; + s16 *p78C = &D_801AEC9C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AECA6; + v798 = D_801AECA8; + v78C = *p78C; + v78E = D_801AEC9E; + v790 = D_801AECA0; + __asm__ __volatile__(""); + D_801AEF38 = 1; + D_801AEC2C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AEC2C; +extern s16 D_801AECA4; +extern s16 D_801AECA6; +extern s16 D_801AECA8; +extern s16 D_801AEC9C; +extern s16 D_801AEC9E; +extern s16 D_801AECA0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AEC2C = 0; + D_801AECA4 = (s16) D_80114F30; + D_801AECA6 = (s16) D_80114F34; + D_801AECA8 = (s16) D_80114F38; + D_801AEC9C = (s16) D_80114F24; + D_801AEC9E = (s16) D_80114F28; + D_801AECA0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AECBC; +extern s16 D_801AECBE; +extern s16 D_801AECC0; +extern s16 D_801AECC4; +extern s16 D_801AECC6; +extern s16 D_801AECC8; + +void func_8017B824(void) { + D_801AECBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AECBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AECC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AECC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AECC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AECC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AECBC; +extern s16 D_801AECBE; +extern s16 D_801AECC0; +extern s16 D_801AECC4; +extern s16 D_801AECC6; +extern s16 D_801AECC8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AECBC; + D_80114F34 = D_801AECBE; + D_80114F38 = D_801AECC0; + D_80114F24 = D_801AECC4; + D_80114F28 = D_801AECC6; + D_80114F2C = D_801AECC8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AECA4), src[8..15] -> (*(S8_8017B8E8 *)&D_801AEC9C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AECA4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AEC9C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AECAC; +extern u16 D_801AECAE; +extern u16 D_801AECB0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AEC2C; +extern short D_801AECB4; +extern short D_801AECB6; +extern short D_801AECB8; +extern s16 D_801AECA4; +extern s16 D_801AECA6; +extern s16 D_801AECA8; +extern s16 D_801AEC9C; +extern s16 D_801AEC9E; +extern s16 D_801AECA0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AECAC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AECAE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AECB0); + (*(s16 *)&D_801AECB4) = buf[0]; + (*(s16 *)&D_801AECB6) = buf[1]; + (*(s16 *)&D_801AECB8) = buf[2]; + D_801AECA4 = D_80114F30 + buf[0]; + D_801AEC2C = 0; + D_801AECA6 = D_80114F34 + buf[1]; + D_801AECA8 = D_80114F38 + buf[2]; + D_801AEC9C = D_80114F24 + buf[0]; + D_801AEC9E = D_80114F28 + buf[1]; + D_801AECA0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AEC4C; +extern SV4 D_801AEC54; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AEC54) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AEC4C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AEC54 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AEC54)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AEC4C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AEC54) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AEC74[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AEC74; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AEC2C; +extern s16 D_801AEF38; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AEC2C = D_801AEC2C + 1; + if (D_801AEC2C >= 0x1F) { + D_801AEF38 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AEC2C; +extern s16 D_801AEF38; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AEC2C = D_801AEC2C + 1; + if (0x18 < D_801AEC2C) { + func_8012A4BC(); + D_801AEF38 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AEC2C; +extern void (*D_801AEC70)(void); +extern short D_801AECB4; +extern short D_801AECB6; +extern short D_801AECB8; +extern s16 D_801AEF38; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AEC2C = D_801AEC2C + 1; + if (D_801AEC2C >= 0x19) { + if (D_801AEC70 != 0) { + (*D_801AEC70)(); + } else { + D_80114F30 = D_80114F30 + D_801AECB4; + D_80114F34 = D_80114F34 + D_801AECB6; + D_80114F38 = D_80114F38 + D_801AECB8; + D_80114F24 = D_80114F24 + D_801AECB4; + D_80114F28 = D_80114F28 + D_801AECB6; + D_80114F2C = D_80114F2C + D_801AECB8; + func_8012A4BC(); + } + D_801AEF38 = 0; + } +} + + + +extern void (*D_80185B64[])(void); + +void func_8017BE60(void *a0) { + D_80185B64[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017CE3C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017CEA4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D024); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D064); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D104); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D16C); + +void func_8017D1B4(void) { +} + +extern u8 D_80078EC0; + void func_8017D1BC(void) { + D_80078EC0 = (D_80078EC0 & 0x7F); + } + + + +extern void (*D_80185C2C[])(void); + +void func_8017D1DC(void *a0) { + D_80185C2C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D218); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D25C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80185C34[])(void); + +void func_8017D280(void *a0) { + D_80185C34[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017D2BC(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D2D8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D354(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D374); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D39C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D3C4); + + +extern void (*D_80185C58[])(void); + +void func_8017D460(void *a0) { + D_80185C58[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D49C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D4C4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D65C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D788); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017D8D4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017DC24); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017DDB4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017DF2C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017E1D0); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017E710); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017E880); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017EFFC); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F174); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F234); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F374); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F4C8); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F578); + + +extern void (*D_80185E7C[])(void); + +void func_8017F69C(void *a0) { + D_80185E7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F6D8); + + +extern void (*D_80185ED0[])(void); + +void func_8017F840(void *a0) { + D_80185ED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F87C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F91C); + +extern void func_80131E00(struct S80131E00 *a0, s32 a1); + void func_8017F978(void *arg0) { + ((void (*)(void *, int))func_80131E00)(arg0, 0x11); + } + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017F998); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FA64); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FA84); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FAC8); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FB28); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FBD8); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FC50); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FCB8); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FD14); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FD88); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FDC4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FE6C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_8017FF8C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180038); + +void func_801800A8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_801800B0); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801AB6F4; + +void func_801801DC(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AB6F4); + *(s16 *)((u8 *)arg0 + 0x2) = 0x2; +} + + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801AAFFC; + +void func_80180214(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AAFFC); + *(s16 *)((u8 *)arg0 + 0x2) = 0x2; +} + + +s32 func_8018024C(void) { + return 0x40; + } + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180254); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180568); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180850); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180B1C); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80180E64); + + +extern void (*D_8019BC80[])(void); + +void func_801811DC(void *a0) { + D_8019BC80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181218); + + +extern void (*D_8019BCB4[])(void); + +void func_801813AC(void *a0) { + D_8019BCB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_801813E8); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_801816C0); + + +extern void (*D_8019BD84[])(void); + +void func_80181868(void *a0) { + D_8019BD84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_801818A4); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801818E4(void) { + func_8002D4C8(0x79E, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181908); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_801819B8); + +void func_80181A98(void) { +} + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181AA0); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181B34); + + +extern s32 D_801AEE38; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80181BE8(s32 a0, s32 a1) { + D_801AEE38 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181C18); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_80178D40", func_80181E5C); + +extern void (*D_801ABCB8[])(void); + +void func_801820FC(void *a0) { + D_801ABCB8[*(u16 *)((s32)a0 + 0x2)](); +} + + diff --git a/src/ov_SC03_124/ov_SC03_124_jr_801734BC.c b/src/ov_SC03_124/ov_SC03_124_jr_801734BC.c index 64e770ecf..eafdf104f 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_801734BC.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_801734BC.c @@ -3075,2188 +3075,3 @@ void func_80178D18(void) { D_801E25E4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E176C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E176C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E176C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E176C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E1794; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E1794 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E1750; - -s32 func_8017A3B0(void) { - switch (D_801E1750) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E178C; -extern short D_801E1788; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E178C) { - case 0: - func_800D0CA0(1); - D_801E178C = D_801E178C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E1788; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E178C = D_801E178C + 1; - if (D_801E178C < 0x1E) { - return 0; - } - D_801E178C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E17CC; - extern s16 D_801E17CE; - extern s16 D_801E17D0; - extern s16 D_801E17C4; - extern s16 D_801E17C6; - extern s16 D_801E17C8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E17CC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E17CE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E17D0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E17C4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E17C6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E17C8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E1754; -extern u16 D_801E17D4; -extern u16 D_801E17D6; -extern u16 D_801E17D8; -extern s16 D_801E2570; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E2570 = 0; - D_801E1754 = 0; - D_801E17D4 = D_80126B5E; - D_801E17D6 = D_80126B62; - D_801E17D8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E4F0[]; - extern s16 D_801E17CC; - extern s16 D_801E17C4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E17CC; - s16 *p78C = &D_801E17C4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E2570 = 1; - D_801E1754 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E1774; - extern SV4_8017B368 D_801E177C; - extern s16 D_801E17CC; - extern s16 D_801E17C4; - extern u16 D_8018E4F0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E1774; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E177C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E4F0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E4F0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E17CC) = loc0; - (*(SV4_8017B368 *)&D_801E17C4) = loc1; - D_801E2570 = 1; - D_801E1754 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018E4F0[]; - extern s16 D_801E17CC; - extern s16 D_801E17CE; - extern s16 D_801E17D0; - extern s16 D_801E17C4; - extern s16 D_801E17C6; - extern s16 D_801E17C8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E17CC; - s16 *p78C = &D_801E17C4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E17CE; - v798 = D_801E17D0; - v78C = *p78C; - v78E = D_801E17C6; - v790 = D_801E17C8; - __asm__ __volatile__(""); - D_801E2570 = 1; - D_801E1754 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1754; -extern s16 D_801E17CC; -extern s16 D_801E17CE; -extern s16 D_801E17D0; -extern s16 D_801E17C4; -extern s16 D_801E17C6; -extern s16 D_801E17C8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E1754 = 0; - D_801E17CC = (s16) D_80114F30; - D_801E17CE = (s16) D_80114F34; - D_801E17D0 = (s16) D_80114F38; - D_801E17C4 = (s16) D_80114F24; - D_801E17C6 = (s16) D_80114F28; - D_801E17C8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E17E4; -extern s16 D_801E17E6; -extern s16 D_801E17E8; -extern s16 D_801E17EC; -extern s16 D_801E17EE; -extern s16 D_801E17F0; - -void func_8017B824(void) { - D_801E17E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E17E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E17E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E17EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E17EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E17F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E17E4; -extern s16 D_801E17E6; -extern s16 D_801E17E8; -extern s16 D_801E17EC; -extern s16 D_801E17EE; -extern s16 D_801E17F0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E17E4; - D_80114F34 = D_801E17E6; - D_80114F38 = D_801E17E8; - D_80114F24 = D_801E17EC; - D_80114F28 = D_801E17EE; - D_80114F2C = D_801E17F0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E17CC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E17C4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E17CC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E17C4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E17D4; -extern u16 D_801E17D6; -extern u16 D_801E17D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1754; -extern short D_801E17DC; -extern short D_801E17DE; -extern short D_801E17E0; -extern s16 D_801E17CC; -extern s16 D_801E17CE; -extern s16 D_801E17D0; -extern s16 D_801E17C4; -extern s16 D_801E17C6; -extern s16 D_801E17C8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E17D4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E17D6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E17D8); - (*(s16 *)&D_801E17DC) = buf[0]; - (*(s16 *)&D_801E17DE) = buf[1]; - (*(s16 *)&D_801E17E0) = buf[2]; - D_801E17CC = D_80114F30 + buf[0]; - D_801E1754 = 0; - D_801E17CE = D_80114F34 + buf[1]; - D_801E17D0 = D_80114F38 + buf[2]; - D_801E17C4 = D_80114F24 + buf[0]; - D_801E17C6 = D_80114F28 + buf[1]; - D_801E17C8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E1774; -extern SV4 D_801E177C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E177C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E1774 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E177C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E177C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E1774) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E177C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E179C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E179C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E1754; -extern s16 D_801E2570; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E1754 = D_801E1754 + 1; - if (D_801E1754 >= 0x1F) { - D_801E2570 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E1754; -extern s16 D_801E2570; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1754 = D_801E1754 + 1; - if (0x18 < D_801E1754) { - func_8012A4BC(); - D_801E2570 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E1754; -extern void (*D_801E1798)(void); -extern short D_801E17DC; -extern short D_801E17DE; -extern short D_801E17E0; -extern s16 D_801E2570; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1754 = D_801E1754 + 1; - if (D_801E1754 >= 0x19) { - if (D_801E1798 != 0) { - (*D_801E1798)(); - } else { - D_80114F30 = D_80114F30 + D_801E17DC; - D_80114F34 = D_80114F34 + D_801E17DE; - D_80114F38 = D_80114F38 + D_801E17E0; - D_80114F24 = D_80114F24 + D_801E17DC; - D_80114F28 = D_80114F28 + D_801E17DE; - D_80114F2C = D_80114F2C + D_801E17E0; - func_8012A4BC(); - } - D_801E2570 = 0; - } -} - - - -extern void (*D_8018E590[])(void); - -void func_8017BE60(void *a0) { - D_8018E590[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_8018E630[])(void); - -void func_8017BE9C(void *a0) { - D_8018E630[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018E638[])(void); - -void func_8017BED8(void *a0) { - D_8018E638[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018E640[])(void); - -void func_8017BF14(void *a0) { - D_8018E640[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017BF50); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C094); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C100); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C1AC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C1EC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C2B0); - - -extern void (*D_8018E660[])(void); - -void func_8017C338(void *a0) { - D_8018E660[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C374); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C538); - - -extern void (*D_8018E668[])(void); - -void func_8017C5CC(void *a0) { - D_8018E668[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018E654; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018E654, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C6AC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017C710); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D5F0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D640(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D664); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D6D4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D784); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D7A4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017D7F8); - - -extern void (*D_8018E670[])(void); - -void func_8017D88C(void *a0) { - D_8018E670[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018E678[])(void); - -void func_8017D8C8(void *a0) { - D_8018E678[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018E684[])(void); - -void func_8017D904(void *a0) { - D_8018E684[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018E690[])(void); - -void func_8017D940(void *a0) { - D_8018E690[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017D97C(void) { - D_80127050 = 0x1; - } - - - -extern void (*D_8018E944[])(void); - -void func_8017D990(void *a0) { - D_8018E944[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017D9CC(u8 *a0) { - *(u8 *)(a0 + 0x214) += 1; - } - - -extern void func_80175414(s32 arg0); - extern void func_8016F0E4(void); - extern void func_80165770(void); - void func_8017D9E0(s32 arg0) { - func_80175414(arg0); - ((s32 (*)(s32))func_8016F0E4)(arg0); - ((void (*)(s32))func_80165770)(arg0); - } - - - -extern void (*D_8018E94C[])(void); - -void func_8017DA18(void *a0) { - D_8018E94C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017DA54(void *a0) { - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8017DA68(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DA88); - - -extern void (*D_8018E954[])(void); - -void func_8017DB4C(void *a0) { - D_8018E954[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DB88); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DBBC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DD04); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DEF8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017DFE4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E048); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E098); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E228); - - -extern void (*D_8018F01C[])(void); - -void func_8017E380(void *a0) { - D_8018F01C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E3BC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E408); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E4E4); - -extern s32 func_8012E544(s32 arg); - void func_8017E510(void) { - s32 r = func_8012E544(0x17B); - *(s16 *)(r + 0xFC) = 0x2; - } - - - -extern s32 func_8012E544(s32 arg); - void func_8017E534(void) { - s32 r = func_8012E544(0x17B); - *(s16 *)(r + 0xFC) = 0x1; - } - - - -extern s32 func_8012E544(s32 arg); - void func_8017E558(void) { - s32 r = func_8012E544(0x17B); - *(s16 *)(r + 0xFC) = 0x4; - } - - - -extern s32 func_8012E544(s32 arg); - void func_8017E57C(void) { - s32 r = func_8012E544(0x17B); - *(s16 *)(r + 0xFC) = 0x3; - } - - - -extern s32 func_8012E544(s32 arg); - void func_8017E5A0(void) { - s32 r = func_8012E544(0x17B); - *(s16 *)(r + 0xFC) = 0x5; - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E5C4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E62C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E694); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E738); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E7E0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E880); - - -extern void (*D_8018F1C8[])(void); - -void func_8017E8AC(void *a0) { - D_8018F1C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E914); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017E934); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EA5C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EAB4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EB04); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EB84); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EBEC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EC50); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017ECA0); - -extern void func_801843E0(void *a0, s32 a1); - extern short D_8018F1DC; - void func_8017ECFC(s16 *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_801843E0(a0, &D_8018F1DC); - } - - - -extern void (*D_8018F330[])(void); - -void func_8017ED28(void *a0) { - D_8018F330[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017ED64); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EDE8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EED4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017EF90); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F054); - -void func_8017F09C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F0A4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F1A0); - - -extern void (*D_8018F46C[])(void); - -void func_8017F20C(void *a0) { - D_8018F46C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F248); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F268); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F2A8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F2E8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F380); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F3BC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F40C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F438); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F5CC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F63C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F768); - -void func_8017F840(void) { -} - - -extern void (*D_8018FBE4[])(void); - -void func_8017F848(void *a0) { - D_8018FBE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F884); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F90C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017F9D8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FA34); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FA54); - -extern s32 D_801E1A18; - -void func_8017FA84(void) { - D_801E1A18 = 1; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FA98); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FB04); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FB54); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FB74); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FC58); - -extern void func_801851D8(s32 arg); - void func_8017FCE4(void) { - func_801851D8(0x7); - } - - -extern void func_80185238(s32 arg); - void func_8017FD04(void) { - func_80185238(0x7); - } - - -extern s32 func_8012E57C(s32 arg0, s32 arg1); - void func_8017FD24(void) { - s32 r; - s32 p; - r = func_8012E57C(0x61, 0x7); - if (r != 0) { - *(s16 *)(r + 0xE8) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FD58); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FD70); - -void func_8017FE10(void) { -} - -extern s32 func_8012C588(s32 a0, s32 a1); - void func_8017FE18(u8 *a0) { - ((void (*)(s32, s32))func_8012C588)(0x3D7, (s32)a0); - } - - - -extern s32 func_8012E544(s32 arg); - void func_8017FE3C(void) { - s32 p = func_8012E544(0x224); - if (p != 0) { - *(u16*)(p + 0x34) += 1; - } - } - - -extern s32 func_8012E544(s32 arg); - void func_8017FE78(void) { - s32 p = func_8012E544(0x224); - if (p != 0) { - *(u16*)(p + 0x34) += 1; - } - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FEB4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FF64); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8017FFC8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180020); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018004C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018009C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801801B0); - - -extern void (*D_8018FC14[])(void); - -void func_801801F4(void *a0) { - D_8018FC14[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180230(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018023C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801802A8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180334); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801803CC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180478); - -void func_801804B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801804C0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801805AC); - -void func_80180684(void) { -} - - -extern void (*D_8018FDFC[])(void); - -void func_8018068C(void *a0) { - D_8018FDFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801806C8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801806E0); - -extern void func_800D1724(s32 a0); - extern s32 D_8018E894; - void func_80180704(void) { - ((void (*)(void *))func_800D1724)(&D_8018E894); - } - - -void func_8018072C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180734); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801807D8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180828); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180868); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801808B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018095C); - - -extern void (*D_8018FE1C[])(void); - -void func_80180A24(void *a0) { - D_8018FE1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012E8E0(s32 a0, s32 a1); -extern s32 D_8018FE14; - -void func_80180A60(void * arg0) { - func_8012E8E0((s32)arg0, (s32)&D_8018FE14); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180A88); - -extern void (*D_8018FEA4[])(void); - -void func_80180B40(void *a0) { - D_8018FEA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180B7C(void) { -} - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_8018FE4C; - void func_80180B84(short *param_1) { - *(short *)((char *)param_1 + 0x2) = 0x3; - func_80178CBC((s32 *)param_1, (s32)&D_8018FE4C); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180BB0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180C0C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180CC8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180D48); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80180E40); - - -extern void (*D_8018FF38[])(void); - -void func_80181040(void *a0) { - D_8018FF38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018107C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801810E4); - - -extern void (*D_8019003C[])(void); - -void func_801812D0(void *a0) { - D_8019003C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018130C); - - -extern void (*D_80190088[])(void); - -void func_801814A4(void *a0) { - D_80190088[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801814E0); - -extern s32 func_8018107C(void); - void func_8018156C(void) { - func_8018107C(); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018158C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181644); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801816C8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801817AC); - -extern void func_8012B2CC(s32 a0); - void func_80181810(void * arg0) { - s32 *p = *(s32 **)((char *)arg0 + 0x20); - *(short *)((char *)arg0 + 0x2) = 0x2; - *(short *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181840); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181870); - - -extern void (*D_801901D0[])(void); - -void func_801819E0(void *a0) { - D_801901D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181A1C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181A98); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181B08); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80181B20(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181B44); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181C78); - -void func_80181CE0(void) { -} - -void func_80181CE8(void) { -} - -s32 func_80181CF0(void) { - return 0x27; - } - - -void func_80181CF8(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_801901EC[])(void); - -void func_80181D04(void *a0) { - D_801901EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181D40); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181DA8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181DF4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181E34); - -void func_80181E7C(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80190200[])(void); - -void func_80181E88(void *a0) { - D_80190200[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181EC4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181F2C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80181F90); - -void func_80181FFC(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80190214[])(void); - -void func_80182008(void *a0) { - D_80190214[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182044); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182098); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801820DC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018211C); - -void func_80182164(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_80190228[])(void); - -void func_80182170(void *a0) { - D_80190228[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801821AC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182214); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182278); - - -extern void (*D_80190234[])(void); - -void func_801822E4(void *a0) { - D_80190234[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80182320(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182330); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018236C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182420); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182488); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801824DC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182598); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182980); - -extern void (*D_8019067C[])(void); - -void func_801829F8(void *a0) { - D_8019067C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182A34); - - -extern void (*D_801906A8[])(void); - -void func_80182B50(void *a0) { - D_801906A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801906B0[])(void); - -void func_80182B8C(void *a0) { - D_801906B0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801906C0[])(void); - -void func_80182BC8(void *a0) { - D_801906C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801906D0[])(void); - -void func_80182C04(void *a0) { - D_801906D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80182C40(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182C48); - - -extern void (*D_801906E0[])(void); - -void func_80182DF4(void *a0) { - D_801906E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80182E30); - -extern s32 D_8019037C; -extern void *D_801E1BC8; -extern void func_80182420(s32 arg0, s32 arg1); - -void func_80182F8C(void) { - *(void **)&D_801E1BC8 = &D_8019037C; - func_80182420(0x474, 0x4B0); -} - - -extern void func_80182420(s32 arg0, s32 arg1); - extern s32 D_801903B4; - extern void *D_801E1BC8; - void func_80182FC0(void) { - D_801E1BC8 = &D_801903B4; - func_80182420(0x474, 0x4EC); - } - - -extern s32 D_801903EC; -extern void *D_801E1BC8; -extern void func_80182420(s32 arg0, s32 arg1); - -void func_80182FF4(void) { - *(void **)&D_801E1BC8 = &D_801903EC; - func_80182420(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183028); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018305C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183090); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183104); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183138); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183184); - -extern void func_80182420(s32 arg0, s32 arg1); - extern s32 D_8019056C; - extern void *D_801E1BC8; - void func_801831B8(void) { - D_801E1BC8 = &D_8019056C; - func_80182420(0x474, 0x4B0); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801831EC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183220); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018326C); - -extern s32 func_801832A0(void); - -s32 func_801832A0(void) { - return -1; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801832A8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183364); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183410); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183454); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183570); - - -extern void func_8012B414(int a0); - void func_8018360C(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183640); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801836B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183700); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801837A4); - - -extern void (*D_80190700[])(void); - -void func_8018381C(void *a0) { - D_80190700[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_801906F0; - -void func_80183858(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_801906F0 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_801838D4(void) { -} - - -extern void (*D_80190738[])(void); - -void func_801838DC(void *a0) { - D_80190738[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183918); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801839A8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183BE4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183C34); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183CF0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183E08); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801E1C60; -extern u16 D_80190740[]; -extern u16 D_801E1C64[]; -extern s32 D_80190760; - -extern void func_800183E0(s32 a0); - -void func_80183E38(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80190740; - base = D_801E1C60 >> 8; - p = D_801E1C64; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80190760); - D_801E1C60 = D_801E1C60 + 0x100; -} - - -void func_80183EC4(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - - -void func_80183ED4(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183EE4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183F80); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183FAC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80183FD8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184004); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184088); - - -extern s32 func_80184088(s32 arg); -extern void func_801841EC(void *a0); - -void func_801841B8(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_80184088((s32)a0); - func_801841EC(a0); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801841EC); - - -extern short D_800BA2BA; - s32 func_8018422C(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801BBE68[])(void); - -void func_80184254(void *a0) { - D_801BBE68[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184290(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184298); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801842D4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801842F8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184350); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801843B8); - -void func_801843D8(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801843E0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184428); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184484); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801844F8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018456C); - - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_801845C8(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801845FC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801846CC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184894); - - -extern void (*D_801BBE88[])(void); - -void func_801848DC(void *a0) { - D_801BBE88[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184918(void) { -} - -void func_80184920(void) { -} - -void func_80184928(void) { -} - -void func_80184930(void) { -} - -void func_80184938(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184940); - -void func_80184984(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018498C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184A14); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184BEC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184D8C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184E08); - -extern void func_80185614(void); - void func_80184ED4(void) { - func_80185614(); - } - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184EF4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80184FC4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018502C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801850A0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185100); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185180); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801851D8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185238); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185280); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801852D0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185308); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185394); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185438); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185498); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185614); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185648); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018567C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801856E0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185754); - - -extern void (*D_801BC184[])(void); - -void func_801857AC(void *a0) { - D_801BC184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801857E8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185864); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185984); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801859D0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185ADC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185B38); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185B78); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185B88); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185BD4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185C44); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80185C98); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018654C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80186ED8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80187010); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80187814); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80187B50); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80187EA0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801880E0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801882AC); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80188544); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018893C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80188C68); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189504); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018953C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018957C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_801895C8); - - -extern void (*D_801D52BC[])(void); - -void func_801897DC(void *a0) { - D_801D52BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801D529C[]; - -void func_80189818(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801D529C[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801D529C)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801D529C[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801D52D0[])(void); - -void func_801898DC(void *a0) { - D_801D52D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_80189818(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_80189918(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_80189818(param_1, -0x80); - func_80189818(param_1, -0x30); - func_80189818(param_1, 0x20); - func_80189818(param_1, 0x70); - func_80189818(param_1, 0xc0); - } - if (1 < uVar1) { - func_80189818(param_1, -0x58); - func_80189818(param_1, -0x8); - func_80189818(param_1, 0x48); - func_80189818(param_1, 0x98); - func_80189818(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_80189818(s32, s32); - -void func_80189A00(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_80189818(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801D52C4; - -void func_80189A40(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801D52C4, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_80189AC8(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189B10); - - -extern void (*D_801DE38C[])(void); - -void func_80189BBC(void *a0) { - D_801DE38C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189BF8); - -void func_80189C5C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189C64); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189CB0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189CF0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189D4C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_80189F00); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A250); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A3C8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A470); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A4B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A594); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A5B8); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A61C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A698); - -void func_8018A6B8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A6C0); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801734BC", func_8018A788); - diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80178D40.c b/src/ov_SC03_124/ov_SC03_124_jr_80178D40.c new file mode 100644 index 000000000..96e6ffa86 --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_80178D40.c @@ -0,0 +1,5633 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018DD98[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E0AC0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018DD8C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018DDD0[]; +extern unsigned short D_8018DDD8[]; +extern unsigned short D_8018DDE0[]; +extern unsigned char D_801E0AC8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E0AC0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018DDE8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E0BFC; +extern M2C_UNK D_801E0C00; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E0B88; +extern void (*D_8018DE18[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E0C04[]; +extern u8 D_801E0C0C[]; +extern u8 D_801E0BBC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018DE20[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018DE3C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018DE44[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018DEAC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018DE50; +extern u8 D_8018DE5C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018DEE0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018DEE8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018DF3C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018DF70[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018DF60[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018DF8C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018E004[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018E00C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018E014[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018E01C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018E024[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018E02C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018E038[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018E044[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018E050[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018E060[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018E070[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018E078[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018E080[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018E088[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018E090[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018E098[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018E0A0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018E0A8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018E0B0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018E0B8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018E0C0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018E0C8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018E0D0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018E0D8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018E0E0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018E0E8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018E0F0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018E0F8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018E100[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018E108[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018E110[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018E118[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018E120[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018E164[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018E128; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018E194[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018E1D0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018E228[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018E238[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018E240[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018E3A8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018E3B4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801DFD98; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E2570; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801E25E4; +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E25E4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E25E4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E1340 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E25E4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E2528 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E2528 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E25E4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E25E4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E179C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E1340; + extern s32 D_801E1344; + extern s32 D_801E1758; + extern s16 D_801E175C; + extern s16 D_801E1760; + extern s16 D_801E1764; + extern s16 D_801E1768; + extern s32 D_801E1770; + extern s32 D_801E1774; + extern s32 D_801E1784; + extern s16 D_801E1788; + extern s16 D_801E178C; + extern s32 D_801E1790; + extern s32 D_801E1798; + extern s32 D_801E179C[10]; + extern s32 D_801E2458; + extern s16 D_801E2528; + extern s32 D_801E256C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E2528; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E1758); + D_801E1758 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1764, D_801E1768 ? 0x48 : 0x40); + (*(s16*)&D_801E25E4) = 2; + break; + case 0: + func_80179B28(D_801E1758); + D_801E1758 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E175C, D_801E1760 ? 0x48 : 0x40); + (*(s16*)&D_801E25E4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E2458 != 0) { + func_80179B28(D_801E1758); + D_801E1758 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E175C, D_801E1760 ? 0x48 : 0x40); + (*(s16*)&D_801E25E4) = 1; + } else { + (*(s16*)&D_801E25E4) = 3; + } + break; + case 0x32: + func_80179B28(D_801E1758); + D_801E1758 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E175C, + D_801E1760 ? 0x48 : 0x40); + (*(s16*)&D_801E25E4) = 1; + break; + case 2: + func_80179B28(D_801E1758); + if (D_801E1770 != 0) { + D_801E1340 = D_801E1770; + D_801E1770 = 0; + (*(s16*)&D_801E25E4) = 3; + return; + } + (*(s16*)&D_801E25E4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E25E4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E25E4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E25E4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E25E4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E25E4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x1B: + D_801E1790 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E25E4) = 4; + D_801E1344 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E25E4) = 5; + D_801E1784 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E1784 = (s32)func_8017A3B0; + (*(s16*)&D_801E25E4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x24: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E25E4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E25E4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E25E4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E25E4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E25E4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E25E4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E25E4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E25E4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E25E4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1774); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1774); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1774); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1774); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x4E: + D_801E1798 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x2B: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E25E4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E256C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x34: + (*(s16*)&D_801E25E4) = 3; + D_801E1340 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E1770 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E25E4) = 3; + D_801E1340 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E25E4) = 3; + D_801E1340 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E1340 = *(s32 *)(D_801E1340 + 4); + return; + case 0x37: + (*(s16*)&D_801E25E4) = 3; + D_801E175C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1760 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E25E4) = 3; + D_801E1764 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1768 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E25E4) = 3; + D_801E175C = w1; + D_801E1760 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E25E4) = 3; + D_801E1764 = w2; + D_801E1768 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x43: + D_801E1784 = (s32)func_8017A3D8; + D_801E178C = 0; + (*(s16*)&D_801E25E4) = 5; + D_801E1788 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E25E4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E25E4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E179C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E25E4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E179C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E25E4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E179C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E25E4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E179C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E25E4) = 3; + break; + default: + break; + } +Lend: + D_801E1340 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E176C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E176C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E176C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E176C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E1794; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E1794 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E1750; + +s32 func_8017A3B0(void) { + switch (D_801E1750) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E178C; +extern short D_801E1788; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E178C) { + case 0: + func_800D0CA0(1); + D_801E178C = D_801E178C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E1788; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E178C = D_801E178C + 1; + if (D_801E178C < 0x1E) { + return 0; + } + D_801E178C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E17CC; + extern s16 D_801E17CE; + extern s16 D_801E17D0; + extern s16 D_801E17C4; + extern s16 D_801E17C6; + extern s16 D_801E17C8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E17CC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E17CE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E17D0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E17C4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E17C6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E17C8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E1754; +extern u16 D_801E17D4; +extern u16 D_801E17D6; +extern u16 D_801E17D8; +extern s16 D_801E2570; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E2570 = 0; + D_801E1754 = 0; + D_801E17D4 = D_80126B5E; + D_801E17D6 = D_80126B62; + D_801E17D8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E4F0[]; + extern s16 D_801E17CC; + extern s16 D_801E17C4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E17CC; + s16 *p78C = &D_801E17C4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E2570 = 1; + D_801E1754 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E1774; + extern SV4_8017B368 D_801E177C; + extern s16 D_801E17CC; + extern s16 D_801E17C4; + extern u16 D_8018E4F0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E1774; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E177C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018E4F0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018E4F0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E17CC) = loc0; + (*(SV4_8017B368 *)&D_801E17C4) = loc1; + D_801E2570 = 1; + D_801E1754 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018E4F0[]; + extern s16 D_801E17CC; + extern s16 D_801E17CE; + extern s16 D_801E17D0; + extern s16 D_801E17C4; + extern s16 D_801E17C6; + extern s16 D_801E17C8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018E4F0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E17CC; + s16 *p78C = &D_801E17C4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E17CE; + v798 = D_801E17D0; + v78C = *p78C; + v78E = D_801E17C6; + v790 = D_801E17C8; + __asm__ __volatile__(""); + D_801E2570 = 1; + D_801E1754 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1754; +extern s16 D_801E17CC; +extern s16 D_801E17CE; +extern s16 D_801E17D0; +extern s16 D_801E17C4; +extern s16 D_801E17C6; +extern s16 D_801E17C8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E1754 = 0; + D_801E17CC = (s16) D_80114F30; + D_801E17CE = (s16) D_80114F34; + D_801E17D0 = (s16) D_80114F38; + D_801E17C4 = (s16) D_80114F24; + D_801E17C6 = (s16) D_80114F28; + D_801E17C8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E17E4; +extern s16 D_801E17E6; +extern s16 D_801E17E8; +extern s16 D_801E17EC; +extern s16 D_801E17EE; +extern s16 D_801E17F0; + +void func_8017B824(void) { + D_801E17E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E17E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E17E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E17EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E17EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E17F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E17E4; +extern s16 D_801E17E6; +extern s16 D_801E17E8; +extern s16 D_801E17EC; +extern s16 D_801E17EE; +extern s16 D_801E17F0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E17E4; + D_80114F34 = D_801E17E6; + D_80114F38 = D_801E17E8; + D_80114F24 = D_801E17EC; + D_80114F28 = D_801E17EE; + D_80114F2C = D_801E17F0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E17CC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E17C4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E17CC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E17C4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E17D4; +extern u16 D_801E17D6; +extern u16 D_801E17D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1754; +extern short D_801E17DC; +extern short D_801E17DE; +extern short D_801E17E0; +extern s16 D_801E17CC; +extern s16 D_801E17CE; +extern s16 D_801E17D0; +extern s16 D_801E17C4; +extern s16 D_801E17C6; +extern s16 D_801E17C8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E17D4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E17D6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E17D8); + (*(s16 *)&D_801E17DC) = buf[0]; + (*(s16 *)&D_801E17DE) = buf[1]; + (*(s16 *)&D_801E17E0) = buf[2]; + D_801E17CC = D_80114F30 + buf[0]; + D_801E1754 = 0; + D_801E17CE = D_80114F34 + buf[1]; + D_801E17D0 = D_80114F38 + buf[2]; + D_801E17C4 = D_80114F24 + buf[0]; + D_801E17C6 = D_80114F28 + buf[1]; + D_801E17C8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E1774; +extern SV4 D_801E177C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E177C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E1774 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E177C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E177C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E1774) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E177C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E179C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E179C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E1754; +extern s16 D_801E2570; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E1754 = D_801E1754 + 1; + if (D_801E1754 >= 0x1F) { + D_801E2570 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E1754; +extern s16 D_801E2570; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1754 = D_801E1754 + 1; + if (0x18 < D_801E1754) { + func_8012A4BC(); + D_801E2570 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E1754; +extern void (*D_801E1798)(void); +extern short D_801E17DC; +extern short D_801E17DE; +extern short D_801E17E0; +extern s16 D_801E2570; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1754 = D_801E1754 + 1; + if (D_801E1754 >= 0x19) { + if (D_801E1798 != 0) { + (*D_801E1798)(); + } else { + D_80114F30 = D_80114F30 + D_801E17DC; + D_80114F34 = D_80114F34 + D_801E17DE; + D_80114F38 = D_80114F38 + D_801E17E0; + D_80114F24 = D_80114F24 + D_801E17DC; + D_80114F28 = D_80114F28 + D_801E17DE; + D_80114F2C = D_80114F2C + D_801E17E0; + func_8012A4BC(); + } + D_801E2570 = 0; + } +} + + + +extern void (*D_8018E590[])(void); + +void func_8017BE60(void *a0) { + D_8018E590[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_8018E630[])(void); + +void func_8017BE9C(void *a0) { + D_8018E630[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018E638[])(void); + +void func_8017BED8(void *a0) { + D_8018E638[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018E640[])(void); + +void func_8017BF14(void *a0) { + D_8018E640[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017BF50); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C094); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C100); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C1AC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C1EC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C2B0); + + +extern void (*D_8018E660[])(void); + +void func_8017C338(void *a0) { + D_8018E660[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C374); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C538); + + +extern void (*D_8018E668[])(void); + +void func_8017C5CC(void *a0) { + D_8018E668[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018E654; + +void func_8017C608(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018E654, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C6AC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017C710); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D5F0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D640(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D664); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D6D4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D784); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D7A4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017D7F8); + + +extern void (*D_8018E670[])(void); + +void func_8017D88C(void *a0) { + D_8018E670[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018E678[])(void); + +void func_8017D8C8(void *a0) { + D_8018E678[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018E684[])(void); + +void func_8017D904(void *a0) { + D_8018E684[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018E690[])(void); + +void func_8017D940(void *a0) { + D_8018E690[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017D97C(void) { + D_80127050 = 0x1; + } + + + +extern void (*D_8018E944[])(void); + +void func_8017D990(void *a0) { + D_8018E944[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017D9CC(u8 *a0) { + *(u8 *)(a0 + 0x214) += 1; + } + + +extern void func_80175414(s32 arg0); + extern void func_8016F0E4(void); + extern void func_80165770(void); + void func_8017D9E0(s32 arg0) { + func_80175414(arg0); + ((s32 (*)(s32))func_8016F0E4)(arg0); + ((void (*)(s32))func_80165770)(arg0); + } + + + +extern void (*D_8018E94C[])(void); + +void func_8017DA18(void *a0) { + D_8018E94C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017DA54(void *a0) { + *(u8 *)((s32)a0 + 0x214) += 1; + } + + +extern void func_8016F0E4(void); + void func_8017DA68(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DA88); + + +extern void (*D_8018E954[])(void); + +void func_8017DB4C(void *a0) { + D_8018E954[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DB88); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DBBC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DD04); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DEF8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017DFE4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E048); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E098); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E228); + + +extern void (*D_8018F01C[])(void); + +void func_8017E380(void *a0) { + D_8018F01C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E3BC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E408); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E4E4); + +extern s32 func_8012E544(s32 arg); + void func_8017E510(void) { + s32 r = func_8012E544(0x17B); + *(s16 *)(r + 0xFC) = 0x2; + } + + + +extern s32 func_8012E544(s32 arg); + void func_8017E534(void) { + s32 r = func_8012E544(0x17B); + *(s16 *)(r + 0xFC) = 0x1; + } + + + +extern s32 func_8012E544(s32 arg); + void func_8017E558(void) { + s32 r = func_8012E544(0x17B); + *(s16 *)(r + 0xFC) = 0x4; + } + + + +extern s32 func_8012E544(s32 arg); + void func_8017E57C(void) { + s32 r = func_8012E544(0x17B); + *(s16 *)(r + 0xFC) = 0x3; + } + + + +extern s32 func_8012E544(s32 arg); + void func_8017E5A0(void) { + s32 r = func_8012E544(0x17B); + *(s16 *)(r + 0xFC) = 0x5; + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E5C4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E62C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E694); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E738); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E7E0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E880); + + +extern void (*D_8018F1C8[])(void); + +void func_8017E8AC(void *a0) { + D_8018F1C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E914); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017E934); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EA5C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EAB4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EB04); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EB84); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EBEC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EC50); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017ECA0); + +extern void func_801843E0(void *a0, s32 a1); + extern short D_8018F1DC; + void func_8017ECFC(s16 *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_801843E0(a0, &D_8018F1DC); + } + + + +extern void (*D_8018F330[])(void); + +void func_8017ED28(void *a0) { + D_8018F330[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017ED64); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EDE8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EED4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017EF90); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F054); + +void func_8017F09C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F0A4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F1A0); + + +extern void (*D_8018F46C[])(void); + +void func_8017F20C(void *a0) { + D_8018F46C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F248); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F268); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F2A8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F2E8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F380); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F3BC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F40C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F438); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F5CC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F63C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F768); + +void func_8017F840(void) { +} + + +extern void (*D_8018FBE4[])(void); + +void func_8017F848(void *a0) { + D_8018FBE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F884); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F90C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017F9D8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FA34); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FA54); + +extern s32 D_801E1A18; + +void func_8017FA84(void) { + D_801E1A18 = 1; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FA98); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FB04); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FB54); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FB74); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FC58); + +extern void func_801851D8(s32 arg); + void func_8017FCE4(void) { + func_801851D8(0x7); + } + + +extern void func_80185238(s32 arg); + void func_8017FD04(void) { + func_80185238(0x7); + } + + +extern s32 func_8012E57C(s32 arg0, s32 arg1); + void func_8017FD24(void) { + s32 r; + s32 p; + r = func_8012E57C(0x61, 0x7); + if (r != 0) { + *(s16 *)(r + 0xE8) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FD58); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FD70); + +void func_8017FE10(void) { +} + +extern s32 func_8012C588(s32 a0, s32 a1); + void func_8017FE18(u8 *a0) { + ((void (*)(s32, s32))func_8012C588)(0x3D7, (s32)a0); + } + + + +extern s32 func_8012E544(s32 arg); + void func_8017FE3C(void) { + s32 p = func_8012E544(0x224); + if (p != 0) { + *(u16*)(p + 0x34) += 1; + } + } + + +extern s32 func_8012E544(s32 arg); + void func_8017FE78(void) { + s32 p = func_8012E544(0x224); + if (p != 0) { + *(u16*)(p + 0x34) += 1; + } + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FEB4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FF64); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8017FFC8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180020); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018004C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018009C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801801B0); + + +extern void (*D_8018FC14[])(void); + +void func_801801F4(void *a0) { + D_8018FC14[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180230(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018023C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801802A8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180334); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801803CC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180478); + +void func_801804B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801804C0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801805AC); + +void func_80180684(void) { +} + + +extern void (*D_8018FDFC[])(void); + +void func_8018068C(void *a0) { + D_8018FDFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801806C8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801806E0); + +extern void func_800D1724(s32 a0); + extern s32 D_8018E894; + void func_80180704(void) { + ((void (*)(void *))func_800D1724)(&D_8018E894); + } + + +void func_8018072C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180734); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801807D8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180828); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180868); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801808B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018095C); + + +extern void (*D_8018FE1C[])(void); + +void func_80180A24(void *a0) { + D_8018FE1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012E8E0(s32 a0, s32 a1); +extern s32 D_8018FE14; + +void func_80180A60(void * arg0) { + func_8012E8E0((s32)arg0, (s32)&D_8018FE14); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180A88); + +extern void (*D_8018FEA4[])(void); + +void func_80180B40(void *a0) { + D_8018FEA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180B7C(void) { +} + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_8018FE4C; + void func_80180B84(short *param_1) { + *(short *)((char *)param_1 + 0x2) = 0x3; + func_80178CBC((s32 *)param_1, (s32)&D_8018FE4C); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180BB0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180C0C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180CC8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180D48); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80180E40); + + +extern void (*D_8018FF38[])(void); + +void func_80181040(void *a0) { + D_8018FF38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018107C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801810E4); + + +extern void (*D_8019003C[])(void); + +void func_801812D0(void *a0) { + D_8019003C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018130C); + + +extern void (*D_80190088[])(void); + +void func_801814A4(void *a0) { + D_80190088[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801814E0); + +extern s32 func_8018107C(void); + void func_8018156C(void) { + func_8018107C(); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018158C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181644); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801816C8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801817AC); + +extern void func_8012B2CC(s32 a0); + void func_80181810(void * arg0) { + s32 *p = *(s32 **)((char *)arg0 + 0x20); + *(short *)((char *)arg0 + 0x2) = 0x2; + *(short *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181840); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181870); + + +extern void (*D_801901D0[])(void); + +void func_801819E0(void *a0) { + D_801901D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181A1C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181A98); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181B08); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80181B20(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181B44); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181C78); + +void func_80181CE0(void) { +} + +void func_80181CE8(void) { +} + +s32 func_80181CF0(void) { + return 0x27; + } + + +void func_80181CF8(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + + +extern void (*D_801901EC[])(void); + +void func_80181D04(void *a0) { + D_801901EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181D40); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181DA8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181DF4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181E34); + +void func_80181E7C(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + + +extern void (*D_80190200[])(void); + +void func_80181E88(void *a0) { + D_80190200[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181EC4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181F2C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80181F90); + +void func_80181FFC(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + + + +extern void (*D_80190214[])(void); + +void func_80182008(void *a0) { + D_80190214[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182044); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182098); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801820DC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018211C); + +void func_80182164(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_80190228[])(void); + +void func_80182170(void *a0) { + D_80190228[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801821AC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182214); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182278); + + +extern void (*D_80190234[])(void); + +void func_801822E4(void *a0) { + D_80190234[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80182320(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182330); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018236C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182420); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182488); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801824DC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182598); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182980); + +extern void (*D_8019067C[])(void); + +void func_801829F8(void *a0) { + D_8019067C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182A34); + + +extern void (*D_801906A8[])(void); + +void func_80182B50(void *a0) { + D_801906A8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801906B0[])(void); + +void func_80182B8C(void *a0) { + D_801906B0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801906C0[])(void); + +void func_80182BC8(void *a0) { + D_801906C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801906D0[])(void); + +void func_80182C04(void *a0) { + D_801906D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80182C40(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182C48); + + +extern void (*D_801906E0[])(void); + +void func_80182DF4(void *a0) { + D_801906E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80182E30); + +extern s32 D_8019037C; +extern void *D_801E1BC8; +extern void func_80182420(s32 arg0, s32 arg1); + +void func_80182F8C(void) { + *(void **)&D_801E1BC8 = &D_8019037C; + func_80182420(0x474, 0x4B0); +} + + +extern void func_80182420(s32 arg0, s32 arg1); + extern s32 D_801903B4; + extern void *D_801E1BC8; + void func_80182FC0(void) { + D_801E1BC8 = &D_801903B4; + func_80182420(0x474, 0x4EC); + } + + +extern s32 D_801903EC; +extern void *D_801E1BC8; +extern void func_80182420(s32 arg0, s32 arg1); + +void func_80182FF4(void) { + *(void **)&D_801E1BC8 = &D_801903EC; + func_80182420(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183028); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018305C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183090); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183104); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183138); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183184); + +extern void func_80182420(s32 arg0, s32 arg1); + extern s32 D_8019056C; + extern void *D_801E1BC8; + void func_801831B8(void) { + D_801E1BC8 = &D_8019056C; + func_80182420(0x474, 0x4B0); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801831EC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183220); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018326C); + +extern s32 func_801832A0(void); + +s32 func_801832A0(void) { + return -1; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801832A8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183364); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183410); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183454); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183570); + + +extern void func_8012B414(int a0); + void func_8018360C(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183640); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801836B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183700); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801837A4); + + +extern void (*D_80190700[])(void); + +void func_8018381C(void *a0) { + D_80190700[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_801906F0; + +void func_80183858(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_801906F0 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_801838D4(void) { +} + + +extern void (*D_80190738[])(void); + +void func_801838DC(void *a0) { + D_80190738[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183918); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801839A8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183BE4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183C34); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183CF0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183E08); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801E1C60; +extern u16 D_80190740[]; +extern u16 D_801E1C64[]; +extern s32 D_80190760; + +extern void func_800183E0(s32 a0); + +void func_80183E38(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80190740; + base = D_801E1C60 >> 8; + p = D_801E1C64; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80190760); + D_801E1C60 = D_801E1C60 + 0x100; +} + + +void func_80183EC4(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + + +void func_80183ED4(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183EE4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183F80); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183FAC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80183FD8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184004); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184088); + + +extern s32 func_80184088(s32 arg); +extern void func_801841EC(void *a0); + +void func_801841B8(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_80184088((s32)a0); + func_801841EC(a0); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801841EC); + + +extern short D_800BA2BA; + s32 func_8018422C(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801BBE68[])(void); + +void func_80184254(void *a0) { + D_801BBE68[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184290(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184298); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801842D4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801842F8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184350); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801843B8); + +void func_801843D8(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801843E0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184428); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184484); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801844F8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018456C); + + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_801845C8(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801845FC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801846CC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184894); + + +extern void (*D_801BBE88[])(void); + +void func_801848DC(void *a0) { + D_801BBE88[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184918(void) { +} + +void func_80184920(void) { +} + +void func_80184928(void) { +} + +void func_80184930(void) { +} + +void func_80184938(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184940); + +void func_80184984(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018498C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184A14); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184BEC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184D8C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184E08); + +extern void func_80185614(void); + void func_80184ED4(void) { + func_80185614(); + } + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184EF4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80184FC4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018502C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801850A0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185100); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185180); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801851D8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185238); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185280); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801852D0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185308); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185394); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185438); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185498); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185614); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185648); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018567C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801856E0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185754); + + +extern void (*D_801BC184[])(void); + +void func_801857AC(void *a0) { + D_801BC184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801857E8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185864); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185984); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801859D0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185ADC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185B38); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185B78); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185B88); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185BD4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185C44); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80185C98); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018654C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80186ED8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80187010); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80187814); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80187B50); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80187EA0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801880E0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801882AC); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80188544); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018893C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80188C68); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189504); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018953C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018957C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_801895C8); + + +extern void (*D_801D52BC[])(void); + +void func_801897DC(void *a0) { + D_801D52BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801D529C[]; + +void func_80189818(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801D529C[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801D529C)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801D529C[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801D52D0[])(void); + +void func_801898DC(void *a0) { + D_801D52D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_80189818(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_80189918(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_80189818(param_1, -0x80); + func_80189818(param_1, -0x30); + func_80189818(param_1, 0x20); + func_80189818(param_1, 0x70); + func_80189818(param_1, 0xc0); + } + if (1 < uVar1) { + func_80189818(param_1, -0x58); + func_80189818(param_1, -0x8); + func_80189818(param_1, 0x48); + func_80189818(param_1, 0x98); + func_80189818(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_80189818(s32, s32); + +void func_80189A00(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_80189818(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801D52C4; + +void func_80189A40(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801D52C4, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_80189AC8(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189B10); + + +extern void (*D_801DE38C[])(void); + +void func_80189BBC(void *a0) { + D_801DE38C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189BF8); + +void func_80189C5C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189C64); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189CB0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189CF0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189D4C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_80189F00); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A250); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A3C8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A470); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A4B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A594); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A5B8); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A61C); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A698); + +void func_8018A6B8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A6C0); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80178D40", func_8018A788); + + diff --git a/src/ov_SC03_125/ov_SC03_125_jr_801734BC.c b/src/ov_SC03_125/ov_SC03_125_jr_801734BC.c index 9fbb9441b..b4864eb49 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_801734BC.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_801734BC.c @@ -3084,1584 +3084,3 @@ void func_80178D18(void) { D_801C453C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C4064; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C4064 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C4064; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C4064 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C408C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C408C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C4048; - -s32 func_8017A3B0(void) { - switch (D_801C4048) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C4084; -extern short D_801C4080; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C4084) { - case 0: - func_800D0CA0(1); - D_801C4084 = D_801C4084 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C4080; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C4084 = D_801C4084 + 1; - if (D_801C4084 < 0x1E) { - return 0; - } - D_801C4084 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C40C4; - extern s16 D_801C40C6; - extern s16 D_801C40C8; - extern s16 D_801C40BC; - extern s16 D_801C40BE; - extern s16 D_801C40C0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C40C4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C40C6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C40C8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C40BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C40BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C40C0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C404C; -extern u16 D_801C40CC; -extern u16 D_801C40CE; -extern u16 D_801C40D0; -extern s16 D_801C44C8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C44C8 = 0; - D_801C404C = 0; - D_801C40CC = D_80126B5E; - D_801C40CE = D_80126B62; - D_801C40D0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801876C0[]; - extern s16 D_801C40C4; - extern s16 D_801C40BC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801876C0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801876C0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C40C4; - s16 *p78C = &D_801C40BC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C44C8 = 1; - D_801C404C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C406C; - extern SV4_8017B368 D_801C4074; - extern s16 D_801C40C4; - extern s16 D_801C40BC; - extern u16 D_801876C0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C406C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C4074; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801876C0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801876C0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C40C4) = loc0; - (*(SV4_8017B368 *)&D_801C40BC) = loc1; - D_801C44C8 = 1; - D_801C404C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801876C0[]; - extern s16 D_801C40C4; - extern s16 D_801C40C6; - extern s16 D_801C40C8; - extern s16 D_801C40BC; - extern s16 D_801C40BE; - extern s16 D_801C40C0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801876C0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801876C0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C40C4; - s16 *p78C = &D_801C40BC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C40C6; - v798 = D_801C40C8; - v78C = *p78C; - v78E = D_801C40BE; - v790 = D_801C40C0; - __asm__ __volatile__(""); - D_801C44C8 = 1; - D_801C404C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C404C; -extern s16 D_801C40C4; -extern s16 D_801C40C6; -extern s16 D_801C40C8; -extern s16 D_801C40BC; -extern s16 D_801C40BE; -extern s16 D_801C40C0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C404C = 0; - D_801C40C4 = (s16) D_80114F30; - D_801C40C6 = (s16) D_80114F34; - D_801C40C8 = (s16) D_80114F38; - D_801C40BC = (s16) D_80114F24; - D_801C40BE = (s16) D_80114F28; - D_801C40C0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C40DC; -extern s16 D_801C40DE; -extern s16 D_801C40E0; -extern s16 D_801C40E4; -extern s16 D_801C40E6; -extern s16 D_801C40E8; - -void func_8017B824(void) { - D_801C40DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C40DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C40E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C40E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C40E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C40E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C40DC; -extern s16 D_801C40DE; -extern s16 D_801C40E0; -extern s16 D_801C40E4; -extern s16 D_801C40E6; -extern s16 D_801C40E8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C40DC; - D_80114F34 = D_801C40DE; - D_80114F38 = D_801C40E0; - D_80114F24 = D_801C40E4; - D_80114F28 = D_801C40E6; - D_80114F2C = D_801C40E8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C40C4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C40BC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C40C4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C40BC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C40CC; -extern u16 D_801C40CE; -extern u16 D_801C40D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C404C; -extern short D_801C40D4; -extern short D_801C40D6; -extern short D_801C40D8; -extern s16 D_801C40C4; -extern s16 D_801C40C6; -extern s16 D_801C40C8; -extern s16 D_801C40BC; -extern s16 D_801C40BE; -extern s16 D_801C40C0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C40CC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C40CE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C40D0); - (*(s16 *)&D_801C40D4) = buf[0]; - (*(s16 *)&D_801C40D6) = buf[1]; - (*(s16 *)&D_801C40D8) = buf[2]; - D_801C40C4 = D_80114F30 + buf[0]; - D_801C404C = 0; - D_801C40C6 = D_80114F34 + buf[1]; - D_801C40C8 = D_80114F38 + buf[2]; - D_801C40BC = D_80114F24 + buf[0]; - D_801C40BE = D_80114F28 + buf[1]; - D_801C40C0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C406C; -extern SV4 D_801C4074; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C4074) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C406C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C4074 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C4074)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C406C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C4074) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C4094[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C4094; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C404C; -extern s16 D_801C44C8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C404C = D_801C404C + 1; - if (D_801C404C >= 0x1F) { - D_801C44C8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C404C; -extern s16 D_801C44C8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C404C = D_801C404C + 1; - if (0x18 < D_801C404C) { - func_8012A4BC(); - D_801C44C8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C404C; -extern void (*D_801C4090)(void); -extern short D_801C40D4; -extern short D_801C40D6; -extern short D_801C40D8; -extern s16 D_801C44C8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C404C = D_801C404C + 1; - if (D_801C404C >= 0x19) { - if (D_801C4090 != 0) { - (*D_801C4090)(); - } else { - D_80114F30 = D_80114F30 + D_801C40D4; - D_80114F34 = D_80114F34 + D_801C40D6; - D_80114F38 = D_80114F38 + D_801C40D8; - D_80114F24 = D_80114F24 + D_801C40D4; - D_80114F28 = D_80114F28 + D_801C40D6; - D_80114F2C = D_80114F2C + D_801C40D8; - func_8012A4BC(); - } - D_801C44C8 = 0; - } -} - - - -extern void (*D_80187760[])(void); - -void func_8017BE60(void *a0) { - D_80187760[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017BF88); - - -extern void (*D_80187778[])(void); - -void func_8017C0E4(void *a0) { - D_80187778[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C120); - - -extern void (*D_80187814[])(void); - -void func_8017C180(void *a0) { - D_80187814[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018781C[])(void); - -void func_8017C1BC(void *a0) { - D_8018781C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80187824[])(void); - -void func_8017C1F8(void *a0) { - D_80187824[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C3E4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C4D0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C594); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C61C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C7B8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017C9BC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017CDB0); - - -extern void (*D_80187B00[])(void); - -void func_8017CF30(void *a0) { - D_80187B00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017CF6C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017CFE0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D474); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D5C4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017D604); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E4E4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E534(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E5C8); - -extern void func_800D1EBC(void); - void func_8017E678(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E698); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E780); - - -extern void (*D_80187B24[])(void); - -void func_8017E7A8(void *a0) { - D_80187B24[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80187B2C[])(void); - -void func_8017E7E4(void *a0) { - D_80187B2C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80187B38[])(void); - -void func_8017E820(void *a0) { - D_80187B38[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E85C(void) { - D_80127050 = 0x1; - } - - - -extern void (*D_80187C3C[])(void); - -void func_8017E870(void *a0) { - D_80187C3C[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E8AC(u8 *a0) { - *(s8 *)(a0 + 0x214) += 1; - } - - -extern void func_80175414(s32 arg0); - extern void func_8016F0E4(void); - extern void func_80165770(void); - void func_8017E8C0(s32 arg0) { - func_80175414(arg0); - ((s32 (*)(s32))func_8016F0E4)(arg0); - ((void (*)(s32))func_80165770)(arg0); - } - - - -extern void (*D_80187C44[])(void); - -void func_8017E8F8(void *a0) { - D_80187C44[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E934(void *a0) { - *(s8 *)((s32)a0 + 0x214) += 1; - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E948); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017E968); - - -extern void (*D_80187C4C[])(void); - -void func_8017EA2C(void *a0) { - D_80187C4C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EA68); - -void func_8017EA9C(u8 *a0) { - *(s8 *)(a0 + 0xa0) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EAA4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EBE4); - - -extern void (*D_80187DAC[])(void); - -void func_8017EDD8(void *a0) { - D_80187DAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EE14); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EE2C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EE5C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EE9C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EEDC); - - -extern void (*D_80187FB0[])(void); - -void func_8017EFB0(void *a0) { - D_80187FB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017EFEC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F00C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F02C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F0F0); - - -extern void (*D_80188028[])(void); - -void func_8017F178(void *a0) { - D_80188028[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F1B4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F258); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F2BC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F2F4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F390); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F41C); - - -extern void (*D_801880EC[])(void); - -void func_8017F554(void *a0) { - D_801880EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F590); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F68C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F700); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F740); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F780); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F804); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F87C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017F8E4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FA8C); - - -extern void (*D_80188118[])(void); - -void func_8017FACC(void *a0) { - D_80188118[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FB08); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FBFC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FCB0); - - -extern void (*D_80188120[])(void); - -void func_8017FD3C(void *a0) { - D_80188120[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern s32 func_8012AD50(void *a0); - void func_8017FD78(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FD98); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8017FE60); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180148); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180230); - - -extern void (*D_80188138[])(void); - -void func_8018038C(void *a0) { - D_80188138[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801803C8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180458); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801804CC); - - -extern void (*D_801881F4[])(void); - -void func_8018056C(void *a0) { - D_801881F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801805A8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018062C); - - -extern void (*D_8018820C[])(void); - -void func_8018068C(void *a0) { - D_8018820C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801806C8); - -void func_8018077C(void) { -} - - -extern void (*D_80188244[])(void); - -void func_80180784(void *a0) { - D_80188244[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801807C0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180850); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180A8C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180ADC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180B98); - - -extern void (*D_80188438[])(void); - -void func_80180CB0(void *a0) { - D_80188438[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180CEC); - -void func_80180DB8(void) { -} - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180DC0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180E58); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180E98); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80180F0C); - - -extern void (*D_80188450[])(void); - -void func_80181084(void *a0) { - D_80188450[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80188470[])(void); - -void func_801810C0(void *a0) { - D_80188470[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801810FC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181188); - - -extern s32 func_80029504(void); -extern void func_800183E0(s32 arg0); -extern char D_80188478; - -void func_801811E0(void) { - if (!(func_80029504() < 0x492)) { - func_800183E0((s32)&D_80188478); - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018121C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801812B4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801812FC); - - -void func_801815CC(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - - -void func_801815DC(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801815EC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181688); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801816B4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801816E0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018170C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181790); - -extern s32 func_80181790(s32 arg); - extern void func_801818F4(void *a0); - void func_801818C0(u8 *a0) { - *(s32 *)(a0 + 0xe0) = func_80181790((s32)a0); - func_801818F4(a0); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801818F4); - - -extern short D_800BA2BA; - s32 func_80181934(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801A6770[])(void); - -void func_8018195C(void *a0) { - D_801A6770[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80181998(void) { -} - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801819A0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801819DC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181A00); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181A58); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181AC0); - -void func_80181AE0(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181AE8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181B30); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181B8C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181C00); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181C74); - -extern s32 func_80029504(void); -extern void func_80029514(s32 arg0); - -void func_80181CD0(void) { - if ((func_80029504() == 0x3A2) && (func_80029514(0x3AC), 1)) { - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181D04); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181DD4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80181F9C); - - -extern void (*D_801A6790[])(void); - -void func_80181FE4(void *a0) { - D_801A6790[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80182020(void) { -} - -void func_80182028(void) { -} - -void func_80182030(void) { -} - -void func_80182038(void) { -} - -void func_80182040(void) { -} - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182048); - -void func_8018208C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182094); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018211C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801822F4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182494); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182510); - -extern s32 func_80182D1C(void); - void func_801825DC(void) { - func_80182D1C(); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801825FC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801826CC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182734); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801827A8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182808); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182888); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801828E0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182940); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182988); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801829D8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182A10); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182A9C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182B40); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182BA0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182D1C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182D50); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182D84); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182DE8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182E5C); - - -extern void (*D_801A6A8C[])(void); - -void func_80182EB4(void *a0) { - D_801A6A8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182EF0); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80182F6C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018308C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801830D8); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801831E4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183240); - - -extern void (*D_801BC098[])(void); - -void func_80183280(void *a0) { - D_801BC098[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801BC078[]; - -void func_801832BC(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801BC078[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801BC078)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801BC078[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801BC0AC[])(void); - -void func_80183380(void *a0) { - D_801BC0AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_801832BC(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_801833BC(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_801832BC(param_1, -0x80); - func_801832BC(param_1, -0x30); - func_801832BC(param_1, 0x20); - func_801832BC(param_1, 0x70); - func_801832BC(param_1, 0xc0); - } - if (1 < uVar1) { - func_801832BC(param_1, -0x58); - func_801832BC(param_1, -0x8); - func_801832BC(param_1, 0x48); - func_801832BC(param_1, 0x98); - func_801832BC(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_801832BC(s32, s32); - -void func_801834A4(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_801832BC(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801BC0A0; - -void func_801834E4(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801BC0A0, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018356C(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801835B4); - - -extern void (*D_801C12C4[])(void); - -void func_80183660(void *a0) { - D_801C12C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_8018369C); - -void func_80183700(void) { -} - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183708); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183754); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183794); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801837F0); - -extern void func_8012B2CC(s32 a0); - void func_80183854(s32 *a0) { - s32 *p = *(s32 **)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 2; - *(s16 *)((s32)p + 0x12) = -0x600; - ((void (*)(void))func_8012B2CC)(); - } - - -extern void func_8012B2CC(s32 a0); - void func_80183884(s32 *a0) { - s32 *v1 = *(s32 **)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 0x4; - *(s16 *)((s32)v1 + 0x12) = 0x600; - ((void (*)(void))func_8012B2CC)(); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_801838B4); - - -extern void (*D_801C16BC[])(void); - -void func_80183A24(void *a0) { - D_801C16BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183A60); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183ADC); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183B4C); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80183B64(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183B88); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801734BC", func_80183CBC); - -void func_80183D24(void) { -} - -void func_80183D2C(void) { -} - diff --git a/src/ov_SC03_125/ov_SC03_125_jr_80178D40.c b/src/ov_SC03_125/ov_SC03_125_jr_80178D40.c new file mode 100644 index 000000000..cc05a1274 --- /dev/null +++ b/src/ov_SC03_125/ov_SC03_125_jr_80178D40.c @@ -0,0 +1,5030 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186F68[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C33B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186F5C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80186FA0[]; +extern unsigned short D_80186FA8[]; +extern unsigned short D_80186FB0[]; +extern unsigned char D_801C33C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C33B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186FB8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C34F4; +extern M2C_UNK D_801C34F8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C3480; +extern void (*D_80186FE8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C34FC[]; +extern u8 D_801C3504[]; +extern u8 D_801C34B4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80186FF0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018700C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187014[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018707C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187020; +extern u8 D_8018702C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801870B0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801870B8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018710C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187140[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187130[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018715C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801871D4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801871DC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801871E4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801871EC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801871F4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801871FC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187208[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187214[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187220[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187230[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187240[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187248[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187250[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187258[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187260[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187268[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187270[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187278[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187280[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187288[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187290[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187298[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801872A0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801872A8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801872B0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801872B8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801872C0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801872C8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801872D0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801872D8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801872E0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801872E8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801872F0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187334[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801872F8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187364[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801873A0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801873F8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187408[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187410[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187578[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187584[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C2A84; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C44C8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C3C38; +extern short D_801C453C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C453C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C453C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C3C38 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C453C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C4480 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C4480 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C453C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C453C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C4094[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C3C3C; + extern s32 D_801C4050; + extern s16 D_801C4054; + extern s16 D_801C4058; + extern s16 D_801C405C; + extern s16 D_801C4060; + extern s32 D_801C4068; + extern s32 D_801C406C; + extern s32 D_801C407C; + extern s16 D_801C4080; + extern s16 D_801C4084; + extern s32 D_801C4088; + extern s32 D_801C4090; + extern s32 D_801C4094[10]; + extern s32 D_801C43B0; + extern s16 D_801C4480; + extern s32 D_801C44C4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C4480; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C4050); + D_801C4050 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C405C, D_801C4060 ? 0x48 : 0x40); + (*(s16*)&D_801C453C) = 2; + break; + case 0: + func_80179B28(D_801C4050); + D_801C4050 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C4054, D_801C4058 ? 0x48 : 0x40); + (*(s16*)&D_801C453C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C43B0 != 0) { + func_80179B28(D_801C4050); + D_801C4050 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C4054, D_801C4058 ? 0x48 : 0x40); + (*(s16*)&D_801C453C) = 1; + } else { + (*(s16*)&D_801C453C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C4050); + D_801C4050 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C4054, + D_801C4058 ? 0x48 : 0x40); + (*(s16*)&D_801C453C) = 1; + break; + case 2: + func_80179B28(D_801C4050); + if (D_801C4068 != 0) { + D_801C3C38 = D_801C4068; + D_801C4068 = 0; + (*(s16*)&D_801C453C) = 3; + return; + } + (*(s16*)&D_801C453C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C453C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C453C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C453C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C453C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C453C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C453C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C453C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C453C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C453C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C453C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C453C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x1B: + D_801C4088 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C453C) = 4; + D_801C3C3C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C453C) = 5; + D_801C407C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C407C = (s32)func_8017A3B0; + (*(s16*)&D_801C453C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x24: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C453C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C453C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C453C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C453C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C453C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C453C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C453C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C453C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C453C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C406C); + (*(s16*)&D_801C453C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C406C); + (*(s16*)&D_801C453C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C406C); + (*(s16*)&D_801C453C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C406C); + (*(s16*)&D_801C453C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + break; + case 0x4E: + D_801C4090 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C453C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C44C4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C453C) = 3; + break; + case 0x34: + (*(s16*)&D_801C453C) = 3; + D_801C3C38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C4068 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C453C) = 3; + D_801C3C38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C453C) = 3; + D_801C3C38 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C3C38 = *(s32 *)(D_801C3C38 + 4); + return; + case 0x37: + (*(s16*)&D_801C453C) = 3; + D_801C4054 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C4058 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C453C) = 3; + D_801C405C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C4060 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C453C) = 3; + D_801C4054 = w1; + D_801C4058 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C453C) = 3; + D_801C405C = w2; + D_801C4060 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + case 0x43: + D_801C407C = (s32)func_8017A3D8; + D_801C4084 = 0; + (*(s16*)&D_801C453C) = 5; + D_801C4080 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C453C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C453C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C453C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C4094; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C453C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C4094; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C453C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C4094[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C453C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C4094; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C453C) = 3; + break; + default: + break; + } +Lend: + D_801C3C38 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C4064; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C4064 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C4064; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C4064 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C408C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C408C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C4048; + +s32 func_8017A3B0(void) { + switch (D_801C4048) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C4084; +extern short D_801C4080; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C4084) { + case 0: + func_800D0CA0(1); + D_801C4084 = D_801C4084 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C4080; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C4084 = D_801C4084 + 1; + if (D_801C4084 < 0x1E) { + return 0; + } + D_801C4084 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C40C4; + extern s16 D_801C40C6; + extern s16 D_801C40C8; + extern s16 D_801C40BC; + extern s16 D_801C40BE; + extern s16 D_801C40C0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C40C4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C40C6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C40C8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C40BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C40BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C40C0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C404C; +extern u16 D_801C40CC; +extern u16 D_801C40CE; +extern u16 D_801C40D0; +extern s16 D_801C44C8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C44C8 = 0; + D_801C404C = 0; + D_801C40CC = D_80126B5E; + D_801C40CE = D_80126B62; + D_801C40D0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801876C0[]; + extern s16 D_801C40C4; + extern s16 D_801C40BC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801876C0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801876C0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C40C4; + s16 *p78C = &D_801C40BC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C44C8 = 1; + D_801C404C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C406C; + extern SV4_8017B368 D_801C4074; + extern s16 D_801C40C4; + extern s16 D_801C40BC; + extern u16 D_801876C0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C406C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C4074; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801876C0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801876C0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C40C4) = loc0; + (*(SV4_8017B368 *)&D_801C40BC) = loc1; + D_801C44C8 = 1; + D_801C404C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801876C0[]; + extern s16 D_801C40C4; + extern s16 D_801C40C6; + extern s16 D_801C40C8; + extern s16 D_801C40BC; + extern s16 D_801C40BE; + extern s16 D_801C40C0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801876C0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801876C0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C40C4; + s16 *p78C = &D_801C40BC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C40C6; + v798 = D_801C40C8; + v78C = *p78C; + v78E = D_801C40BE; + v790 = D_801C40C0; + __asm__ __volatile__(""); + D_801C44C8 = 1; + D_801C404C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C404C; +extern s16 D_801C40C4; +extern s16 D_801C40C6; +extern s16 D_801C40C8; +extern s16 D_801C40BC; +extern s16 D_801C40BE; +extern s16 D_801C40C0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C404C = 0; + D_801C40C4 = (s16) D_80114F30; + D_801C40C6 = (s16) D_80114F34; + D_801C40C8 = (s16) D_80114F38; + D_801C40BC = (s16) D_80114F24; + D_801C40BE = (s16) D_80114F28; + D_801C40C0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C40DC; +extern s16 D_801C40DE; +extern s16 D_801C40E0; +extern s16 D_801C40E4; +extern s16 D_801C40E6; +extern s16 D_801C40E8; + +void func_8017B824(void) { + D_801C40DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C40DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C40E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C40E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C40E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C40E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C40DC; +extern s16 D_801C40DE; +extern s16 D_801C40E0; +extern s16 D_801C40E4; +extern s16 D_801C40E6; +extern s16 D_801C40E8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C40DC; + D_80114F34 = D_801C40DE; + D_80114F38 = D_801C40E0; + D_80114F24 = D_801C40E4; + D_80114F28 = D_801C40E6; + D_80114F2C = D_801C40E8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C40C4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C40BC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C40C4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C40BC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C40CC; +extern u16 D_801C40CE; +extern u16 D_801C40D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C404C; +extern short D_801C40D4; +extern short D_801C40D6; +extern short D_801C40D8; +extern s16 D_801C40C4; +extern s16 D_801C40C6; +extern s16 D_801C40C8; +extern s16 D_801C40BC; +extern s16 D_801C40BE; +extern s16 D_801C40C0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C40CC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C40CE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C40D0); + (*(s16 *)&D_801C40D4) = buf[0]; + (*(s16 *)&D_801C40D6) = buf[1]; + (*(s16 *)&D_801C40D8) = buf[2]; + D_801C40C4 = D_80114F30 + buf[0]; + D_801C404C = 0; + D_801C40C6 = D_80114F34 + buf[1]; + D_801C40C8 = D_80114F38 + buf[2]; + D_801C40BC = D_80114F24 + buf[0]; + D_801C40BE = D_80114F28 + buf[1]; + D_801C40C0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C406C; +extern SV4 D_801C4074; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C4074) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C406C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C4074 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C4074)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C406C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C4074) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C4094[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C4094; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C404C; +extern s16 D_801C44C8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C404C = D_801C404C + 1; + if (D_801C404C >= 0x1F) { + D_801C44C8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C404C; +extern s16 D_801C44C8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C404C = D_801C404C + 1; + if (0x18 < D_801C404C) { + func_8012A4BC(); + D_801C44C8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C404C; +extern void (*D_801C4090)(void); +extern short D_801C40D4; +extern short D_801C40D6; +extern short D_801C40D8; +extern s16 D_801C44C8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C404C = D_801C404C + 1; + if (D_801C404C >= 0x19) { + if (D_801C4090 != 0) { + (*D_801C4090)(); + } else { + D_80114F30 = D_80114F30 + D_801C40D4; + D_80114F34 = D_80114F34 + D_801C40D6; + D_80114F38 = D_80114F38 + D_801C40D8; + D_80114F24 = D_80114F24 + D_801C40D4; + D_80114F28 = D_80114F28 + D_801C40D6; + D_80114F2C = D_80114F2C + D_801C40D8; + func_8012A4BC(); + } + D_801C44C8 = 0; + } +} + + + +extern void (*D_80187760[])(void); + +void func_8017BE60(void *a0) { + D_80187760[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017BF88); + + +extern void (*D_80187778[])(void); + +void func_8017C0E4(void *a0) { + D_80187778[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C120); + + +extern void (*D_80187814[])(void); + +void func_8017C180(void *a0) { + D_80187814[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018781C[])(void); + +void func_8017C1BC(void *a0) { + D_8018781C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80187824[])(void); + +void func_8017C1F8(void *a0) { + D_80187824[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C3E4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C4D0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C594); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C61C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C7B8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017C9BC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017CDB0); + + +extern void (*D_80187B00[])(void); + +void func_8017CF30(void *a0) { + D_80187B00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017CF6C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017CFE0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D474); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D5C4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017D604); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E4E4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E534(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E5C8); + +extern void func_800D1EBC(void); + void func_8017E678(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E698); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E780); + + +extern void (*D_80187B24[])(void); + +void func_8017E7A8(void *a0) { + D_80187B24[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80187B2C[])(void); + +void func_8017E7E4(void *a0) { + D_80187B2C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80187B38[])(void); + +void func_8017E820(void *a0) { + D_80187B38[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017E85C(void) { + D_80127050 = 0x1; + } + + + +extern void (*D_80187C3C[])(void); + +void func_8017E870(void *a0) { + D_80187C3C[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E8AC(u8 *a0) { + *(s8 *)(a0 + 0x214) += 1; + } + + +extern void func_80175414(s32 arg0); + extern void func_8016F0E4(void); + extern void func_80165770(void); + void func_8017E8C0(s32 arg0) { + func_80175414(arg0); + ((s32 (*)(s32))func_8016F0E4)(arg0); + ((void (*)(s32))func_80165770)(arg0); + } + + + +extern void (*D_80187C44[])(void); + +void func_8017E8F8(void *a0) { + D_80187C44[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E934(void *a0) { + *(s8 *)((s32)a0 + 0x214) += 1; + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E948); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017E968); + + +extern void (*D_80187C4C[])(void); + +void func_8017EA2C(void *a0) { + D_80187C4C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EA68); + +void func_8017EA9C(u8 *a0) { + *(s8 *)(a0 + 0xa0) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EAA4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EBE4); + + +extern void (*D_80187DAC[])(void); + +void func_8017EDD8(void *a0) { + D_80187DAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EE14); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EE2C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EE5C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EE9C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EEDC); + + +extern void (*D_80187FB0[])(void); + +void func_8017EFB0(void *a0) { + D_80187FB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017EFEC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F00C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F02C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F0F0); + + +extern void (*D_80188028[])(void); + +void func_8017F178(void *a0) { + D_80188028[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F1B4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F258); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F2BC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F2F4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F390); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F41C); + + +extern void (*D_801880EC[])(void); + +void func_8017F554(void *a0) { + D_801880EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F590); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F68C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F700); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F740); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F780); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F804); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F87C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017F8E4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FA8C); + + +extern void (*D_80188118[])(void); + +void func_8017FACC(void *a0) { + D_80188118[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FB08); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FBFC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FCB0); + + +extern void (*D_80188120[])(void); + +void func_8017FD3C(void *a0) { + D_80188120[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern s32 func_8012AD50(void *a0); + void func_8017FD78(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FD98); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8017FE60); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180148); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180230); + + +extern void (*D_80188138[])(void); + +void func_8018038C(void *a0) { + D_80188138[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801803C8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180458); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801804CC); + + +extern void (*D_801881F4[])(void); + +void func_8018056C(void *a0) { + D_801881F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801805A8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018062C); + + +extern void (*D_8018820C[])(void); + +void func_8018068C(void *a0) { + D_8018820C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801806C8); + +void func_8018077C(void) { +} + + +extern void (*D_80188244[])(void); + +void func_80180784(void *a0) { + D_80188244[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801807C0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180850); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180A8C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180ADC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180B98); + + +extern void (*D_80188438[])(void); + +void func_80180CB0(void *a0) { + D_80188438[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180CEC); + +void func_80180DB8(void) { +} + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180DC0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180E58); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180E98); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80180F0C); + + +extern void (*D_80188450[])(void); + +void func_80181084(void *a0) { + D_80188450[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80188470[])(void); + +void func_801810C0(void *a0) { + D_80188470[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801810FC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181188); + + +extern s32 func_80029504(void); +extern void func_800183E0(s32 arg0); +extern char D_80188478; + +void func_801811E0(void) { + if (!(func_80029504() < 0x492)) { + func_800183E0((s32)&D_80188478); + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018121C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801812B4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801812FC); + + +void func_801815CC(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + + +void func_801815DC(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801815EC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181688); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801816B4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801816E0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018170C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181790); + +extern s32 func_80181790(s32 arg); + extern void func_801818F4(void *a0); + void func_801818C0(u8 *a0) { + *(s32 *)(a0 + 0xe0) = func_80181790((s32)a0); + func_801818F4(a0); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801818F4); + + +extern short D_800BA2BA; + s32 func_80181934(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801A6770[])(void); + +void func_8018195C(void *a0) { + D_801A6770[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80181998(void) { +} + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801819A0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801819DC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181A00); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181A58); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181AC0); + +void func_80181AE0(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181AE8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181B30); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181B8C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181C00); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181C74); + +extern s32 func_80029504(void); +extern void func_80029514(s32 arg0); + +void func_80181CD0(void) { + if ((func_80029504() == 0x3A2) && (func_80029514(0x3AC), 1)) { + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181D04); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181DD4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80181F9C); + + +extern void (*D_801A6790[])(void); + +void func_80181FE4(void *a0) { + D_801A6790[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80182020(void) { +} + +void func_80182028(void) { +} + +void func_80182030(void) { +} + +void func_80182038(void) { +} + +void func_80182040(void) { +} + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182048); + +void func_8018208C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182094); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018211C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801822F4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182494); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182510); + +extern s32 func_80182D1C(void); + void func_801825DC(void) { + func_80182D1C(); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801825FC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801826CC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182734); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801827A8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182808); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182888); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801828E0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182940); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182988); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801829D8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182A10); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182A9C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182B40); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182BA0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182D1C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182D50); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182D84); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182DE8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182E5C); + + +extern void (*D_801A6A8C[])(void); + +void func_80182EB4(void *a0) { + D_801A6A8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182EF0); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80182F6C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018308C); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801830D8); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801831E4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183240); + + +extern void (*D_801BC098[])(void); + +void func_80183280(void *a0) { + D_801BC098[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801BC078[]; + +void func_801832BC(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801BC078[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801BC078)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801BC078[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801BC0AC[])(void); + +void func_80183380(void *a0) { + D_801BC0AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_801832BC(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_801833BC(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_801832BC(param_1, -0x80); + func_801832BC(param_1, -0x30); + func_801832BC(param_1, 0x20); + func_801832BC(param_1, 0x70); + func_801832BC(param_1, 0xc0); + } + if (1 < uVar1) { + func_801832BC(param_1, -0x58); + func_801832BC(param_1, -0x8); + func_801832BC(param_1, 0x48); + func_801832BC(param_1, 0x98); + func_801832BC(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_801832BC(s32, s32); + +void func_801834A4(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_801832BC(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801BC0A0; + +void func_801834E4(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801BC0A0, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018356C(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801835B4); + + +extern void (*D_801C12C4[])(void); + +void func_80183660(void *a0) { + D_801C12C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_8018369C); + +void func_80183700(void) { +} + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183708); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183754); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183794); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801837F0); + +extern void func_8012B2CC(s32 a0); + void func_80183854(s32 *a0) { + s32 *p = *(s32 **)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 2; + *(s16 *)((s32)p + 0x12) = -0x600; + ((void (*)(void))func_8012B2CC)(); + } + + +extern void func_8012B2CC(s32 a0); + void func_80183884(s32 *a0) { + s32 *v1 = *(s32 **)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 0x4; + *(s16 *)((s32)v1 + 0x12) = 0x600; + ((void (*)(void))func_8012B2CC)(); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_801838B4); + + +extern void (*D_801C16BC[])(void); + +void func_80183A24(void *a0) { + D_801C16BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183A60); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183ADC); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183B4C); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80183B64(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183B88); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_80178D40", func_80183CBC); + +void func_80183D24(void) { +} + +void func_80183D2C(void) { +} + + diff --git a/src/ov_SC03_126/ov_SC03_126_jr_801734BC.c b/src/ov_SC03_126/ov_SC03_126_jr_801734BC.c index ae123fd00..1b11f9498 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_801734BC.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_801734BC.c @@ -3084,950 +3084,3 @@ void func_80178D18(void) { D_8018FB24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018F954; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018F954 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018F910; - -s32 func_8017A3B0(void) { - switch (D_8018F910) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018F94C; -extern short D_8018F948; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018F94C) { - case 0: - func_800D0CA0(1); - D_8018F94C = D_8018F94C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018F948; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018F94C = D_8018F94C + 1; - if (D_8018F94C < 0x1E) { - return 0; - } - D_8018F94C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018F914; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; -extern s16 D_8018FAB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8018FAB0 = 0; - D_8018F914 = 0; - D_8018F994 = D_80126B5E; - D_8018F996 = D_80126B62; - D_8018F998 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8018FAB0 = 1; - D_8018F914 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018F934; - extern SV4_8017B368 D_8018F93C; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u16 D_80182BB8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018F934; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018F93C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018F98C) = loc0; - (*(SV4_8017B368 *)&D_8018F984) = loc1; - D_8018FAB0 = 1; - D_8018F914 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018F98E; - v798 = D_8018F990; - v78C = *p78C; - v78E = D_8018F986; - v790 = D_8018F988; - __asm__ __volatile__(""); - D_8018FAB0 = 1; - D_8018F914 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018F914 = 0; - D_8018F98C = (s16) D_80114F30; - D_8018F98E = (s16) D_80114F34; - D_8018F990 = (s16) D_80114F38; - D_8018F984 = (s16) D_80114F24; - D_8018F986 = (s16) D_80114F28; - D_8018F988 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -void func_8017B824(void) { - D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018F9A4; - D_80114F34 = D_8018F9A6; - D_80114F38 = D_8018F9A8; - D_80114F24 = D_8018F9AC; - D_80114F28 = D_8018F9AE; - D_80114F2C = D_8018F9B0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); - (*(s16 *)&D_8018F99C) = buf[0]; - (*(s16 *)&D_8018F99E) = buf[1]; - (*(s16 *)&D_8018F9A0) = buf[2]; - D_8018F98C = D_80114F30 + buf[0]; - D_8018F914 = 0; - D_8018F98E = D_80114F34 + buf[1]; - D_8018F990 = D_80114F38 + buf[2]; - D_8018F984 = D_80114F24 + buf[0]; - D_8018F986 = D_80114F28 + buf[1]; - D_8018F988 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018F934; -extern SV4 D_8018F93C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018F934 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018F93C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018F934) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018F93C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018F95C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018F95C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x1F) { - D_8018FAB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (0x18 < D_8018F914) { - func_8012A4BC(); - D_8018FAB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018F914; -extern void (*D_8018F958)(void); -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018FAB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x19) { - if (D_8018F958 != 0) { - (*D_8018F958)(); - } else { - D_80114F30 = D_80114F30 + D_8018F99C; - D_80114F34 = D_80114F34 + D_8018F99E; - D_80114F38 = D_80114F38 + D_8018F9A0; - D_80114F24 = D_80114F24 + D_8018F99C; - D_80114F28 = D_80114F28 + D_8018F99E; - D_80114F2C = D_80114F2C + D_8018F9A0; - func_8012A4BC(); - } - D_8018FAB0 = 0; - } -} - - - -extern void (*D_80182C58[])(void); - -void func_8017BE60(void *a0) { - D_80182C58[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80182C70[])(void); - -void func_8017BEBC(void *a0) { - D_80182C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017BEF8); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017BFA4); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017C014); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017C3EC); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017C688); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017D5C0); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E4A0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E508); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E550(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E5EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E62C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E6A8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80182C78[])(void); - -void func_8017E6C8(void *a0) { - D_80182C78[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C80[])(void); - -void func_8017E704(void *a0) { - D_80182C80[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C8C[])(void); - -void func_8017E740(void *a0) { - D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182F38[])(void); - -void func_8017E77C(void *a0) { - D_80182F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E808); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E91C); - - -extern void (*D_80182F4C[])(void); - -void func_8017E950(void *a0) { - D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E98C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017E9CC); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EA78); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EACC); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EB4C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EBC8); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EC2C); - - -extern void (*D_80182F68[])(void); - -void func_8017EC84(void *a0) { - D_80182F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017ECC0); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017ED0C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017ED68); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EDB8); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EE68); - - -extern void (*D_80182F74[])(void); - -void func_8017EF10(void *a0) { - D_80182F74[*(u8 *)((s32)a0 + 0x4)](); -} - - -extern s32 func_8017EFA0(void); - s32 func_8017EF4C(void) { - return func_8017EFA0(); - } - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EF6C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017EFA0); - - -s32 func_8017F14C(void) { - return 135; -} - - - -extern void (*D_80183110[])(void); - -void func_8017F154(void *a0) { - D_80183110[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_801734BC", func_8017F1B8); - -DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ - diff --git a/src/ov_SC03_126/ov_SC03_126_jr_80178D40.c b/src/ov_SC03_126/ov_SC03_126_jr_80178D40.c new file mode 100644 index 000000000..3a7fdfd12 --- /dev/null +++ b/src/ov_SC03_126/ov_SC03_126_jr_80178D40.c @@ -0,0 +1,4396 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182460[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018EC80; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182454[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018EC80; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801824B0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; +extern void (*D_801824E0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801824E8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182504[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018250C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182518; +extern u8 D_80182524; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801825A8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801825B0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182604[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182628[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182654; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801826CC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801826D4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801826DC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801826E4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801826EC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801826F4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182700[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018270C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182718[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182728[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182738[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182740[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182748[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182750[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182758[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182760[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182768[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182770[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182778[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182780[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182788[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182790[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182798[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801827A0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801827A8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801827B0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801827B8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801827C0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801827C8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801827D0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801827D8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801827E0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801827E8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018282C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801827F0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018285C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182898[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801828F0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182900[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182908[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182A70[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182A7C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E370; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8018FAB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F500; +extern short D_8018FB24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8018FB24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8018FB24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F500 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8018FB24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8018FA80 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8018FA80 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8018FB24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8018FB24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018F95C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F504; + extern s32 D_8018F918; + extern s16 D_8018F91C; + extern s16 D_8018F920; + extern s16 D_8018F924; + extern s16 D_8018F928; + extern s32 D_8018F930; + extern s32 D_8018F934; + extern s32 D_8018F944; + extern s16 D_8018F948; + extern s16 D_8018F94C; + extern s32 D_8018F950; + extern s32 D_8018F958; + extern s32 D_8018F95C[10]; + extern s32 D_8018F9C8; + extern s16 D_8018FA80; + extern s32 D_8018FAAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8018FA80; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F924, D_8018F928 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 2; + break; + case 0: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8018F9C8 != 0) { + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + } else { + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x32: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018F91C, + D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 2: + func_80179B28(D_8018F918); + if (D_8018F930 != 0) { + D_8018F500 = D_8018F930; + D_8018F930 = 0; + (*(s16*)&D_8018FB24) = 3; + return; + } + (*(s16*)&D_8018FB24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1B: + D_8018F950 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8018FB24) = 4; + D_8018F504 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8018FB24) = 5; + D_8018F944 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018F944 = (s32)func_8017A3B0; + (*(s16*)&D_8018FB24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x24: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4E: + D_8018F958 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2B: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8018FAAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x34: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018F930 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F500 = *(s32 *)(D_8018F500 + 4); + return; + case 0x37: + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F920 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F928 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = w1; + D_8018F920 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = w2; + D_8018F928 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x43: + D_8018F944 = (s32)func_8017A3D8; + D_8018F94C = 0; + (*(s16*)&D_8018FB24) = 5; + D_8018F948 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018F95C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018F95C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8018FB24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018F95C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018F95C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8018FB24) = 3; + break; + default: + break; + } +Lend: + D_8018F500 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018F954; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018F954 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018F910; + +s32 func_8017A3B0(void) { + switch (D_8018F910) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018F94C; +extern short D_8018F948; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018F94C) { + case 0: + func_800D0CA0(1); + D_8018F94C = D_8018F94C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018F948; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018F94C = D_8018F94C + 1; + if (D_8018F94C < 0x1E) { + return 0; + } + D_8018F94C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018F914; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; +extern s16 D_8018FAB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8018FAB0 = 0; + D_8018F914 = 0; + D_8018F994 = D_80126B5E; + D_8018F996 = D_80126B62; + D_8018F998 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8018FAB0 = 1; + D_8018F914 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018F934; + extern SV4_8017B368 D_8018F93C; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u16 D_80182BB8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018F934; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018F93C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018F98C) = loc0; + (*(SV4_8017B368 *)&D_8018F984) = loc1; + D_8018FAB0 = 1; + D_8018F914 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018F98E; + v798 = D_8018F990; + v78C = *p78C; + v78E = D_8018F986; + v790 = D_8018F988; + __asm__ __volatile__(""); + D_8018FAB0 = 1; + D_8018F914 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018F914 = 0; + D_8018F98C = (s16) D_80114F30; + D_8018F98E = (s16) D_80114F34; + D_8018F990 = (s16) D_80114F38; + D_8018F984 = (s16) D_80114F24; + D_8018F986 = (s16) D_80114F28; + D_8018F988 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +void func_8017B824(void) { + D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018F9A4; + D_80114F34 = D_8018F9A6; + D_80114F38 = D_8018F9A8; + D_80114F24 = D_8018F9AC; + D_80114F28 = D_8018F9AE; + D_80114F2C = D_8018F9B0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); + (*(s16 *)&D_8018F99C) = buf[0]; + (*(s16 *)&D_8018F99E) = buf[1]; + (*(s16 *)&D_8018F9A0) = buf[2]; + D_8018F98C = D_80114F30 + buf[0]; + D_8018F914 = 0; + D_8018F98E = D_80114F34 + buf[1]; + D_8018F990 = D_80114F38 + buf[2]; + D_8018F984 = D_80114F24 + buf[0]; + D_8018F986 = D_80114F28 + buf[1]; + D_8018F988 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018F934; +extern SV4 D_8018F93C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018F934 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018F93C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018F934) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018F93C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018F95C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018F95C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x1F) { + D_8018FAB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (0x18 < D_8018F914) { + func_8012A4BC(); + D_8018FAB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018F914; +extern void (*D_8018F958)(void); +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018FAB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x19) { + if (D_8018F958 != 0) { + (*D_8018F958)(); + } else { + D_80114F30 = D_80114F30 + D_8018F99C; + D_80114F34 = D_80114F34 + D_8018F99E; + D_80114F38 = D_80114F38 + D_8018F9A0; + D_80114F24 = D_80114F24 + D_8018F99C; + D_80114F28 = D_80114F28 + D_8018F99E; + D_80114F2C = D_80114F2C + D_8018F9A0; + func_8012A4BC(); + } + D_8018FAB0 = 0; + } +} + + + +extern void (*D_80182C58[])(void); + +void func_8017BE60(void *a0) { + D_80182C58[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80182C70[])(void); + +void func_8017BEBC(void *a0) { + D_80182C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017BEF8); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017BFA4); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017C014); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017C3EC); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017C688); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017D5C0); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E4A0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E4E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E508); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E550(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E5EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E62C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E6A8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80182C78[])(void); + +void func_8017E6C8(void *a0) { + D_80182C78[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C80[])(void); + +void func_8017E704(void *a0) { + D_80182C80[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C8C[])(void); + +void func_8017E740(void *a0) { + D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182F38[])(void); + +void func_8017E77C(void *a0) { + D_80182F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E808); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E91C); + + +extern void (*D_80182F4C[])(void); + +void func_8017E950(void *a0) { + D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E98C); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017E9CC); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EA78); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EACC); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EB4C); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EBC8); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EC2C); + + +extern void (*D_80182F68[])(void); + +void func_8017EC84(void *a0) { + D_80182F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017ECC0); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017ED0C); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017ED68); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EDB8); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EE68); + + +extern void (*D_80182F74[])(void); + +void func_8017EF10(void *a0) { + D_80182F74[*(u8 *)((s32)a0 + 0x4)](); +} + + +extern s32 func_8017EFA0(void); + s32 func_8017EF4C(void) { + return func_8017EFA0(); + } + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EF6C); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017EFA0); + + +s32 func_8017F14C(void) { + return 135; +} + + + +extern void (*D_80183110[])(void); + +void func_8017F154(void *a0) { + D_80183110[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_80178D40", func_8017F1B8); + +DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ + + diff --git a/src/ov_SC04_000/ov_SC04_000_jr_801734BC.c b/src/ov_SC04_000/ov_SC04_000_jr_801734BC.c index 4fd2aaeb7..02335dd3b 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_801734BC.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_801734BC.c @@ -3075,1287 +3075,3 @@ void func_80178D18(void) { D_801AB054 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A99DC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A99DC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A99DC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A99DC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A9A04; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A9A04 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A99C0; - -s32 func_8017A3B0(void) { - switch (D_801A99C0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A99FC; -extern short D_801A99F8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A99FC) { - case 0: - func_800D0CA0(1); - D_801A99FC = D_801A99FC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A99F8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A99FC = D_801A99FC + 1; - if (D_801A99FC < 0x1E) { - return 0; - } - D_801A99FC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A9A3C; - extern s16 D_801A9A3E; - extern s16 D_801A9A40; - extern s16 D_801A9A34; - extern s16 D_801A9A36; - extern s16 D_801A9A38; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A9A3C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A9A3E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9A40, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9A34, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9A36, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9A38, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A99C4; -extern u16 D_801A9A44; -extern u16 D_801A9A46; -extern u16 D_801A9A48; -extern s16 D_801AAFE0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AAFE0 = 0; - D_801A99C4 = 0; - D_801A9A44 = D_80126B5E; - D_801A9A46 = D_80126B62; - D_801A9A48 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186BC4[]; - extern s16 D_801A9A3C; - extern s16 D_801A9A34; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186BC4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186BC4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A9A3C; - s16 *p78C = &D_801A9A34; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AAFE0 = 1; - D_801A99C4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A99E4; - extern SV4_8017B368 D_801A99EC; - extern s16 D_801A9A3C; - extern s16 D_801A9A34; - extern u16 D_80186BC4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A99E4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A99EC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80186BC4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80186BC4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A9A3C) = loc0; - (*(SV4_8017B368 *)&D_801A9A34) = loc1; - D_801AAFE0 = 1; - D_801A99C4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186BC4[]; - extern s16 D_801A9A3C; - extern s16 D_801A9A3E; - extern s16 D_801A9A40; - extern s16 D_801A9A34; - extern s16 D_801A9A36; - extern s16 D_801A9A38; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186BC4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186BC4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A9A3C; - s16 *p78C = &D_801A9A34; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A9A3E; - v798 = D_801A9A40; - v78C = *p78C; - v78E = D_801A9A36; - v790 = D_801A9A38; - __asm__ __volatile__(""); - D_801AAFE0 = 1; - D_801A99C4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A99C4; -extern s16 D_801A9A3C; -extern s16 D_801A9A3E; -extern s16 D_801A9A40; -extern s16 D_801A9A34; -extern s16 D_801A9A36; -extern s16 D_801A9A38; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A99C4 = 0; - D_801A9A3C = (s16) D_80114F30; - D_801A9A3E = (s16) D_80114F34; - D_801A9A40 = (s16) D_80114F38; - D_801A9A34 = (s16) D_80114F24; - D_801A9A36 = (s16) D_80114F28; - D_801A9A38 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A9A54; -extern s16 D_801A9A56; -extern s16 D_801A9A58; -extern s16 D_801A9A5C; -extern s16 D_801A9A5E; -extern s16 D_801A9A60; - -void func_8017B824(void) { - D_801A9A54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A9A56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A9A58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A9A5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A9A5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A9A60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A9A54; -extern s16 D_801A9A56; -extern s16 D_801A9A58; -extern s16 D_801A9A5C; -extern s16 D_801A9A5E; -extern s16 D_801A9A60; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A9A54; - D_80114F34 = D_801A9A56; - D_80114F38 = D_801A9A58; - D_80114F24 = D_801A9A5C; - D_80114F28 = D_801A9A5E; - D_80114F2C = D_801A9A60; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A9A3C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9A34) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A9A3C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A9A34) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A9A44; -extern u16 D_801A9A46; -extern u16 D_801A9A48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A99C4; -extern short D_801A9A4C; -extern short D_801A9A4E; -extern short D_801A9A50; -extern s16 D_801A9A3C; -extern s16 D_801A9A3E; -extern s16 D_801A9A40; -extern s16 D_801A9A34; -extern s16 D_801A9A36; -extern s16 D_801A9A38; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9A44); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9A46); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9A48); - (*(s16 *)&D_801A9A4C) = buf[0]; - (*(s16 *)&D_801A9A4E) = buf[1]; - (*(s16 *)&D_801A9A50) = buf[2]; - D_801A9A3C = D_80114F30 + buf[0]; - D_801A99C4 = 0; - D_801A9A3E = D_80114F34 + buf[1]; - D_801A9A40 = D_80114F38 + buf[2]; - D_801A9A34 = D_80114F24 + buf[0]; - D_801A9A36 = D_80114F28 + buf[1]; - D_801A9A38 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A99E4; -extern SV4 D_801A99EC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A99EC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A99E4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A99EC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A99EC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A99E4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A99EC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A9A0C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A9A0C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A99C4; -extern s16 D_801AAFE0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A99C4 = D_801A99C4 + 1; - if (D_801A99C4 >= 0x1F) { - D_801AAFE0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A99C4; -extern s16 D_801AAFE0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A99C4 = D_801A99C4 + 1; - if (0x18 < D_801A99C4) { - func_8012A4BC(); - D_801AAFE0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A99C4; -extern void (*D_801A9A08)(void); -extern short D_801A9A4C; -extern short D_801A9A4E; -extern short D_801A9A50; -extern s16 D_801AAFE0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A99C4 = D_801A99C4 + 1; - if (D_801A99C4 >= 0x19) { - if (D_801A9A08 != 0) { - (*D_801A9A08)(); - } else { - D_80114F30 = D_80114F30 + D_801A9A4C; - D_80114F34 = D_80114F34 + D_801A9A4E; - D_80114F38 = D_80114F38 + D_801A9A50; - D_80114F24 = D_80114F24 + D_801A9A4C; - D_80114F28 = D_80114F28 + D_801A9A4E; - D_80114F2C = D_80114F2C + D_801A9A50; - func_8012A4BC(); - } - D_801AAFE0 = 0; - } -} - - - -extern void (*D_80186C64[])(void); - -void func_8017BE60(void *a0) { - D_80186C64[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017CECC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D258); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D4D0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D618); - - -extern void (*D_80186D80[])(void); - -void func_8017D798(void *a0) { - D_80186D80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D7D4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D820); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D914); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017D994); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DA48); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DAB4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DB40); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DB60); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DBB4); - - -extern void (*D_80186DD8[])(void); - -void func_8017DBF0(void *a0) { - D_80186DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DC2C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DC7C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DCD8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DD5C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DEC4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017DF10); - - -extern void (*D_80186DEC[])(void); - -void func_8017E21C(void *a0) { - D_80186DEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E258); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E298); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E308); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E468); - - -extern void (*D_80186E00[])(void); - -void func_8017E4BC(void *a0) { - D_80186E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E4F8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E5AC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E608); - - -extern void (*D_80186F94[])(void); - -void func_8017E778(void *a0) { - D_80186F94[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E7B4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E82C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80186F9C[])(void); - -void func_8017E850(void *a0) { - D_80186F9C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E88C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E8CC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E948(void) { - func_800D1EBC(); - } - - - -extern void (*D_80186FA8[])(void); - -void func_8017E968(void *a0) { - D_80186FA8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017E9A4); - - -extern void (*D_80186FB4[])(void); - -void func_8017EA18(void *a0) { - D_80186FB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EA54); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EACC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EB0C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EB34); - - -extern void (*D_80186FD4[])(void); - -void func_8017EB5C(void *a0) { - D_80186FD4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EB98); - -void func_8017EBE0(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EBE8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EC64); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017ECA0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017ECC8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017ED64); - - -extern void (*D_80186FE4[])(void); - -void func_8017EE20(void *a0) { - D_80186FE4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017EE5C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F000); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F1A4); - -extern s32 func_800D0F8C(s32 arg); - s32 func_8017F204(void) { - return func_800D0F8C(0x60) != 0; - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F224); - -void func_8017F2E4(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F2EC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F324); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F3F4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F450); - - -extern void (*D_801870F0[])(void); - -void func_8017F468(void *a0) { - D_801870F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F4A4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F4D8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F628); - - -extern void (*D_8018712C[])(void); - -void func_8017F714(void *a0) { - D_8018712C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F750); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F834); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F8A0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017F98C); - - -extern void (*D_80199760[])(void); - -void func_8017FC8C(void *a0) { - D_80199760[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_8019977C[])(void); - -void func_8017FCC8(void *a0) { - D_8019977C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017FD04); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8017FEBC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180020); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180418); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801804B4); - -void func_8018050C(void *a0) { - s32 *p = *(s32 **)((s32)a0 + 0x20); - p[1] = p[1] | 0x50000000; - *(s16 *)((s32)p + 0x1E) = 0; - *(s16 *)((s32)p + 0x18) = 0; - *(s16 *)((s32)p + 0x1A) = 0; - *(s16 *)((s32)p + 0x1C) = 0; - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180548); - -void func_801805A8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801805B0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180604); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018066C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801806B8); - -void func_80180730(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180738); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018079C); - - -extern void (*D_8019D328[])(void); - -void func_801807DC(void *a0) { - D_8019D328[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180818); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801808EC); - -void func_80180914(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018091C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180A68); - -extern void func_8012C218(void *a0); - void func_80180B88(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)a0 + 0xCC)); - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180BB4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180BC4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180BD4); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_80180C14(s32 arg0) { - s32 temp_v0 = *(s32 *)(arg0 + 0xdc); - ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -extern s16 func_80174764(void); - s32 func_80180C48(void) { - return ((u32)((s32 (*)(void))func_80174764)() == 1); - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180C6C); - - -extern void (*D_8019D350[])(void); - -void func_80180CD0(void *a0) { - D_8019D350[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180D0C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180D94); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180E54); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180EC4); - - -extern void (*D_801A1380[])(void); - -void func_80180FBC(void *a0) { - D_801A1380[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80180FF8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801810B0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181154); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801A69B8; - void func_801811DC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_8012A828((int)arg0, (int)&D_801A69B8); - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181208); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181248); - -extern s32 func_8012BEE8(s32 a0); - void func_80181288(s32 arg0) { - if (((s32 (*)(void))func_8012BEE8)() != 0) { - *(s16 *)(arg0 + 0x2) = 0x7; - } - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801812BC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181310); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801813CC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801814A8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181540); - -void func_80181554(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018155C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018159C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801816DC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018175C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801818E8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181ABC); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181BA4); - - -extern void (*D_801A6E0C[])(void); - -void func_80181C1C(void *a0) { - D_801A6E0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181C58); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181D54); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80181FE4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182178); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801821D0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018224C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182290); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801822F0); - -void func_8018236C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182374); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182408); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182460); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182564); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182724); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801827B4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182800); - -void func_80182984(void) { -} - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018298C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182A38); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182AC0); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182B20); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182BA8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182C4C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182C90); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182D08); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182D78); - - -extern void (*D_801A700C[])(void); - -void func_80182DAC(void *a0) { - D_801A700C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182DE8); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182EC0); - -void func_80182EE8(void) { -} - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801A6FBC; - void func_80182EF0(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - func_80178CBC(a0, &D_801A6FBC); - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182F1C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80182F5C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_8018301C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80183088); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_80183098); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801830A8); - -extern void func_800296F8(void *a0); - s32 func_801830C0(s32 arg0) { - return ((s32 (*)(void *))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_801734BC", func_801830E4); - diff --git a/src/ov_SC04_000/ov_SC04_000_jr_80178D40.c b/src/ov_SC04_000/ov_SC04_000_jr_80178D40.c new file mode 100644 index 000000000..7696cf6c8 --- /dev/null +++ b/src/ov_SC04_000/ov_SC04_000_jr_80178D40.c @@ -0,0 +1,4732 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018646C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A8D30; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186460[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801864A4[]; +extern unsigned short D_801864AC[]; +extern unsigned short D_801864B4[]; +extern unsigned char D_801A8D38[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A8D30; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801864BC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A8E6C; +extern M2C_UNK D_801A8E70; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A8DF8; +extern void (*D_801864EC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A8E74[]; +extern u8 D_801A8E7C[]; +extern u8 D_801A8E2C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801864F4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80186510[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80186518[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186580[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80186524; +extern u8 D_80186530; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801865B4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801865BC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80186610[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80186644[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80186634[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80186660; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801866D8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801866E0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801866E8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801866F0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801866F8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80186700[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018670C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80186718[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80186724[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80186734[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80186744[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018674C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80186754[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018675C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80186764[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018676C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80186774[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018677C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80186784[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018678C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80186794[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018679C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801867A4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801867AC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801867B4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801867BC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801867C4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801867CC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801867D4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801867DC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801867E4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801867EC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801867F4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80186838[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801867FC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186868[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801868A4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801868FC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018690C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186914[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80186A7C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80186A88[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A83EC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AAFE0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801AB054; +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AB054) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AB054)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A95B0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AB054) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AAFB0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AAFB0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AB054) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AB054) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A9A0C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A95B0; + extern s32 D_801A95B4; + extern s32 D_801A99C8; + extern s16 D_801A99CC; + extern s16 D_801A99D0; + extern s16 D_801A99D4; + extern s16 D_801A99D8; + extern s32 D_801A99E0; + extern s32 D_801A99E4; + extern s32 D_801A99F4; + extern s16 D_801A99F8; + extern s16 D_801A99FC; + extern s32 D_801A9A00; + extern s32 D_801A9A08; + extern s32 D_801A9A0C[10]; + extern s32 D_801AAEF8; + extern s16 D_801AAFB0; + extern s32 D_801AAFDC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AAFB0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A99C8); + D_801A99C8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A99D4, D_801A99D8 ? 0x48 : 0x40); + (*(s16*)&D_801AB054) = 2; + break; + case 0: + func_80179B28(D_801A99C8); + D_801A99C8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A99CC, D_801A99D0 ? 0x48 : 0x40); + (*(s16*)&D_801AB054) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AAEF8 != 0) { + func_80179B28(D_801A99C8); + D_801A99C8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A99CC, D_801A99D0 ? 0x48 : 0x40); + (*(s16*)&D_801AB054) = 1; + } else { + (*(s16*)&D_801AB054) = 3; + } + break; + case 0x32: + func_80179B28(D_801A99C8); + D_801A99C8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A99CC, + D_801A99D0 ? 0x48 : 0x40); + (*(s16*)&D_801AB054) = 1; + break; + case 2: + func_80179B28(D_801A99C8); + if (D_801A99E0 != 0) { + D_801A95B0 = D_801A99E0; + D_801A99E0 = 0; + (*(s16*)&D_801AB054) = 3; + return; + } + (*(s16*)&D_801AB054) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AB054) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AB054) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AB054) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AB054) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AB054) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AB054) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AB054) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AB054) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AB054) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AB054) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AB054) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x1B: + D_801A9A00 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AB054) = 4; + D_801A95B4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AB054) = 5; + D_801A99F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A99F4 = (s32)func_8017A3B0; + (*(s16*)&D_801AB054) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x24: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AB054) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AB054) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AB054) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AB054) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AB054) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AB054) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AB054) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AB054) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AB054) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A99E4); + (*(s16*)&D_801AB054) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A99E4); + (*(s16*)&D_801AB054) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A99E4); + (*(s16*)&D_801AB054) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A99E4); + (*(s16*)&D_801AB054) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + break; + case 0x4E: + D_801A9A08 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x2B: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AB054) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AAFDC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AB054) = 3; + break; + case 0x34: + (*(s16*)&D_801AB054) = 3; + D_801A95B0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A99E0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AB054) = 3; + D_801A95B0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AB054) = 3; + D_801A95B0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A95B0 = *(s32 *)(D_801A95B0 + 4); + return; + case 0x37: + (*(s16*)&D_801AB054) = 3; + D_801A99CC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A99D0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AB054) = 3; + D_801A99D4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A99D8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AB054) = 3; + D_801A99CC = w1; + D_801A99D0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AB054) = 3; + D_801A99D4 = w2; + D_801A99D8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + case 0x43: + D_801A99F4 = (s32)func_8017A3D8; + D_801A99FC = 0; + (*(s16*)&D_801AB054) = 5; + D_801A99F8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AB054) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AB054) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AB054) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A9A0C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AB054) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A9A0C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AB054) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A9A0C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AB054) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A9A0C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AB054) = 3; + break; + default: + break; + } +Lend: + D_801A95B0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A99DC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A99DC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A99DC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A99DC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A9A04; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A9A04 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A99C0; + +s32 func_8017A3B0(void) { + switch (D_801A99C0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A99FC; +extern short D_801A99F8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A99FC) { + case 0: + func_800D0CA0(1); + D_801A99FC = D_801A99FC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A99F8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A99FC = D_801A99FC + 1; + if (D_801A99FC < 0x1E) { + return 0; + } + D_801A99FC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A9A3C; + extern s16 D_801A9A3E; + extern s16 D_801A9A40; + extern s16 D_801A9A34; + extern s16 D_801A9A36; + extern s16 D_801A9A38; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A9A3C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A9A3E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9A40, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9A34, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9A36, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9A38, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A99C4; +extern u16 D_801A9A44; +extern u16 D_801A9A46; +extern u16 D_801A9A48; +extern s16 D_801AAFE0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AAFE0 = 0; + D_801A99C4 = 0; + D_801A9A44 = D_80126B5E; + D_801A9A46 = D_80126B62; + D_801A9A48 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186BC4[]; + extern s16 D_801A9A3C; + extern s16 D_801A9A34; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186BC4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186BC4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A9A3C; + s16 *p78C = &D_801A9A34; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AAFE0 = 1; + D_801A99C4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A99E4; + extern SV4_8017B368 D_801A99EC; + extern s16 D_801A9A3C; + extern s16 D_801A9A34; + extern u16 D_80186BC4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A99E4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A99EC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80186BC4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80186BC4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A9A3C) = loc0; + (*(SV4_8017B368 *)&D_801A9A34) = loc1; + D_801AAFE0 = 1; + D_801A99C4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186BC4[]; + extern s16 D_801A9A3C; + extern s16 D_801A9A3E; + extern s16 D_801A9A40; + extern s16 D_801A9A34; + extern s16 D_801A9A36; + extern s16 D_801A9A38; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186BC4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186BC4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A9A3C; + s16 *p78C = &D_801A9A34; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A9A3E; + v798 = D_801A9A40; + v78C = *p78C; + v78E = D_801A9A36; + v790 = D_801A9A38; + __asm__ __volatile__(""); + D_801AAFE0 = 1; + D_801A99C4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A99C4; +extern s16 D_801A9A3C; +extern s16 D_801A9A3E; +extern s16 D_801A9A40; +extern s16 D_801A9A34; +extern s16 D_801A9A36; +extern s16 D_801A9A38; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A99C4 = 0; + D_801A9A3C = (s16) D_80114F30; + D_801A9A3E = (s16) D_80114F34; + D_801A9A40 = (s16) D_80114F38; + D_801A9A34 = (s16) D_80114F24; + D_801A9A36 = (s16) D_80114F28; + D_801A9A38 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A9A54; +extern s16 D_801A9A56; +extern s16 D_801A9A58; +extern s16 D_801A9A5C; +extern s16 D_801A9A5E; +extern s16 D_801A9A60; + +void func_8017B824(void) { + D_801A9A54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A9A56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A9A58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A9A5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A9A5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A9A60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A9A54; +extern s16 D_801A9A56; +extern s16 D_801A9A58; +extern s16 D_801A9A5C; +extern s16 D_801A9A5E; +extern s16 D_801A9A60; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A9A54; + D_80114F34 = D_801A9A56; + D_80114F38 = D_801A9A58; + D_80114F24 = D_801A9A5C; + D_80114F28 = D_801A9A5E; + D_80114F2C = D_801A9A60; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A9A3C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9A34) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A9A3C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A9A34) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A9A44; +extern u16 D_801A9A46; +extern u16 D_801A9A48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A99C4; +extern short D_801A9A4C; +extern short D_801A9A4E; +extern short D_801A9A50; +extern s16 D_801A9A3C; +extern s16 D_801A9A3E; +extern s16 D_801A9A40; +extern s16 D_801A9A34; +extern s16 D_801A9A36; +extern s16 D_801A9A38; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9A44); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9A46); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9A48); + (*(s16 *)&D_801A9A4C) = buf[0]; + (*(s16 *)&D_801A9A4E) = buf[1]; + (*(s16 *)&D_801A9A50) = buf[2]; + D_801A9A3C = D_80114F30 + buf[0]; + D_801A99C4 = 0; + D_801A9A3E = D_80114F34 + buf[1]; + D_801A9A40 = D_80114F38 + buf[2]; + D_801A9A34 = D_80114F24 + buf[0]; + D_801A9A36 = D_80114F28 + buf[1]; + D_801A9A38 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A99E4; +extern SV4 D_801A99EC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A99EC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A99E4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A99EC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A99EC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A99E4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A99EC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A9A0C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A9A0C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A99C4; +extern s16 D_801AAFE0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A99C4 = D_801A99C4 + 1; + if (D_801A99C4 >= 0x1F) { + D_801AAFE0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A99C4; +extern s16 D_801AAFE0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A99C4 = D_801A99C4 + 1; + if (0x18 < D_801A99C4) { + func_8012A4BC(); + D_801AAFE0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A99C4; +extern void (*D_801A9A08)(void); +extern short D_801A9A4C; +extern short D_801A9A4E; +extern short D_801A9A50; +extern s16 D_801AAFE0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A99C4 = D_801A99C4 + 1; + if (D_801A99C4 >= 0x19) { + if (D_801A9A08 != 0) { + (*D_801A9A08)(); + } else { + D_80114F30 = D_80114F30 + D_801A9A4C; + D_80114F34 = D_80114F34 + D_801A9A4E; + D_80114F38 = D_80114F38 + D_801A9A50; + D_80114F24 = D_80114F24 + D_801A9A4C; + D_80114F28 = D_80114F28 + D_801A9A4E; + D_80114F2C = D_80114F2C + D_801A9A50; + func_8012A4BC(); + } + D_801AAFE0 = 0; + } +} + + + +extern void (*D_80186C64[])(void); + +void func_8017BE60(void *a0) { + D_80186C64[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017CECC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D258); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D4D0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D618); + + +extern void (*D_80186D80[])(void); + +void func_8017D798(void *a0) { + D_80186D80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D7D4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D820); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D914); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017D994); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DA48); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DAB4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DB40); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DB60); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DBB4); + + +extern void (*D_80186DD8[])(void); + +void func_8017DBF0(void *a0) { + D_80186DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DC2C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DC7C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DCD8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DD5C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DEC4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017DF10); + + +extern void (*D_80186DEC[])(void); + +void func_8017E21C(void *a0) { + D_80186DEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E258); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E298); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E308); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E468); + + +extern void (*D_80186E00[])(void); + +void func_8017E4BC(void *a0) { + D_80186E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E4F8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E5AC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E608); + + +extern void (*D_80186F94[])(void); + +void func_8017E778(void *a0) { + D_80186F94[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E7B4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E82C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80186F9C[])(void); + +void func_8017E850(void *a0) { + D_80186F9C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E88C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E8CC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E948(void) { + func_800D1EBC(); + } + + + +extern void (*D_80186FA8[])(void); + +void func_8017E968(void *a0) { + D_80186FA8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017E9A4); + + +extern void (*D_80186FB4[])(void); + +void func_8017EA18(void *a0) { + D_80186FB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EA54); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EACC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EB0C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EB34); + + +extern void (*D_80186FD4[])(void); + +void func_8017EB5C(void *a0) { + D_80186FD4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EB98); + +void func_8017EBE0(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EBE8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EC64); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017ECA0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017ECC8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017ED64); + + +extern void (*D_80186FE4[])(void); + +void func_8017EE20(void *a0) { + D_80186FE4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017EE5C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F000); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F1A4); + +extern s32 func_800D0F8C(s32 arg); + s32 func_8017F204(void) { + return func_800D0F8C(0x60) != 0; + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F224); + +void func_8017F2E4(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F2EC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F324); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F3F4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F450); + + +extern void (*D_801870F0[])(void); + +void func_8017F468(void *a0) { + D_801870F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F4A4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F4D8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F628); + + +extern void (*D_8018712C[])(void); + +void func_8017F714(void *a0) { + D_8018712C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F750); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F834); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F8A0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017F98C); + + +extern void (*D_80199760[])(void); + +void func_8017FC8C(void *a0) { + D_80199760[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_8019977C[])(void); + +void func_8017FCC8(void *a0) { + D_8019977C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017FD04); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8017FEBC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180020); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180418); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801804B4); + +void func_8018050C(void *a0) { + s32 *p = *(s32 **)((s32)a0 + 0x20); + p[1] = p[1] | 0x50000000; + *(s16 *)((s32)p + 0x1E) = 0; + *(s16 *)((s32)p + 0x18) = 0; + *(s16 *)((s32)p + 0x1A) = 0; + *(s16 *)((s32)p + 0x1C) = 0; + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180548); + +void func_801805A8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801805B0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180604); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018066C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801806B8); + +void func_80180730(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180738); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018079C); + + +extern void (*D_8019D328[])(void); + +void func_801807DC(void *a0) { + D_8019D328[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180818); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801808EC); + +void func_80180914(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018091C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180A68); + +extern void func_8012C218(void *a0); + void func_80180B88(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)a0 + 0xCC)); + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180BB4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180BC4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180BD4); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_80180C14(s32 arg0) { + s32 temp_v0 = *(s32 *)(arg0 + 0xdc); + ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +extern s16 func_80174764(void); + s32 func_80180C48(void) { + return ((u32)((s32 (*)(void))func_80174764)() == 1); + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180C6C); + + +extern void (*D_8019D350[])(void); + +void func_80180CD0(void *a0) { + D_8019D350[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180D0C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180D94); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180E54); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180EC4); + + +extern void (*D_801A1380[])(void); + +void func_80180FBC(void *a0) { + D_801A1380[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80180FF8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801810B0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181154); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801A69B8; + void func_801811DC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_8012A828((int)arg0, (int)&D_801A69B8); + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181208); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181248); + +extern s32 func_8012BEE8(s32 a0); + void func_80181288(s32 arg0) { + if (((s32 (*)(void))func_8012BEE8)() != 0) { + *(s16 *)(arg0 + 0x2) = 0x7; + } + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801812BC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181310); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801813CC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801814A8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181540); + +void func_80181554(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018155C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018159C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801816DC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018175C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801818E8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181ABC); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181BA4); + + +extern void (*D_801A6E0C[])(void); + +void func_80181C1C(void *a0) { + D_801A6E0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181C58); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181D54); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80181FE4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182178); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801821D0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018224C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182290); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801822F0); + +void func_8018236C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182374); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182408); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182460); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182564); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182724); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801827B4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182800); + +void func_80182984(void) { +} + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018298C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182A38); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182AC0); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182B20); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182BA8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182C4C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182C90); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182D08); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182D78); + + +extern void (*D_801A700C[])(void); + +void func_80182DAC(void *a0) { + D_801A700C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182DE8); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182EC0); + +void func_80182EE8(void) { +} + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801A6FBC; + void func_80182EF0(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + func_80178CBC(a0, &D_801A6FBC); + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182F1C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80182F5C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_8018301C); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80183088); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_80183098); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801830A8); + +extern void func_800296F8(void *a0); + s32 func_801830C0(s32 arg0) { + return ((s32 (*)(void *))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_80178D40", func_801830E4); + + diff --git a/src/ov_SC04_002/ov_SC04_002_jr_801734BC.c b/src/ov_SC04_002/ov_SC04_002_jr_801734BC.c index 1be6ac1d0..2df838aaf 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_801734BC.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_801734BC.c @@ -3084,1700 +3084,3 @@ void func_80178D18(void) { D_801C1734 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C0CEC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C0CEC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C0CEC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C0CEC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C0D14; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C0D14 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C0CD0; - -s32 func_8017A3B0(void) { - switch (D_801C0CD0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C0D0C; -extern short D_801C0D08; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C0D0C) { - case 0: - func_800D0CA0(1); - D_801C0D0C = D_801C0D0C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C0D08; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C0D0C = D_801C0D0C + 1; - if (D_801C0D0C < 0x1E) { - return 0; - } - D_801C0D0C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C0D4C; - extern s16 D_801C0D4E; - extern s16 D_801C0D50; - extern s16 D_801C0D44; - extern s16 D_801C0D46; - extern s16 D_801C0D48; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C0D4C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C0D4E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C0D50, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C0D44, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C0D46, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C0D48, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C0CD4; -extern u16 D_801C0D54; -extern u16 D_801C0D56; -extern u16 D_801C0D58; -extern s16 D_801C16B8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C16B8 = 0; - D_801C0CD4 = 0; - D_801C0D54 = D_80126B5E; - D_801C0D56 = D_80126B62; - D_801C0D58 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018BD30[]; - extern s16 D_801C0D4C; - extern s16 D_801C0D44; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018BD30[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018BD30[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C0D4C; - s16 *p78C = &D_801C0D44; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C16B8 = 1; - D_801C0CD4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C0CF4; - extern SV4_8017B368 D_801C0CFC; - extern s16 D_801C0D4C; - extern s16 D_801C0D44; - extern u16 D_8018BD30; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C0CF4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C0CFC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018BD30)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018BD30)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C0D4C) = loc0; - (*(SV4_8017B368 *)&D_801C0D44) = loc1; - D_801C16B8 = 1; - D_801C0CD4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018BD30[]; - extern s16 D_801C0D4C; - extern s16 D_801C0D4E; - extern s16 D_801C0D50; - extern s16 D_801C0D44; - extern s16 D_801C0D46; - extern s16 D_801C0D48; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018BD30[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018BD30[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C0D4C; - s16 *p78C = &D_801C0D44; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C0D4E; - v798 = D_801C0D50; - v78C = *p78C; - v78E = D_801C0D46; - v790 = D_801C0D48; - __asm__ __volatile__(""); - D_801C16B8 = 1; - D_801C0CD4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C0CD4; -extern s16 D_801C0D4C; -extern s16 D_801C0D4E; -extern s16 D_801C0D50; -extern s16 D_801C0D44; -extern s16 D_801C0D46; -extern s16 D_801C0D48; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C0CD4 = 0; - D_801C0D4C = (s16) D_80114F30; - D_801C0D4E = (s16) D_80114F34; - D_801C0D50 = (s16) D_80114F38; - D_801C0D44 = (s16) D_80114F24; - D_801C0D46 = (s16) D_80114F28; - D_801C0D48 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C0D64; -extern s16 D_801C0D66; -extern s16 D_801C0D68; -extern s16 D_801C0D6C; -extern s16 D_801C0D6E; -extern s16 D_801C0D70; - -void func_8017B824(void) { - D_801C0D64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C0D66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C0D68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C0D6C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C0D6E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C0D70 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C0D64; -extern s16 D_801C0D66; -extern s16 D_801C0D68; -extern s16 D_801C0D6C; -extern s16 D_801C0D6E; -extern s16 D_801C0D70; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C0D64; - D_80114F34 = D_801C0D66; - D_80114F38 = D_801C0D68; - D_80114F24 = D_801C0D6C; - D_80114F28 = D_801C0D6E; - D_80114F2C = D_801C0D70; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C0D4C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C0D44) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C0D4C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C0D44) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C0D54; -extern u16 D_801C0D56; -extern u16 D_801C0D58; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C0CD4; -extern short D_801C0D5C; -extern short D_801C0D5E; -extern short D_801C0D60; -extern s16 D_801C0D4C; -extern s16 D_801C0D4E; -extern s16 D_801C0D50; -extern s16 D_801C0D44; -extern s16 D_801C0D46; -extern s16 D_801C0D48; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C0D54); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C0D56); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C0D58); - (*(s16 *)&D_801C0D5C) = buf[0]; - (*(s16 *)&D_801C0D5E) = buf[1]; - (*(s16 *)&D_801C0D60) = buf[2]; - D_801C0D4C = D_80114F30 + buf[0]; - D_801C0CD4 = 0; - D_801C0D4E = D_80114F34 + buf[1]; - D_801C0D50 = D_80114F38 + buf[2]; - D_801C0D44 = D_80114F24 + buf[0]; - D_801C0D46 = D_80114F28 + buf[1]; - D_801C0D48 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C0CF4; -extern SV4 D_801C0CFC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C0CFC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C0CF4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C0CFC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C0CFC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C0CF4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C0CFC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C0D1C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C0D1C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C0CD4; -extern s16 D_801C16B8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C0CD4 = D_801C0CD4 + 1; - if (D_801C0CD4 >= 0x1F) { - D_801C16B8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C0CD4; -extern s16 D_801C16B8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C0CD4 = D_801C0CD4 + 1; - if (0x18 < D_801C0CD4) { - func_8012A4BC(); - D_801C16B8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C0CD4; -extern void (*D_801C0D18)(void); -extern short D_801C0D5C; -extern short D_801C0D5E; -extern short D_801C0D60; -extern s16 D_801C16B8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C0CD4 = D_801C0CD4 + 1; - if (D_801C0CD4 >= 0x19) { - if (D_801C0D18 != 0) { - (*D_801C0D18)(); - } else { - D_80114F30 = D_80114F30 + D_801C0D5C; - D_80114F34 = D_80114F34 + D_801C0D5E; - D_80114F38 = D_80114F38 + D_801C0D60; - D_80114F24 = D_80114F24 + D_801C0D5C; - D_80114F28 = D_80114F28 + D_801C0D5E; - D_80114F2C = D_80114F2C + D_801C0D60; - func_8012A4BC(); - } - D_801C16B8 = 0; - } -} - - - -extern void (*D_8018BDD0[])(void); - -void func_8017BE60(void *a0) { - D_8018BDD0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017CE3C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017CEF4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D098); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D0B8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D1E8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D574); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D7EC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017D934); - - -extern void (*D_8018BF90[])(void); - -void func_8017DAB4(void *a0) { - D_8018BF90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DAF0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DC30); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DCB0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DD64); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DDD0); - -extern void func_8012C218(void *a0); - void func_8017DE5C(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DE7C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DED0); - - -extern void (*D_8018BFE8[])(void); - -void func_8017DF0C(void *a0) { - D_8018BFE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DF48); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DF98); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017DFF4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E078); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E1E0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E22C); - - -extern void (*D_8018BFFC[])(void); - -void func_8017E538(void *a0) { - D_8018BFFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E574); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E5B4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E624); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E6B0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E784); - - -extern void (*D_8018C010[])(void); - -void func_8017E7D8(void *a0) { - D_8018C010[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E814); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E8C8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017E924); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017EA94); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017EAEC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017EB34); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017EBBC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017EC20); - - -extern void (*D_8018C074[])(void); - -void func_8017EC70(void *a0) { - D_8018C074[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017ECAC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017ED68); - -void func_8017F104(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); - *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F120); - - -extern void (*D_8018C0AC[])(void); - -void func_8017F160(void *a0) { - D_8018C0AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F19C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F470); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F4EC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F534); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F55C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F6B8); - -void func_8017F72C(s32 *a0) { - *(s32 *)((s32)a0 + 0x0) = 0x80404080; - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F73C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F7C8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F838); - - -extern void (*D_8018C454[])(void); - -void func_8017F8A8(void *a0) { - D_8018C454[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F8E4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017F928(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017F94C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017F98C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017FA08(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018C468[])(void); - -void func_8017FA28(void *a0) { - D_8018C468[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FA64); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FAD8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FB00); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FB28); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FBC4); - - -extern void (*D_8018C484[])(void); - -void func_8017FC5C(void *a0) { - D_8018C484[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FC98); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FD38); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FE28); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FFC0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8017FFF0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", listCdBuffer); - - -extern s32 func_800D0F8C(s32 arg); - s32 func_80180070(void) { - return func_800D0F8C(0x61) != 0; - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180090); - -void func_80180150(void) { -} - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_8018C4F0; - -void func_80180158(void *arg0) { - func_80178CBC((s32)arg0, (s32)&D_8018C4F0); - *(s16 *)((s32)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180190); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180258); - - -s32 func_801802B4(void) { - return 85; -} - - - -extern void (*D_8018C570[])(void); - -void func_801802BC(void *a0) { - D_8018C570[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801802F8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018032C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018047C); - - -extern void (*D_8018C5AC[])(void); - -void func_80180568(void *a0) { - D_8018C5AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801805A4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180688); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801806F4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801807E0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180838); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180888); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801808F4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180A48); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180A9C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180AC0); - - -extern void (*D_80198D20[])(void); - -void func_80180B04(void *a0) { - D_80198D20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180B40); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180C8C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180D04); - - -void func_80180D34(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180D48); - - -extern void (*D_80198D58[])(void); - -void func_80180DB0(void *a0) { - D_80198D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180DEC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180E38); - -void func_80180E80(void) { -} - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180E88); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80180FEC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181368); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801814F4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018167C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181794); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181810); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181878); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801818DC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181948); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801819EC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181B0C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181C20); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181C7C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181CE8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181D44); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181F40); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181FA4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80181FE0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182044); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182180); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801821C4); - -extern void func_8012A8B0(u8 *a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern M2C_UNK D_801A8A4C; - -void func_801822EC(void * arg0) { - ((void (*)(void *, void *))func_8012A8B0)(arg0, &D_801A8A4C); - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0xA); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182328); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801823BC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182424); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801824A4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182564); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182618); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801826E8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182808); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801828A4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182960); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801829E8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182A6C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182BA4); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8002AC00(s32 arg0); - -void func_80182C30(void) { - func_8002D4C8(0x853, 0); - func_8002AC00(0x13); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182C5C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182CBC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182D2C); - - -extern void (*D_801A1F2C[])(void); - -void func_80182E64(void *a0) { - D_801A1F2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182EA0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80182FBC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183008); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801830EC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801831B8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801832C4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018331C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801833DC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183494); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183548); - -extern void func_8012B23C(s32 arg0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_801835E0(s32 param_1) { - ((void (*)(s32))func_8012B23C)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 1); - } - - -extern void func_8012B21C(void *a0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183614(s32 param_1) { - ((void (*)(s32))func_8012B21C)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183648); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183710); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183790); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183820); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183904); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018395C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183A88); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183BE4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183C54); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183D94); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183E68); - -void func_80183F1C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183F24); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80183FE8); - - -extern void (*D_801A9210[])(void); - -void func_80184160(void *a0) { - D_801A9210[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_801A9224[])(void); - -void func_8018419C(void *a0) { - D_801A9224[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801A91FC; -extern s32 D_801A9208; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_801841D8(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801A91FC); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801A9208, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801A9218; - -void func_801842B8(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801A9218); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801A94CC; - -void func_801843D4(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801A94CC); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184430); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801B10C4; - -void func_801844A0(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801B10C4)) { - func_8012A828(arg0, &D_801B10C4); - } -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801844E8); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801B154C; - -void func_80184574(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801B154C); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801845B4); - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_801846B4 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_801846B4(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801B14A4; - -s32 func_80184604(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_801846B4(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801B14A4); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801B1264; - -void func_801846B4(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801B1264); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_80184710(void *a0) { - *(s16 *)((char *)a0 + 0x2) = 0x5; - *(s32 *)((char *)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184724); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801848D8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184920); - -extern void (*D_801A9604[])(void); - -void func_80184A6C(void *a0) { - D_801A9604[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184AA8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184B30); - - -extern void func_8012B2CC(s32 a0); -extern void func_8012B200(u8 *a0); -extern void func_8012B178(s32 a0, s32 a1); - -void func_80184C08(u8 *a0) { - u8 *p = *(u8 **)(a0 + 0x20); - u16 v = *(u16 *)(a0 + 0xFC); - *(s16 *)(a0 + 0x2) = 2; - *(s32 *)(a0 + 0x1C) = 0x50; - *(s16 *)(p + 0x12) = v; - func_8012B2CC((s32)a0); - func_8012B200(a0); - func_8012B178((s32)a0, 0xFFF00000); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184C60); - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80184CEC(u8 * arg0) { - ((void (*)(s32 *, s32))func_80016714)(*(s32 *)((u8 *)arg0 + 0xcc), 0x38); - ((void (*)(u8 *))func_8012C218)(arg0); - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184D24); - -extern s32 func_8012BEE8(s32 arg); - extern void func_801845B4(s32 arg); - void func_80184D90(s32 arg0) { - if (func_8012BEE8(arg0)) { - func_801845B4(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184DC8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184E2C); - -void func_80184E84(void) { -} - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184E8C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184F44); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80184FB4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185128); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185264); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185314); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018535C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801853F8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018543C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185620); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185668); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801858A0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801858E4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185A68); - -extern void func_8012CBCC(s32 a0); - void func_80185AA8(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - *(s16 *)((u8 *)a0 + 0x2) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185AE0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185B38); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185BA0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185BD8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185C90); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185CC8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185D7C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185DA8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185F98); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80185FD8); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018603C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186078); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801860F8); - -extern void func_8002A04C(s32 a0); - extern void func_8012C098(void); - void func_8018612C(s32 a0) { - ((void (*)(s32 *))func_8002A04C)((s32 *)a0); - ((s32 (*)(s32))func_8012C098)(a0); - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018615C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801861D0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801862F0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801863A4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186544); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186638); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801867A0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018691C); - - -extern void (*D_801B5108[])(void); - -void func_80186AD8(void *a0) { - D_801B5108[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186B14); - -void func_80186B70(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186B84); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186D94); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80186DD4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018710C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187174); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801871EC); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018739C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187604); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801878B0); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_801879FC); - - -extern void (*D_801B5160[])(void); - -void func_80187BD8(void *a0) { - D_801B5160[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187C14); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187C90); - - -extern void (*D_801BE37C[])(void); - -void func_80187CD0(void *a0) { - D_801BE37C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80187E08); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80188098); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_8018822C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80188284); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80188300); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_801734BC", func_80188344); - diff --git a/src/ov_SC04_002/ov_SC04_002_jr_80178D40.c b/src/ov_SC04_002/ov_SC04_002_jr_80178D40.c new file mode 100644 index 000000000..bba3d8e45 --- /dev/null +++ b/src/ov_SC04_002/ov_SC04_002_jr_80178D40.c @@ -0,0 +1,5146 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018B5D8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C0040; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018B5CC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018B610[]; +extern unsigned short D_8018B618[]; +extern unsigned short D_8018B620[]; +extern unsigned char D_801C0048[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C0040; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018B628[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C017C; +extern M2C_UNK D_801C0180; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0108; +extern void (*D_8018B658[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C0184[]; +extern u8 D_801C018C[]; +extern u8 D_801C013C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018B660[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018B67C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018B684[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018B6EC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018B690; +extern u8 D_8018B69C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018B720[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018B728[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018B77C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018B7B0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018B7A0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018B7CC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018B844[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018B84C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018B854[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018B85C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018B864[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018B86C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018B878[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018B884[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018B890[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018B8A0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018B8B0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018B8B8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018B8C0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018B8C8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018B8D0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018B8D8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018B8E0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018B8E8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018B8F0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018B8F8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018B900[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018B908[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018B910[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018B918[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018B920[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018B928[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018B930[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018B938[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018B940[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018B948[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018B950[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018B958[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018B960[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018B9A4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018B968; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018B9D4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018BA10[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018BA68[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018BA78[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018BA80[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018BBE8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018BBF4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BF73C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C16B8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C08C0; +extern short D_801C1734; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C1734) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C1734)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C08C0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C1734) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C1688 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C1688 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C1734) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C1734) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C0D1C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C08C4; + extern s32 D_801C0CD8; + extern s16 D_801C0CDC; + extern s16 D_801C0CE0; + extern s16 D_801C0CE4; + extern s16 D_801C0CE8; + extern s32 D_801C0CF0; + extern s32 D_801C0CF4; + extern s32 D_801C0D04; + extern s16 D_801C0D08; + extern s16 D_801C0D0C; + extern s32 D_801C0D10; + extern s32 D_801C0D18; + extern s32 D_801C0D1C[10]; + extern s32 D_801C15D0; + extern s16 D_801C1688; + extern s32 D_801C16B4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C1688; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C0CD8); + D_801C0CD8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C0CE4, D_801C0CE8 ? 0x48 : 0x40); + (*(s16*)&D_801C1734) = 2; + break; + case 0: + func_80179B28(D_801C0CD8); + D_801C0CD8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C0CDC, D_801C0CE0 ? 0x48 : 0x40); + (*(s16*)&D_801C1734) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C15D0 != 0) { + func_80179B28(D_801C0CD8); + D_801C0CD8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C0CDC, D_801C0CE0 ? 0x48 : 0x40); + (*(s16*)&D_801C1734) = 1; + } else { + (*(s16*)&D_801C1734) = 3; + } + break; + case 0x32: + func_80179B28(D_801C0CD8); + D_801C0CD8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C0CDC, + D_801C0CE0 ? 0x48 : 0x40); + (*(s16*)&D_801C1734) = 1; + break; + case 2: + func_80179B28(D_801C0CD8); + if (D_801C0CF0 != 0) { + D_801C08C0 = D_801C0CF0; + D_801C0CF0 = 0; + (*(s16*)&D_801C1734) = 3; + return; + } + (*(s16*)&D_801C1734) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C1734) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C1734) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C1734) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C1734) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C1734) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C1734) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C1734) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C1734) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C1734) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C1734) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C1734) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x1B: + D_801C0D10 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C1734) = 4; + D_801C08C4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C1734) = 5; + D_801C0D04 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C0D04 = (s32)func_8017A3B0; + (*(s16*)&D_801C1734) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x24: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C1734) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C1734) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C1734) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C1734) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C1734) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C1734) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C1734) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C1734) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C1734) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C0CF4); + (*(s16*)&D_801C1734) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C0CF4); + (*(s16*)&D_801C1734) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C0CF4); + (*(s16*)&D_801C1734) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C0CF4); + (*(s16*)&D_801C1734) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + break; + case 0x4E: + D_801C0D18 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x2B: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C1734) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C16B4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C1734) = 3; + break; + case 0x34: + (*(s16*)&D_801C1734) = 3; + D_801C08C0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C0CF0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C1734) = 3; + D_801C08C0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C1734) = 3; + D_801C08C0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C08C0 = *(s32 *)(D_801C08C0 + 4); + return; + case 0x37: + (*(s16*)&D_801C1734) = 3; + D_801C0CDC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C0CE0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C1734) = 3; + D_801C0CE4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C0CE8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C1734) = 3; + D_801C0CDC = w1; + D_801C0CE0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C1734) = 3; + D_801C0CE4 = w2; + D_801C0CE8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + case 0x43: + D_801C0D04 = (s32)func_8017A3D8; + D_801C0D0C = 0; + (*(s16*)&D_801C1734) = 5; + D_801C0D08 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C1734) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C1734) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C1734) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C0D1C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C1734) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C0D1C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C1734) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C0D1C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C1734) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C0D1C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C1734) = 3; + break; + default: + break; + } +Lend: + D_801C08C0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C0CEC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C0CEC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C0CEC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C0CEC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C0D14; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C0D14 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C0CD0; + +s32 func_8017A3B0(void) { + switch (D_801C0CD0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C0D0C; +extern short D_801C0D08; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C0D0C) { + case 0: + func_800D0CA0(1); + D_801C0D0C = D_801C0D0C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C0D08; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C0D0C = D_801C0D0C + 1; + if (D_801C0D0C < 0x1E) { + return 0; + } + D_801C0D0C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C0D4C; + extern s16 D_801C0D4E; + extern s16 D_801C0D50; + extern s16 D_801C0D44; + extern s16 D_801C0D46; + extern s16 D_801C0D48; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C0D4C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C0D4E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C0D50, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C0D44, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C0D46, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C0D48, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C0CD4; +extern u16 D_801C0D54; +extern u16 D_801C0D56; +extern u16 D_801C0D58; +extern s16 D_801C16B8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C16B8 = 0; + D_801C0CD4 = 0; + D_801C0D54 = D_80126B5E; + D_801C0D56 = D_80126B62; + D_801C0D58 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018BD30[]; + extern s16 D_801C0D4C; + extern s16 D_801C0D44; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018BD30[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018BD30[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C0D4C; + s16 *p78C = &D_801C0D44; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C16B8 = 1; + D_801C0CD4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C0CF4; + extern SV4_8017B368 D_801C0CFC; + extern s16 D_801C0D4C; + extern s16 D_801C0D44; + extern u16 D_8018BD30; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C0CF4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C0CFC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018BD30)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018BD30)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C0D4C) = loc0; + (*(SV4_8017B368 *)&D_801C0D44) = loc1; + D_801C16B8 = 1; + D_801C0CD4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018BD30[]; + extern s16 D_801C0D4C; + extern s16 D_801C0D4E; + extern s16 D_801C0D50; + extern s16 D_801C0D44; + extern s16 D_801C0D46; + extern s16 D_801C0D48; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018BD30[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018BD30[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C0D4C; + s16 *p78C = &D_801C0D44; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C0D4E; + v798 = D_801C0D50; + v78C = *p78C; + v78E = D_801C0D46; + v790 = D_801C0D48; + __asm__ __volatile__(""); + D_801C16B8 = 1; + D_801C0CD4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C0CD4; +extern s16 D_801C0D4C; +extern s16 D_801C0D4E; +extern s16 D_801C0D50; +extern s16 D_801C0D44; +extern s16 D_801C0D46; +extern s16 D_801C0D48; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C0CD4 = 0; + D_801C0D4C = (s16) D_80114F30; + D_801C0D4E = (s16) D_80114F34; + D_801C0D50 = (s16) D_80114F38; + D_801C0D44 = (s16) D_80114F24; + D_801C0D46 = (s16) D_80114F28; + D_801C0D48 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C0D64; +extern s16 D_801C0D66; +extern s16 D_801C0D68; +extern s16 D_801C0D6C; +extern s16 D_801C0D6E; +extern s16 D_801C0D70; + +void func_8017B824(void) { + D_801C0D64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C0D66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C0D68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C0D6C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C0D6E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C0D70 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C0D64; +extern s16 D_801C0D66; +extern s16 D_801C0D68; +extern s16 D_801C0D6C; +extern s16 D_801C0D6E; +extern s16 D_801C0D70; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C0D64; + D_80114F34 = D_801C0D66; + D_80114F38 = D_801C0D68; + D_80114F24 = D_801C0D6C; + D_80114F28 = D_801C0D6E; + D_80114F2C = D_801C0D70; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C0D4C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C0D44) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C0D4C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C0D44) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C0D54; +extern u16 D_801C0D56; +extern u16 D_801C0D58; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C0CD4; +extern short D_801C0D5C; +extern short D_801C0D5E; +extern short D_801C0D60; +extern s16 D_801C0D4C; +extern s16 D_801C0D4E; +extern s16 D_801C0D50; +extern s16 D_801C0D44; +extern s16 D_801C0D46; +extern s16 D_801C0D48; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C0D54); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C0D56); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C0D58); + (*(s16 *)&D_801C0D5C) = buf[0]; + (*(s16 *)&D_801C0D5E) = buf[1]; + (*(s16 *)&D_801C0D60) = buf[2]; + D_801C0D4C = D_80114F30 + buf[0]; + D_801C0CD4 = 0; + D_801C0D4E = D_80114F34 + buf[1]; + D_801C0D50 = D_80114F38 + buf[2]; + D_801C0D44 = D_80114F24 + buf[0]; + D_801C0D46 = D_80114F28 + buf[1]; + D_801C0D48 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C0CF4; +extern SV4 D_801C0CFC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C0CFC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C0CF4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C0CFC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C0CFC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C0CF4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C0CFC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C0D1C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C0D1C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C0CD4; +extern s16 D_801C16B8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C0CD4 = D_801C0CD4 + 1; + if (D_801C0CD4 >= 0x1F) { + D_801C16B8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C0CD4; +extern s16 D_801C16B8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C0CD4 = D_801C0CD4 + 1; + if (0x18 < D_801C0CD4) { + func_8012A4BC(); + D_801C16B8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C0CD4; +extern void (*D_801C0D18)(void); +extern short D_801C0D5C; +extern short D_801C0D5E; +extern short D_801C0D60; +extern s16 D_801C16B8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C0CD4 = D_801C0CD4 + 1; + if (D_801C0CD4 >= 0x19) { + if (D_801C0D18 != 0) { + (*D_801C0D18)(); + } else { + D_80114F30 = D_80114F30 + D_801C0D5C; + D_80114F34 = D_80114F34 + D_801C0D5E; + D_80114F38 = D_80114F38 + D_801C0D60; + D_80114F24 = D_80114F24 + D_801C0D5C; + D_80114F28 = D_80114F28 + D_801C0D5E; + D_80114F2C = D_80114F2C + D_801C0D60; + func_8012A4BC(); + } + D_801C16B8 = 0; + } +} + + + +extern void (*D_8018BDD0[])(void); + +void func_8017BE60(void *a0) { + D_8018BDD0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017CE3C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017CEF4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D098); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D0B8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D1E8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D574); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D7EC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017D934); + + +extern void (*D_8018BF90[])(void); + +void func_8017DAB4(void *a0) { + D_8018BF90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DAF0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DC30); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DCB0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DD64); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DDD0); + +extern void func_8012C218(void *a0); + void func_8017DE5C(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DE7C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DED0); + + +extern void (*D_8018BFE8[])(void); + +void func_8017DF0C(void *a0) { + D_8018BFE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DF48); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DF98); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017DFF4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E078); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E1E0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E22C); + + +extern void (*D_8018BFFC[])(void); + +void func_8017E538(void *a0) { + D_8018BFFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E574); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E5B4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E624); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E6B0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E784); + + +extern void (*D_8018C010[])(void); + +void func_8017E7D8(void *a0) { + D_8018C010[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E814); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E8C8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017E924); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017EA94); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017EAEC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017EB34); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017EBBC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017EC20); + + +extern void (*D_8018C074[])(void); + +void func_8017EC70(void *a0) { + D_8018C074[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017ECAC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017ED68); + +void func_8017F104(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); + *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F120); + + +extern void (*D_8018C0AC[])(void); + +void func_8017F160(void *a0) { + D_8018C0AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F19C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F470); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F4EC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F534); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F55C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F6B8); + +void func_8017F72C(s32 *a0) { + *(s32 *)((s32)a0 + 0x0) = 0x80404080; + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F73C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F7C8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F838); + + +extern void (*D_8018C454[])(void); + +void func_8017F8A8(void *a0) { + D_8018C454[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F8E4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017F928(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017F94C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017F98C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017FA08(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018C468[])(void); + +void func_8017FA28(void *a0) { + D_8018C468[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FA64); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FAD8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FB00); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FB28); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FBC4); + + +extern void (*D_8018C484[])(void); + +void func_8017FC5C(void *a0) { + D_8018C484[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FC98); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FD38); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FE28); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FFC0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8017FFF0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", listCdBuffer); + + +extern s32 func_800D0F8C(s32 arg); + s32 func_80180070(void) { + return func_800D0F8C(0x61) != 0; + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180090); + +void func_80180150(void) { +} + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_8018C4F0; + +void func_80180158(void *arg0) { + func_80178CBC((s32)arg0, (s32)&D_8018C4F0); + *(s16 *)((s32)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180190); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180258); + + +s32 func_801802B4(void) { + return 85; +} + + + +extern void (*D_8018C570[])(void); + +void func_801802BC(void *a0) { + D_8018C570[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801802F8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018032C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018047C); + + +extern void (*D_8018C5AC[])(void); + +void func_80180568(void *a0) { + D_8018C5AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801805A4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180688); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801806F4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801807E0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180838); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180888); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801808F4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180A48); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180A9C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180AC0); + + +extern void (*D_80198D20[])(void); + +void func_80180B04(void *a0) { + D_80198D20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180B40); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180C8C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180D04); + + +void func_80180D34(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180D48); + + +extern void (*D_80198D58[])(void); + +void func_80180DB0(void *a0) { + D_80198D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180DEC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180E38); + +void func_80180E80(void) { +} + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180E88); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80180FEC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181368); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801814F4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018167C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181794); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181810); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181878); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801818DC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181948); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801819EC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181B0C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181C20); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181C7C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181CE8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181D44); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181F40); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181FA4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80181FE0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182044); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182180); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801821C4); + +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern M2C_UNK D_801A8A4C; + +void func_801822EC(void * arg0) { + ((void (*)(void *, void *))func_8012A8B0)(arg0, &D_801A8A4C); + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0xA); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182328); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801823BC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182424); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801824A4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182564); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182618); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801826E8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182808); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801828A4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182960); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801829E8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182A6C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182BA4); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8002AC00(s32 arg0); + +void func_80182C30(void) { + func_8002D4C8(0x853, 0); + func_8002AC00(0x13); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182C5C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182CBC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182D2C); + + +extern void (*D_801A1F2C[])(void); + +void func_80182E64(void *a0) { + D_801A1F2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182EA0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80182FBC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183008); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801830EC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801831B8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801832C4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018331C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801833DC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183494); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183548); + +extern void func_8012B23C(s32 arg0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_801835E0(s32 param_1) { + ((void (*)(s32))func_8012B23C)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 1); + } + + +extern void func_8012B21C(void *a0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183614(s32 param_1) { + ((void (*)(s32))func_8012B21C)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183648); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183710); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183790); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183820); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183904); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018395C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183A88); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183BE4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183C54); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183D94); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183E68); + +void func_80183F1C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183F24); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80183FE8); + + +extern void (*D_801A9210[])(void); + +void func_80184160(void *a0) { + D_801A9210[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_801A9224[])(void); + +void func_8018419C(void *a0) { + D_801A9224[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801A91FC; +extern s32 D_801A9208; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_801841D8(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801A91FC); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801A9208, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801A9218; + +void func_801842B8(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801A9218); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801A94CC; + +void func_801843D4(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801A94CC); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184430); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801B10C4; + +void func_801844A0(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801B10C4)) { + func_8012A828(arg0, &D_801B10C4); + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801844E8); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801B154C; + +void func_80184574(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801B154C); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801845B4); + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_801846B4 else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_801846B4(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801B14A4; + +s32 func_80184604(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_801846B4(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801B14A4); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801B1264; + +void func_801846B4(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801B1264); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_80184710(void *a0) { + *(s16 *)((char *)a0 + 0x2) = 0x5; + *(s32 *)((char *)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184724); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801848D8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184920); + +extern void (*D_801A9604[])(void); + +void func_80184A6C(void *a0) { + D_801A9604[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184AA8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184B30); + + +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); + +void func_80184C08(u8 *a0) { + u8 *p = *(u8 **)(a0 + 0x20); + u16 v = *(u16 *)(a0 + 0xFC); + *(s16 *)(a0 + 0x2) = 2; + *(s32 *)(a0 + 0x1C) = 0x50; + *(s16 *)(p + 0x12) = v; + func_8012B2CC((s32)a0); + func_8012B200(a0); + func_8012B178((s32)a0, 0xFFF00000); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184C60); + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80184CEC(u8 * arg0) { + ((void (*)(s32 *, s32))func_80016714)(*(s32 *)((u8 *)arg0 + 0xcc), 0x38); + ((void (*)(u8 *))func_8012C218)(arg0); + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184D24); + +extern s32 func_8012BEE8(s32 arg); + extern void func_801845B4(s32 arg); + void func_80184D90(s32 arg0) { + if (func_8012BEE8(arg0)) { + func_801845B4(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184DC8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184E2C); + +void func_80184E84(void) { +} + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184E8C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184F44); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80184FB4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185128); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185264); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185314); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018535C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801853F8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018543C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185620); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185668); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801858A0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801858E4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185A68); + +extern void func_8012CBCC(s32 a0); + void func_80185AA8(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + *(s16 *)((u8 *)a0 + 0x2) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185AE0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185B38); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185BA0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185BD8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185C90); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185CC8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185D7C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185DA8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185F98); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80185FD8); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018603C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186078); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801860F8); + +extern void func_8002A04C(s32 a0); + extern void func_8012C098(void); + void func_8018612C(s32 a0) { + ((void (*)(s32 *))func_8002A04C)((s32 *)a0); + ((s32 (*)(s32))func_8012C098)(a0); + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018615C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801861D0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801862F0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801863A4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186544); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186638); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801867A0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018691C); + + +extern void (*D_801B5108[])(void); + +void func_80186AD8(void *a0) { + D_801B5108[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186B14); + +void func_80186B70(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186B84); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186D94); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80186DD4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018710C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187174); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801871EC); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018739C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187604); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801878B0); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_801879FC); + + +extern void (*D_801B5160[])(void); + +void func_80187BD8(void *a0) { + D_801B5160[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187C14); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187C90); + + +extern void (*D_801BE37C[])(void); + +void func_80187CD0(void *a0) { + D_801BE37C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80187E08); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80188098); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_8018822C); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80188284); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80188300); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_80178D40", func_80188344); + + diff --git a/src/ov_SC04_003/ov_SC04_003_jr_801734BC.c b/src/ov_SC04_003/ov_SC04_003_jr_801734BC.c index 7aa94889d..6219ad29d 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_801734BC.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_801734BC.c @@ -3084,1268 +3084,3 @@ void func_80178D18(void) { D_8019BBEC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019B954; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019B954 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019B954; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019B954 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019B97C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019B97C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019B938; - -s32 func_8017A3B0(void) { - switch (D_8019B938) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019B974; -extern short D_8019B970; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019B974) { - case 0: - func_800D0CA0(1); - D_8019B974 = D_8019B974 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019B970; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019B974 = D_8019B974 + 1; - if (D_8019B974 < 0x1E) { - return 0; - } - D_8019B974 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019B9B4; - extern s16 D_8019B9B6; - extern s16 D_8019B9B8; - extern s16 D_8019B9AC; - extern s16 D_8019B9AE; - extern s16 D_8019B9B0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019B9B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019B9B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019B9B8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019B9AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019B9AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019B9B0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019B93C; -extern u16 D_8019B9BC; -extern u16 D_8019B9BE; -extern u16 D_8019B9C0; -extern s16 D_8019BB78; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019BB78 = 0; - D_8019B93C = 0; - D_8019B9BC = D_80126B5E; - D_8019B9BE = D_80126B62; - D_8019B9C0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185ACC[]; - extern s16 D_8019B9B4; - extern s16 D_8019B9AC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185ACC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185ACC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019B9B4; - s16 *p78C = &D_8019B9AC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019BB78 = 1; - D_8019B93C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019B95C; - extern SV4_8017B368 D_8019B964; - extern s16 D_8019B9B4; - extern s16 D_8019B9AC; - extern u16 D_80185ACC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019B95C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019B964; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185ACC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185ACC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019B9B4) = loc0; - (*(SV4_8017B368 *)&D_8019B9AC) = loc1; - D_8019BB78 = 1; - D_8019B93C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185ACC[]; - extern s16 D_8019B9B4; - extern s16 D_8019B9B6; - extern s16 D_8019B9B8; - extern s16 D_8019B9AC; - extern s16 D_8019B9AE; - extern s16 D_8019B9B0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185ACC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185ACC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019B9B4; - s16 *p78C = &D_8019B9AC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019B9B6; - v798 = D_8019B9B8; - v78C = *p78C; - v78E = D_8019B9AE; - v790 = D_8019B9B0; - __asm__ __volatile__(""); - D_8019BB78 = 1; - D_8019B93C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019B93C; -extern s16 D_8019B9B4; -extern s16 D_8019B9B6; -extern s16 D_8019B9B8; -extern s16 D_8019B9AC; -extern s16 D_8019B9AE; -extern s16 D_8019B9B0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019B93C = 0; - D_8019B9B4 = (s16) D_80114F30; - D_8019B9B6 = (s16) D_80114F34; - D_8019B9B8 = (s16) D_80114F38; - D_8019B9AC = (s16) D_80114F24; - D_8019B9AE = (s16) D_80114F28; - D_8019B9B0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019B9CC; -extern s16 D_8019B9CE; -extern s16 D_8019B9D0; -extern s16 D_8019B9D4; -extern s16 D_8019B9D6; -extern s16 D_8019B9D8; - -void func_8017B824(void) { - D_8019B9CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019B9CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019B9D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019B9D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019B9D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019B9D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019B9CC; -extern s16 D_8019B9CE; -extern s16 D_8019B9D0; -extern s16 D_8019B9D4; -extern s16 D_8019B9D6; -extern s16 D_8019B9D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019B9CC; - D_80114F34 = D_8019B9CE; - D_80114F38 = D_8019B9D0; - D_80114F24 = D_8019B9D4; - D_80114F28 = D_8019B9D6; - D_80114F2C = D_8019B9D8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019B9B4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019B9AC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019B9B4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019B9AC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019B9BC; -extern u16 D_8019B9BE; -extern u16 D_8019B9C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019B93C; -extern short D_8019B9C4; -extern short D_8019B9C6; -extern short D_8019B9C8; -extern s16 D_8019B9B4; -extern s16 D_8019B9B6; -extern s16 D_8019B9B8; -extern s16 D_8019B9AC; -extern s16 D_8019B9AE; -extern s16 D_8019B9B0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019B9BC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019B9BE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019B9C0); - (*(s16 *)&D_8019B9C4) = buf[0]; - (*(s16 *)&D_8019B9C6) = buf[1]; - (*(s16 *)&D_8019B9C8) = buf[2]; - D_8019B9B4 = D_80114F30 + buf[0]; - D_8019B93C = 0; - D_8019B9B6 = D_80114F34 + buf[1]; - D_8019B9B8 = D_80114F38 + buf[2]; - D_8019B9AC = D_80114F24 + buf[0]; - D_8019B9AE = D_80114F28 + buf[1]; - D_8019B9B0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019B95C; -extern SV4 D_8019B964; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019B964) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019B95C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019B964 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019B964)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019B95C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019B964) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019B984[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019B984; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019B93C; -extern s16 D_8019BB78; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019B93C = D_8019B93C + 1; - if (D_8019B93C >= 0x1F) { - D_8019BB78 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019B93C; -extern s16 D_8019BB78; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019B93C = D_8019B93C + 1; - if (0x18 < D_8019B93C) { - func_8012A4BC(); - D_8019BB78 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019B93C; -extern void (*D_8019B980)(void); -extern short D_8019B9C4; -extern short D_8019B9C6; -extern short D_8019B9C8; -extern s16 D_8019BB78; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019B93C = D_8019B93C + 1; - if (D_8019B93C >= 0x19) { - if (D_8019B980 != 0) { - (*D_8019B980)(); - } else { - D_80114F30 = D_80114F30 + D_8019B9C4; - D_80114F34 = D_80114F34 + D_8019B9C6; - D_80114F38 = D_80114F38 + D_8019B9C8; - D_80114F24 = D_80114F24 + D_8019B9C4; - D_80114F28 = D_80114F28 + D_8019B9C6; - D_80114F2C = D_80114F2C + D_8019B9C8; - func_8012A4BC(); - } - D_8019BB78 = 0; - } -} - - - -extern void (*D_80185B6C[])(void); - -void func_8017BE60(void *a0) { - D_80185B6C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017CE0C); - - -extern void (*D_80185C18[])(void); - -void func_8017CE7C(void *a0) { - D_80185C18[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017CEB8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CEFC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017CF20); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF60(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017CFDC); - - -extern void (*D_80185C2C[])(void); - -void func_8017CFFC(void *a0) { - D_80185C2C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D038); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D0D4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D0FC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D194); - - -extern void (*D_80185C48[])(void); - -void func_8017D22C(void *a0) { - D_80185C48[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D268); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D308); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D3A8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D540); - -extern s32 func_8017D570(void); - -s32 func_8017D570(void) { - return 0x55; -} - - - -extern void (*D_80185CBC[])(void); - -void func_8017D578(void *a0) { - D_80185CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D5B4); - -void func_8017D618(void) { -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_80185CA4; - -void func_8017D620(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80185CA4); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D658); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D698); - - -extern void (*D_80185CCC[])(void); - -void func_8017D6FC(void *a0) { - D_80185CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D738); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D76C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D8BC); - - -extern void (*D_80185D08[])(void); - -void func_8017D9A8(void *a0) { - D_80185D08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017D9E4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017DAC8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017DB34); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017DC20); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017DDDC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017DE58); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017E00C(void *arg0) { - ((void (*)(void *, int))func_8012AD44)(arg0, 0x3); - } - - - -s32 func_8017E02C(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x3; - } - - - -extern void (*D_80190D18[])(void); - -void func_8017E040(void *a0) { - D_80190D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E07C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E108); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E278); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E2E8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E39C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E498); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E4F4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017E910); - -void func_8017EE30(void) { -} - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017EE38); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017EE80); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F150); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F1AC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F218); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F274); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F470); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F4D4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F510); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F574); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F6B0); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F6F4); - -extern void func_8012A8B0(u8 *a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern s32 D_80197974; - -void func_8017F81C(s32 arg0) { - ((void (*)(s32, s32))func_8012A8B0)(arg0, &D_80197974); - ((void (*)(s32, s32))func_8012AD44)(arg0, 0xA); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F858); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F8EC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F954); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017F9D4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FA94); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FB48); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FC18); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FD38); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FDD4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FE90); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FF18); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8017FF9C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801800D4); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8002AC00(int arg0); - -void func_80180160(void) { - func_8002D4C8(0x853, 0); - func_8002AC00(0x13); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018018C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801801EC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018025C); - - -extern void (*D_80190E54[])(void); - -void func_80180394(void *a0) { - D_80190E54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801803D0); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801804EC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180538); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018061C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801806E8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801807F4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018084C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018090C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801809C4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180A78); - -extern void func_8012B23C(s32 arg); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80180B10(s32 param_1) { - func_8012B23C(param_1); - ((s32 (*)(s32, s32))func_8012AD44)(param_1, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180B44); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180B78); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180C40); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180CC0); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180D50); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180E34); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180E8C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80180FB8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181114); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181184); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_801812C4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181398); - -void func_8018144C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181454); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181518); - - -extern void (*D_80198270[])(void); - -void func_80181690(void *a0) { - D_80198270[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80198284[])(void); - -void func_801816CC(void *a0) { - D_80198284[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_8019825C; -extern s32 D_80198268; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_80181708(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_8019825C); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_80198268, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_80198278; - -void func_801817E8(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_80198278); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_8019852C; - -void func_80181904(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_8019852C); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - - -extern void (*D_80198864[])(void); - -void func_80181960(void *a0) { - D_80198864[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_8018199C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181A70); - -void func_80181A98(void) { -} - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181AA0); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181BEC); - - -extern void func_8012C218(void *a0); - s32 func_80181D0C(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181D38); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181D48); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181D58); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80181D98(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181DCC); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181DF0); - - -extern void (*D_8019888C[])(void); - -void func_80181E54(void *a0) { - D_8019888C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181F18); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80181FD8); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_801734BC", func_80182048); - diff --git a/src/ov_SC04_003/ov_SC04_003_jr_80178D40.c b/src/ov_SC04_003/ov_SC04_003_jr_80178D40.c new file mode 100644 index 000000000..d4ba7ec3c --- /dev/null +++ b/src/ov_SC04_003/ov_SC04_003_jr_80178D40.c @@ -0,0 +1,4714 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185374[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019ACA8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185368[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801853AC[]; +extern unsigned short D_801853B4[]; +extern unsigned short D_801853BC[]; +extern unsigned char D_8019ACB0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019ACA8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801853C4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019ADE4; +extern M2C_UNK D_8019ADE8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AD70; +extern void (*D_801853F4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019ADEC[]; +extern u8 D_8019ADF4[]; +extern u8 D_8019ADA4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801853FC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185418[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185420[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185488[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018542C; +extern u8 D_80185438; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801854BC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801854C4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185518[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018554C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018553C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185568; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801855E0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801855E8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801855F0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801855F8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185600[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185608[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185614[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185620[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018562C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018563C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018564C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185654[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018565C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185664[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018566C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185674[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018567C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185684[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018568C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185694[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018569C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801856A4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801856AC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801856B4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801856BC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801856C4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801856CC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801856D4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801856DC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801856E4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801856EC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801856F4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801856FC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185740[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185704; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185770[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801857AC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185804[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185814[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018581C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185984[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185990[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019A3B8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019BB78; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019B528; +extern short D_8019BBEC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019BBEC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019BBEC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019B528 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019BBEC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019BB48 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019BB48 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019BBEC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019BBEC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019B984[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019B52C; + extern s32 D_8019B940; + extern s16 D_8019B944; + extern s16 D_8019B948; + extern s16 D_8019B94C; + extern s16 D_8019B950; + extern s32 D_8019B958; + extern s32 D_8019B95C; + extern s32 D_8019B96C; + extern s16 D_8019B970; + extern s16 D_8019B974; + extern s32 D_8019B978; + extern s32 D_8019B980; + extern s32 D_8019B984[10]; + extern s32 D_8019BA90; + extern s16 D_8019BB48; + extern s32 D_8019BB74; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019BB48; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019B940); + D_8019B940 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019B94C, D_8019B950 ? 0x48 : 0x40); + (*(s16*)&D_8019BBEC) = 2; + break; + case 0: + func_80179B28(D_8019B940); + D_8019B940 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019B944, D_8019B948 ? 0x48 : 0x40); + (*(s16*)&D_8019BBEC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019BA90 != 0) { + func_80179B28(D_8019B940); + D_8019B940 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019B944, D_8019B948 ? 0x48 : 0x40); + (*(s16*)&D_8019BBEC) = 1; + } else { + (*(s16*)&D_8019BBEC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019B940); + D_8019B940 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019B944, + D_8019B948 ? 0x48 : 0x40); + (*(s16*)&D_8019BBEC) = 1; + break; + case 2: + func_80179B28(D_8019B940); + if (D_8019B958 != 0) { + D_8019B528 = D_8019B958; + D_8019B958 = 0; + (*(s16*)&D_8019BBEC) = 3; + return; + } + (*(s16*)&D_8019BBEC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019BBEC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019BBEC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019BBEC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x1B: + D_8019B978 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019BBEC) = 4; + D_8019B52C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019BBEC) = 5; + D_8019B96C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019B96C = (s32)func_8017A3B0; + (*(s16*)&D_8019BBEC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x24: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BBEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019BBEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019BBEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BBEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BBEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019BBEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019BBEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019B95C); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019B95C); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019B95C); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019B95C); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x4E: + D_8019B980 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019BBEC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019BB74 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x34: + (*(s16*)&D_8019BBEC) = 3; + D_8019B528 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019B958 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019BBEC) = 3; + D_8019B528 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019BBEC) = 3; + D_8019B528 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019B528 = *(s32 *)(D_8019B528 + 4); + return; + case 0x37: + (*(s16*)&D_8019BBEC) = 3; + D_8019B944 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019B948 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019BBEC) = 3; + D_8019B94C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019B950 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019BBEC) = 3; + D_8019B944 = w1; + D_8019B948 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019BBEC) = 3; + D_8019B94C = w2; + D_8019B950 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x43: + D_8019B96C = (s32)func_8017A3D8; + D_8019B974 = 0; + (*(s16*)&D_8019BBEC) = 5; + D_8019B970 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019BBEC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019BBEC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019B984; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019BBEC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019B984; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019BBEC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019B984[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019BBEC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019B984; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019BBEC) = 3; + break; + default: + break; + } +Lend: + D_8019B528 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019B954; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019B954 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019B954; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019B954 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019B97C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019B97C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019B938; + +s32 func_8017A3B0(void) { + switch (D_8019B938) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019B974; +extern short D_8019B970; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019B974) { + case 0: + func_800D0CA0(1); + D_8019B974 = D_8019B974 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019B970; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019B974 = D_8019B974 + 1; + if (D_8019B974 < 0x1E) { + return 0; + } + D_8019B974 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019B9B4; + extern s16 D_8019B9B6; + extern s16 D_8019B9B8; + extern s16 D_8019B9AC; + extern s16 D_8019B9AE; + extern s16 D_8019B9B0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019B9B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019B9B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019B9B8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019B9AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019B9AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019B9B0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019B93C; +extern u16 D_8019B9BC; +extern u16 D_8019B9BE; +extern u16 D_8019B9C0; +extern s16 D_8019BB78; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019BB78 = 0; + D_8019B93C = 0; + D_8019B9BC = D_80126B5E; + D_8019B9BE = D_80126B62; + D_8019B9C0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185ACC[]; + extern s16 D_8019B9B4; + extern s16 D_8019B9AC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185ACC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185ACC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019B9B4; + s16 *p78C = &D_8019B9AC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019BB78 = 1; + D_8019B93C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019B95C; + extern SV4_8017B368 D_8019B964; + extern s16 D_8019B9B4; + extern s16 D_8019B9AC; + extern u16 D_80185ACC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019B95C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019B964; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185ACC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185ACC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019B9B4) = loc0; + (*(SV4_8017B368 *)&D_8019B9AC) = loc1; + D_8019BB78 = 1; + D_8019B93C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185ACC[]; + extern s16 D_8019B9B4; + extern s16 D_8019B9B6; + extern s16 D_8019B9B8; + extern s16 D_8019B9AC; + extern s16 D_8019B9AE; + extern s16 D_8019B9B0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185ACC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185ACC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019B9B4; + s16 *p78C = &D_8019B9AC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019B9B6; + v798 = D_8019B9B8; + v78C = *p78C; + v78E = D_8019B9AE; + v790 = D_8019B9B0; + __asm__ __volatile__(""); + D_8019BB78 = 1; + D_8019B93C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019B93C; +extern s16 D_8019B9B4; +extern s16 D_8019B9B6; +extern s16 D_8019B9B8; +extern s16 D_8019B9AC; +extern s16 D_8019B9AE; +extern s16 D_8019B9B0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019B93C = 0; + D_8019B9B4 = (s16) D_80114F30; + D_8019B9B6 = (s16) D_80114F34; + D_8019B9B8 = (s16) D_80114F38; + D_8019B9AC = (s16) D_80114F24; + D_8019B9AE = (s16) D_80114F28; + D_8019B9B0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019B9CC; +extern s16 D_8019B9CE; +extern s16 D_8019B9D0; +extern s16 D_8019B9D4; +extern s16 D_8019B9D6; +extern s16 D_8019B9D8; + +void func_8017B824(void) { + D_8019B9CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019B9CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019B9D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019B9D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019B9D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019B9D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019B9CC; +extern s16 D_8019B9CE; +extern s16 D_8019B9D0; +extern s16 D_8019B9D4; +extern s16 D_8019B9D6; +extern s16 D_8019B9D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019B9CC; + D_80114F34 = D_8019B9CE; + D_80114F38 = D_8019B9D0; + D_80114F24 = D_8019B9D4; + D_80114F28 = D_8019B9D6; + D_80114F2C = D_8019B9D8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019B9B4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019B9AC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019B9B4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019B9AC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019B9BC; +extern u16 D_8019B9BE; +extern u16 D_8019B9C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019B93C; +extern short D_8019B9C4; +extern short D_8019B9C6; +extern short D_8019B9C8; +extern s16 D_8019B9B4; +extern s16 D_8019B9B6; +extern s16 D_8019B9B8; +extern s16 D_8019B9AC; +extern s16 D_8019B9AE; +extern s16 D_8019B9B0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019B9BC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019B9BE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019B9C0); + (*(s16 *)&D_8019B9C4) = buf[0]; + (*(s16 *)&D_8019B9C6) = buf[1]; + (*(s16 *)&D_8019B9C8) = buf[2]; + D_8019B9B4 = D_80114F30 + buf[0]; + D_8019B93C = 0; + D_8019B9B6 = D_80114F34 + buf[1]; + D_8019B9B8 = D_80114F38 + buf[2]; + D_8019B9AC = D_80114F24 + buf[0]; + D_8019B9AE = D_80114F28 + buf[1]; + D_8019B9B0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019B95C; +extern SV4 D_8019B964; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019B964) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019B95C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019B964 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019B964)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019B95C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019B964) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019B984[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019B984; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019B93C; +extern s16 D_8019BB78; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019B93C = D_8019B93C + 1; + if (D_8019B93C >= 0x1F) { + D_8019BB78 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019B93C; +extern s16 D_8019BB78; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019B93C = D_8019B93C + 1; + if (0x18 < D_8019B93C) { + func_8012A4BC(); + D_8019BB78 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019B93C; +extern void (*D_8019B980)(void); +extern short D_8019B9C4; +extern short D_8019B9C6; +extern short D_8019B9C8; +extern s16 D_8019BB78; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019B93C = D_8019B93C + 1; + if (D_8019B93C >= 0x19) { + if (D_8019B980 != 0) { + (*D_8019B980)(); + } else { + D_80114F30 = D_80114F30 + D_8019B9C4; + D_80114F34 = D_80114F34 + D_8019B9C6; + D_80114F38 = D_80114F38 + D_8019B9C8; + D_80114F24 = D_80114F24 + D_8019B9C4; + D_80114F28 = D_80114F28 + D_8019B9C6; + D_80114F2C = D_80114F2C + D_8019B9C8; + func_8012A4BC(); + } + D_8019BB78 = 0; + } +} + + + +extern void (*D_80185B6C[])(void); + +void func_8017BE60(void *a0) { + D_80185B6C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017CE0C); + + +extern void (*D_80185C18[])(void); + +void func_8017CE7C(void *a0) { + D_80185C18[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017CEB8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CEFC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017CF20); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF60(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017CFDC); + + +extern void (*D_80185C2C[])(void); + +void func_8017CFFC(void *a0) { + D_80185C2C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D038); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D0D4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D0FC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D194); + + +extern void (*D_80185C48[])(void); + +void func_8017D22C(void *a0) { + D_80185C48[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D268); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D308); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D3A8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D540); + +extern s32 func_8017D570(void); + +s32 func_8017D570(void) { + return 0x55; +} + + + +extern void (*D_80185CBC[])(void); + +void func_8017D578(void *a0) { + D_80185CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D5B4); + +void func_8017D618(void) { +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_80185CA4; + +void func_8017D620(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80185CA4); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D658); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D698); + + +extern void (*D_80185CCC[])(void); + +void func_8017D6FC(void *a0) { + D_80185CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D738); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D76C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D8BC); + + +extern void (*D_80185D08[])(void); + +void func_8017D9A8(void *a0) { + D_80185D08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017D9E4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017DAC8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017DB34); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017DC20); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017DDDC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017DE58); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017E00C(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x3); + } + + + +s32 func_8017E02C(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x3; + } + + + +extern void (*D_80190D18[])(void); + +void func_8017E040(void *a0) { + D_80190D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E07C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E108); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E278); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E2E8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E39C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E498); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E4F4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017E910); + +void func_8017EE30(void) { +} + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017EE38); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017EE80); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F150); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F1AC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F218); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F274); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F470); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F4D4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F510); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F574); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F6B0); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F6F4); + +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 D_80197974; + +void func_8017F81C(s32 arg0) { + ((void (*)(s32, s32))func_8012A8B0)(arg0, &D_80197974); + ((void (*)(s32, s32))func_8012AD44)(arg0, 0xA); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F858); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F8EC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F954); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017F9D4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FA94); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FB48); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FC18); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FD38); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FDD4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FE90); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FF18); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8017FF9C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801800D4); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8002AC00(int arg0); + +void func_80180160(void) { + func_8002D4C8(0x853, 0); + func_8002AC00(0x13); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018018C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801801EC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018025C); + + +extern void (*D_80190E54[])(void); + +void func_80180394(void *a0) { + D_80190E54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801803D0); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801804EC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180538); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018061C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801806E8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801807F4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018084C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018090C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801809C4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180A78); + +extern void func_8012B23C(s32 arg); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180B10(s32 param_1) { + func_8012B23C(param_1); + ((s32 (*)(s32, s32))func_8012AD44)(param_1, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180B44); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180B78); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180C40); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180CC0); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180D50); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180E34); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180E8C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80180FB8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181114); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181184); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_801812C4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181398); + +void func_8018144C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181454); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181518); + + +extern void (*D_80198270[])(void); + +void func_80181690(void *a0) { + D_80198270[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80198284[])(void); + +void func_801816CC(void *a0) { + D_80198284[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_8019825C; +extern s32 D_80198268; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_80181708(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_8019825C); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_80198268, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_80198278; + +void func_801817E8(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_80198278); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_8019852C; + +void func_80181904(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_8019852C); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + + +extern void (*D_80198864[])(void); + +void func_80181960(void *a0) { + D_80198864[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_8018199C); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181A70); + +void func_80181A98(void) { +} + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181AA0); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181BEC); + + +extern void func_8012C218(void *a0); + s32 func_80181D0C(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181D38); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181D48); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181D58); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80181D98(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181DCC); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181DF0); + + +extern void (*D_8019888C[])(void); + +void func_80181E54(void *a0) { + D_8019888C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181F18); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80181FD8); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_80178D40", func_80182048); + + diff --git a/src/ov_SC04_004/ov_SC04_004_jr_801734BC.c b/src/ov_SC04_004/ov_SC04_004_jr_801734BC.c index 70c7a407d..11ba24271 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_801734BC.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_801734BC.c @@ -3084,1503 +3084,3 @@ void func_80178D18(void) { D_801B3C54 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B3754; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B3754 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B3754; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B3754 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B377C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B377C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B3738; - -s32 func_8017A3B0(void) { - switch (D_801B3738) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B3774; -extern short D_801B3770; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B3774) { - case 0: - func_800D0CA0(1); - D_801B3774 = D_801B3774 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B3770; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B3774 = D_801B3774 + 1; - if (D_801B3774 < 0x1E) { - return 0; - } - D_801B3774 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B37B4; - extern s16 D_801B37B6; - extern s16 D_801B37B8; - extern s16 D_801B37AC; - extern s16 D_801B37AE; - extern s16 D_801B37B0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B37B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B37B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B37B8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B37AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B37AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B37B0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B373C; -extern u16 D_801B37BC; -extern u16 D_801B37BE; -extern u16 D_801B37C0; -extern s16 D_801B3BD8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B3BD8 = 0; - D_801B373C = 0; - D_801B37BC = D_80126B5E; - D_801B37BE = D_80126B62; - D_801B37C0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188000[]; - extern s16 D_801B37B4; - extern s16 D_801B37AC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188000[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188000[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B37B4; - s16 *p78C = &D_801B37AC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B3BD8 = 1; - D_801B373C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B375C; - extern SV4_8017B368 D_801B3764; - extern s16 D_801B37B4; - extern s16 D_801B37AC; - extern u16 D_80188000; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B375C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B3764; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80188000)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80188000)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B37B4) = loc0; - (*(SV4_8017B368 *)&D_801B37AC) = loc1; - D_801B3BD8 = 1; - D_801B373C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80188000[]; - extern s16 D_801B37B4; - extern s16 D_801B37B6; - extern s16 D_801B37B8; - extern s16 D_801B37AC; - extern s16 D_801B37AE; - extern s16 D_801B37B0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80188000[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80188000[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B37B4; - s16 *p78C = &D_801B37AC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B37B6; - v798 = D_801B37B8; - v78C = *p78C; - v78E = D_801B37AE; - v790 = D_801B37B0; - __asm__ __volatile__(""); - D_801B3BD8 = 1; - D_801B373C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B373C; -extern s16 D_801B37B4; -extern s16 D_801B37B6; -extern s16 D_801B37B8; -extern s16 D_801B37AC; -extern s16 D_801B37AE; -extern s16 D_801B37B0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B373C = 0; - D_801B37B4 = (s16) D_80114F30; - D_801B37B6 = (s16) D_80114F34; - D_801B37B8 = (s16) D_80114F38; - D_801B37AC = (s16) D_80114F24; - D_801B37AE = (s16) D_80114F28; - D_801B37B0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B37CC; -extern s16 D_801B37CE; -extern s16 D_801B37D0; -extern s16 D_801B37D4; -extern s16 D_801B37D6; -extern s16 D_801B37D8; - -void func_8017B824(void) { - D_801B37CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B37CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B37D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B37D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B37D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B37D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B37CC; -extern s16 D_801B37CE; -extern s16 D_801B37D0; -extern s16 D_801B37D4; -extern s16 D_801B37D6; -extern s16 D_801B37D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B37CC; - D_80114F34 = D_801B37CE; - D_80114F38 = D_801B37D0; - D_80114F24 = D_801B37D4; - D_80114F28 = D_801B37D6; - D_80114F2C = D_801B37D8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B37B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B37AC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B37B4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B37AC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B37BC; -extern u16 D_801B37BE; -extern u16 D_801B37C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B373C; -extern short D_801B37C4; -extern short D_801B37C6; -extern short D_801B37C8; -extern s16 D_801B37B4; -extern s16 D_801B37B6; -extern s16 D_801B37B8; -extern s16 D_801B37AC; -extern s16 D_801B37AE; -extern s16 D_801B37B0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B37BC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B37BE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B37C0); - (*(s16 *)&D_801B37C4) = buf[0]; - (*(s16 *)&D_801B37C6) = buf[1]; - (*(s16 *)&D_801B37C8) = buf[2]; - D_801B37B4 = D_80114F30 + buf[0]; - D_801B373C = 0; - D_801B37B6 = D_80114F34 + buf[1]; - D_801B37B8 = D_80114F38 + buf[2]; - D_801B37AC = D_80114F24 + buf[0]; - D_801B37AE = D_80114F28 + buf[1]; - D_801B37B0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B375C; -extern SV4 D_801B3764; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B3764) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B375C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B3764 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B3764)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B375C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B3764) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B3784[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B3784; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B373C; -extern s16 D_801B3BD8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B373C = D_801B373C + 1; - if (D_801B373C >= 0x1F) { - D_801B3BD8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B373C; -extern s16 D_801B3BD8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B373C = D_801B373C + 1; - if (0x18 < D_801B373C) { - func_8012A4BC(); - D_801B3BD8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B373C; -extern void (*D_801B3780)(void); -extern short D_801B37C4; -extern short D_801B37C6; -extern short D_801B37C8; -extern s16 D_801B3BD8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B373C = D_801B373C + 1; - if (D_801B373C >= 0x19) { - if (D_801B3780 != 0) { - (*D_801B3780)(); - } else { - D_80114F30 = D_80114F30 + D_801B37C4; - D_80114F34 = D_80114F34 + D_801B37C6; - D_80114F38 = D_80114F38 + D_801B37C8; - D_80114F24 = D_80114F24 + D_801B37C4; - D_80114F28 = D_80114F28 + D_801B37C6; - D_80114F2C = D_80114F2C + D_801B37C8; - func_8012A4BC(); - } - D_801B3BD8 = 0; - } -} - - - -extern void (*D_801880A0[])(void); - -void func_8017BE60(void *a0) { - D_801880A0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017CECC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D258); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D4D0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D618); - - -extern void (*D_801881BC[])(void); - -void func_8017D798(void *a0) { - D_801881BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D7D4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D820); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D914); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017D994); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DA48); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DAB4); - -extern void func_8012C218(void *a0); - void func_8017DB40(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DB60); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DBB4); - - -extern void (*D_80188214[])(void); - -void func_8017DBF0(void *a0) { - D_80188214[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DC2C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DC7C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DCD8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DD5C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DEC4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017DF10); - - -extern void (*D_80188228[])(void); - -void func_8017E21C(void *a0) { - D_80188228[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E258); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E298); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E308); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E468); - - -extern void (*D_8018823C[])(void); - -void func_8017E4BC(void *a0) { - D_8018823C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E4F8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E5AC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E608); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E7E8); - - -extern void (*D_8018830C[])(void); - -void func_8017E858(void *a0) { - D_8018830C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E894); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E8D8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017E8FC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E93C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E9B8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188320[])(void); - -void func_8017E9D8(void *a0) { - D_80188320[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EA14); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EA88); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EAB0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EAD8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EB70); - - -extern void (*D_8018833C[])(void); - -void func_8017EC08(void *a0) { - D_8018833C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EC44); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017ECE4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017ED84); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EF1C); - - -s32 func_8017EF4C(void) { - return 85; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EF54); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EFAC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017EFF4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F07C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F0E0); - - -extern void (*D_801883B0[])(void); - -void func_8017F130(void *a0) { - D_801883B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F16C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F228); - -void func_8017F5C4(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); - *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F5E0); - - -extern void (*D_801883E8[])(void); - -void func_8017F620(void *a0) { - D_801883E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F65C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F930); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F9AC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017F9F4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FA1C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FB78); - -void func_8017FBEC(s32 *a0) { - *(s32 *)((s32)a0 + 0x0) = 0x80404080; - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FBFC); - - -extern void (*D_801886F8[])(void); - -void func_8017FC88(void *a0) { - D_801886F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s16 a1); - extern s32 func_8012AD50(void *a0); - void func_8017FCC4(s32 *a0) { - func_8012BF4C(a0, 0); - ((void (*)(void *))func_8012AD50)((void *)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FCF8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FE48); - - -extern void (*D_80188734[])(void); - -void func_8017FF34(void *a0) { - D_80188734[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8017FF70); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180054); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801800C0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801801AC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180208); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180274); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801802D0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801804CC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180530); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018056C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801805D0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018070C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180750); - -extern void func_8012A8B0(u8 *a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern s32 D_801999AC; - -void func_80180878(s32 arg0) { - ((void (*)(s32, s32))func_8012A8B0)(arg0, &D_801999AC); - ((void (*)(s32, s32))func_8012AD44)(arg0, 0xA); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801808B4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180948); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801809B0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180A30); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180AF0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180BA4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180C74); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180D94); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180E30); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180EEC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180F74); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80180FF8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181130); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8002AC00(int arg0); - -void func_801811BC(void) { - func_8002D4C8(0x853, 0); - func_8002AC00(0x13); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801811E8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181248); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801812B8); - - -extern void (*D_80192E8C[])(void); - -void func_801813F0(void *a0) { - D_80192E8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018142C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181548); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181594); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181678); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181744); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181850); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801818A8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181968); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181A20); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181AD4); - -extern void func_8012B23C(s32 arg); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181B6C(void *a0) { - func_8012B23C((s32)a0); - ((s32 (*)(s32, s32))func_8012AD44)((s32)a0, 1); - } - - -extern void func_8012B21C(void *a0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181BA0(s32 param_1) { - ((void (*)(s32))func_8012B21C)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 2); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181BD4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181C9C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181D1C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181DAC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80181EE8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182014); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182170); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801821E0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182320); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801823F4); - -void func_801824A8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801824B0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182574); - - -extern void (*D_8019A170[])(void); - -void func_801826EC(void *a0) { - D_8019A170[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019A184[])(void); - -void func_80182728(void *a0) { - D_8019A184[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_8019A15C; -extern s32 D_8019A168; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_80182764(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_8019A15C); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_8019A168, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_8019A178; - -void func_80182844(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_8019A178); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_8019A42C; - -void func_80182960(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_8019A42C); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801829BC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182B9C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182CAC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182DC4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182E34); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182E9C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182ED4); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - extern void func_8002AC00(s32 arg0); - void func_80182F7C(void) { - func_8002D4C8(0xA9E, 0); - func_8002AC00(0x14); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182FA8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80182FF0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018308C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183130); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801831FC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801832A8); - - -// @class: plumbing -// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out -extern void func_8012A828(s32 a0, void *a1); -extern void D_801B0750; - -void func_80183318(s32 arg0) -{ - if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801B0750)) { - func_8012A828(arg0, &D_801B0750); - } -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183360); - - -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801B0BD8; - -void func_801833EC(s32 a0) { - *(s16 *)(a0 + 0x2) = 2; - func_8012A828(a0, &D_801B0BD8); - *(s32 *)(a0 + 0x1C) = 0x14; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018342C); - - -// @class: schedule -// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018352C else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. -extern s32 func_8012BCCC(s32 a0); -extern void func_8018352C(s32 param_1); -extern void func_8012A828(s32 a0, void *a1); -extern u8 D_801B0B30; - -s32 func_8018347C(s32 param_1, s32 param_2, s32 param_3) { - s32 iVar2; - s16 sVar1; - - iVar2 = func_8012BCCC(param_1); - if (param_2 >= iVar2) { - func_8018352C(param_1); - return 1; - } - sVar1 = *(s16 *)(param_1 + 0xdc) + 1; - *(s16 *)(param_1 + 0xdc) = sVar1; - if (sVar1 < 0x79) { - return 0; - } - if (param_3 >= iVar2) { - return 0; - } - *(s16 *)(param_1 + 2) = 1; - func_8012A828(param_1, &D_801B0B30); - return 1; -} - - - -// @class: plumbing -// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) -extern void func_8012A828(s32 a0, void *a1); -extern void func_80142414(s32 a0, s16 a1); -extern u8 D_801B08F0; - -void func_8018352C(s32 param_1) { - *(s16 *)(param_1 + 2) = 4; - func_8012A828(param_1, &D_801B08F0); - *(s32 *)(param_1 + 0x1c) = 0x1e; - if (*(s16 *)(param_1 + 0xfc) == 0) { - *(s16 *)(param_1 + 0xfc) = 1; - ((void (*)(s32, s32))func_80142414)(param_1, -0x96); - } -} - - -void func_80183588(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0x14; - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_8018359C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183750); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183798); - - -extern void (*D_801A8C90[])(void); - -void func_801838E4(void *a0) { - D_801A8C90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183920); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801839A8); - - -extern void func_8012B2CC(s32 a0); -extern void func_8012B200(u8 *a0); -extern void func_8012B178(s32 a0, s32 a1); - -void func_80183A80(u8 *a0) { - u8 *p = *(u8 **)(a0 + 0x20); - u16 v = *(u16 *)(a0 + 0xFC); - *(s16 *)(a0 + 0x2) = 2; - *(s32 *)(a0 + 0x1C) = 0x50; - *(s16 *)(p + 0x12) = v; - func_8012B2CC((s32)a0); - func_8012B200(a0); - func_8012B178((s32)a0, 0xFFF00000); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183AD8); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C218(void *a0); - void func_80183B64(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xcc); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C218)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183B9C); - -extern s32 func_8012BEE8(s32 arg); - extern void func_8018342C(s32 a0); - void func_80183C08(s32 a0) { - if (func_8012BEE8(a0)) { - ((void (*)(s32))func_8018342C)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183C40); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183CA4); - -void func_80183CFC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183D04); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183DBC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183E2C); - - -extern void (*D_801B0DF4[])(void); - -void func_80183FA0(void *a0) { - D_801B0DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80183FDC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801840D8); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80184368); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801844FC); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80184554); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_801845D0); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_801734BC", func_80184614); - diff --git a/src/ov_SC04_004/ov_SC04_004_jr_80178D40.c b/src/ov_SC04_004/ov_SC04_004_jr_80178D40.c new file mode 100644 index 000000000..43bc38952 --- /dev/null +++ b/src/ov_SC04_004/ov_SC04_004_jr_80178D40.c @@ -0,0 +1,4949 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801878A8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B2AA8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018789C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801878E0[]; +extern unsigned short D_801878E8[]; +extern unsigned short D_801878F0[]; +extern unsigned char D_801B2AB0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B2AA8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801878F8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B2BE4; +extern M2C_UNK D_801B2BE8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B2B70; +extern void (*D_80187928[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B2BEC[]; +extern u8 D_801B2BF4[]; +extern u8 D_801B2BA4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187930[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018794C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187954[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801879BC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187960; +extern u8 D_8018796C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801879F0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801879F8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187A4C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187A80[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187A70[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187A9C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187B14[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187B1C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187B24[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80187B2C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187B34[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80187B3C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187B48[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187B54[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187B60[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187B70[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187B80[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187B88[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187B90[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187B98[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187BA0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187BA8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187BB0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187BB8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187BC0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187BC8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187BD0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187BD8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187BE0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187BE8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187BF0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187BF8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187C00[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187C08[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187C10[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187C18[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187C20[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187C28[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187C30[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187C74[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187C38; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187CA4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187CE0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187D38[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187D48[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187D50[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187EB8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187EC4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B21B4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B3BD8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B3328; +extern short D_801B3C54; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B3C54) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B3C54)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B3328 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B3C54) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B3BA8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B3BA8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B3C54) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B3C54) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B3784[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B332C; + extern s32 D_801B3740; + extern s16 D_801B3744; + extern s16 D_801B3748; + extern s16 D_801B374C; + extern s16 D_801B3750; + extern s32 D_801B3758; + extern s32 D_801B375C; + extern s32 D_801B376C; + extern s16 D_801B3770; + extern s16 D_801B3774; + extern s32 D_801B3778; + extern s32 D_801B3780; + extern s32 D_801B3784[10]; + extern s32 D_801B3AF0; + extern s16 D_801B3BA8; + extern s32 D_801B3BD4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B3BA8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B3740); + D_801B3740 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B374C, D_801B3750 ? 0x48 : 0x40); + (*(s16*)&D_801B3C54) = 2; + break; + case 0: + func_80179B28(D_801B3740); + D_801B3740 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B3744, D_801B3748 ? 0x48 : 0x40); + (*(s16*)&D_801B3C54) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B3AF0 != 0) { + func_80179B28(D_801B3740); + D_801B3740 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B3744, D_801B3748 ? 0x48 : 0x40); + (*(s16*)&D_801B3C54) = 1; + } else { + (*(s16*)&D_801B3C54) = 3; + } + break; + case 0x32: + func_80179B28(D_801B3740); + D_801B3740 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B3744, + D_801B3748 ? 0x48 : 0x40); + (*(s16*)&D_801B3C54) = 1; + break; + case 2: + func_80179B28(D_801B3740); + if (D_801B3758 != 0) { + D_801B3328 = D_801B3758; + D_801B3758 = 0; + (*(s16*)&D_801B3C54) = 3; + return; + } + (*(s16*)&D_801B3C54) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B3C54) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B3C54) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B3C54) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B3C54) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B3C54) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x1B: + D_801B3778 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B3C54) = 4; + D_801B332C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B3C54) = 5; + D_801B376C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B376C = (s32)func_8017A3B0; + (*(s16*)&D_801B3C54) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x24: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B3C54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B3C54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B3C54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3C54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3C54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B3C54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B3C54) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B3C54) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B3C54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B375C); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B375C); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B375C); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B375C); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x4E: + D_801B3780 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x2B: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B3C54) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B3BD4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x34: + (*(s16*)&D_801B3C54) = 3; + D_801B3328 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B3758 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B3C54) = 3; + D_801B3328 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B3C54) = 3; + D_801B3328 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B3328 = *(s32 *)(D_801B3328 + 4); + return; + case 0x37: + (*(s16*)&D_801B3C54) = 3; + D_801B3744 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B3748 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B3C54) = 3; + D_801B374C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B3750 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B3C54) = 3; + D_801B3744 = w1; + D_801B3748 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B3C54) = 3; + D_801B374C = w2; + D_801B3750 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x43: + D_801B376C = (s32)func_8017A3D8; + D_801B3774 = 0; + (*(s16*)&D_801B3C54) = 5; + D_801B3770 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B3C54) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B3C54) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B3784; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B3C54) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B3784; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B3C54) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B3784[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B3C54) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B3784; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B3C54) = 3; + break; + default: + break; + } +Lend: + D_801B3328 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B3754; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B3754 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B3754; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B3754 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B377C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B377C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B3738; + +s32 func_8017A3B0(void) { + switch (D_801B3738) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B3774; +extern short D_801B3770; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B3774) { + case 0: + func_800D0CA0(1); + D_801B3774 = D_801B3774 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B3770; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B3774 = D_801B3774 + 1; + if (D_801B3774 < 0x1E) { + return 0; + } + D_801B3774 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B37B4; + extern s16 D_801B37B6; + extern s16 D_801B37B8; + extern s16 D_801B37AC; + extern s16 D_801B37AE; + extern s16 D_801B37B0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B37B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B37B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B37B8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B37AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B37AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B37B0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B373C; +extern u16 D_801B37BC; +extern u16 D_801B37BE; +extern u16 D_801B37C0; +extern s16 D_801B3BD8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B3BD8 = 0; + D_801B373C = 0; + D_801B37BC = D_80126B5E; + D_801B37BE = D_80126B62; + D_801B37C0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188000[]; + extern s16 D_801B37B4; + extern s16 D_801B37AC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188000[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188000[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B37B4; + s16 *p78C = &D_801B37AC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B3BD8 = 1; + D_801B373C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B375C; + extern SV4_8017B368 D_801B3764; + extern s16 D_801B37B4; + extern s16 D_801B37AC; + extern u16 D_80188000; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B375C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B3764; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80188000)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80188000)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B37B4) = loc0; + (*(SV4_8017B368 *)&D_801B37AC) = loc1; + D_801B3BD8 = 1; + D_801B373C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80188000[]; + extern s16 D_801B37B4; + extern s16 D_801B37B6; + extern s16 D_801B37B8; + extern s16 D_801B37AC; + extern s16 D_801B37AE; + extern s16 D_801B37B0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80188000[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80188000[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B37B4; + s16 *p78C = &D_801B37AC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B37B6; + v798 = D_801B37B8; + v78C = *p78C; + v78E = D_801B37AE; + v790 = D_801B37B0; + __asm__ __volatile__(""); + D_801B3BD8 = 1; + D_801B373C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B373C; +extern s16 D_801B37B4; +extern s16 D_801B37B6; +extern s16 D_801B37B8; +extern s16 D_801B37AC; +extern s16 D_801B37AE; +extern s16 D_801B37B0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B373C = 0; + D_801B37B4 = (s16) D_80114F30; + D_801B37B6 = (s16) D_80114F34; + D_801B37B8 = (s16) D_80114F38; + D_801B37AC = (s16) D_80114F24; + D_801B37AE = (s16) D_80114F28; + D_801B37B0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B37CC; +extern s16 D_801B37CE; +extern s16 D_801B37D0; +extern s16 D_801B37D4; +extern s16 D_801B37D6; +extern s16 D_801B37D8; + +void func_8017B824(void) { + D_801B37CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B37CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B37D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B37D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B37D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B37D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B37CC; +extern s16 D_801B37CE; +extern s16 D_801B37D0; +extern s16 D_801B37D4; +extern s16 D_801B37D6; +extern s16 D_801B37D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B37CC; + D_80114F34 = D_801B37CE; + D_80114F38 = D_801B37D0; + D_80114F24 = D_801B37D4; + D_80114F28 = D_801B37D6; + D_80114F2C = D_801B37D8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B37B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B37AC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B37B4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B37AC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B37BC; +extern u16 D_801B37BE; +extern u16 D_801B37C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B373C; +extern short D_801B37C4; +extern short D_801B37C6; +extern short D_801B37C8; +extern s16 D_801B37B4; +extern s16 D_801B37B6; +extern s16 D_801B37B8; +extern s16 D_801B37AC; +extern s16 D_801B37AE; +extern s16 D_801B37B0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B37BC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B37BE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B37C0); + (*(s16 *)&D_801B37C4) = buf[0]; + (*(s16 *)&D_801B37C6) = buf[1]; + (*(s16 *)&D_801B37C8) = buf[2]; + D_801B37B4 = D_80114F30 + buf[0]; + D_801B373C = 0; + D_801B37B6 = D_80114F34 + buf[1]; + D_801B37B8 = D_80114F38 + buf[2]; + D_801B37AC = D_80114F24 + buf[0]; + D_801B37AE = D_80114F28 + buf[1]; + D_801B37B0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B375C; +extern SV4 D_801B3764; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B3764) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B375C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B3764 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B3764)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B375C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B3764) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B3784[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B3784; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B373C; +extern s16 D_801B3BD8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B373C = D_801B373C + 1; + if (D_801B373C >= 0x1F) { + D_801B3BD8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B373C; +extern s16 D_801B3BD8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B373C = D_801B373C + 1; + if (0x18 < D_801B373C) { + func_8012A4BC(); + D_801B3BD8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B373C; +extern void (*D_801B3780)(void); +extern short D_801B37C4; +extern short D_801B37C6; +extern short D_801B37C8; +extern s16 D_801B3BD8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B373C = D_801B373C + 1; + if (D_801B373C >= 0x19) { + if (D_801B3780 != 0) { + (*D_801B3780)(); + } else { + D_80114F30 = D_80114F30 + D_801B37C4; + D_80114F34 = D_80114F34 + D_801B37C6; + D_80114F38 = D_80114F38 + D_801B37C8; + D_80114F24 = D_80114F24 + D_801B37C4; + D_80114F28 = D_80114F28 + D_801B37C6; + D_80114F2C = D_80114F2C + D_801B37C8; + func_8012A4BC(); + } + D_801B3BD8 = 0; + } +} + + + +extern void (*D_801880A0[])(void); + +void func_8017BE60(void *a0) { + D_801880A0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017CECC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D258); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D4D0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D618); + + +extern void (*D_801881BC[])(void); + +void func_8017D798(void *a0) { + D_801881BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D7D4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D820); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D914); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017D994); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DA48); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DAB4); + +extern void func_8012C218(void *a0); + void func_8017DB40(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DB60); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DBB4); + + +extern void (*D_80188214[])(void); + +void func_8017DBF0(void *a0) { + D_80188214[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DC2C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DC7C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DCD8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DD5C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DEC4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017DF10); + + +extern void (*D_80188228[])(void); + +void func_8017E21C(void *a0) { + D_80188228[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E258); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E298); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E308); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E468); + + +extern void (*D_8018823C[])(void); + +void func_8017E4BC(void *a0) { + D_8018823C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E4F8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E5AC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E608); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E7E8); + + +extern void (*D_8018830C[])(void); + +void func_8017E858(void *a0) { + D_8018830C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E894); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E8D8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017E8FC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E93C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E9B8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188320[])(void); + +void func_8017E9D8(void *a0) { + D_80188320[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EA14); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EA88); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EAB0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EAD8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EB70); + + +extern void (*D_8018833C[])(void); + +void func_8017EC08(void *a0) { + D_8018833C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EC44); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017ECE4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017ED84); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EF1C); + + +s32 func_8017EF4C(void) { + return 85; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EF54); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EFAC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017EFF4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F07C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F0E0); + + +extern void (*D_801883B0[])(void); + +void func_8017F130(void *a0) { + D_801883B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F16C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F228); + +void func_8017F5C4(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); + *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F5E0); + + +extern void (*D_801883E8[])(void); + +void func_8017F620(void *a0) { + D_801883E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F65C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F930); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F9AC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017F9F4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FA1C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FB78); + +void func_8017FBEC(s32 *a0) { + *(s32 *)((s32)a0 + 0x0) = 0x80404080; + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FBFC); + + +extern void (*D_801886F8[])(void); + +void func_8017FC88(void *a0) { + D_801886F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s16 a1); + extern s32 func_8012AD50(void *a0); + void func_8017FCC4(s32 *a0) { + func_8012BF4C(a0, 0); + ((void (*)(void *))func_8012AD50)((void *)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FCF8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FE48); + + +extern void (*D_80188734[])(void); + +void func_8017FF34(void *a0) { + D_80188734[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8017FF70); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180054); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801800C0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801801AC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180208); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180274); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801802D0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801804CC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180530); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018056C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801805D0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018070C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180750); + +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 D_801999AC; + +void func_80180878(s32 arg0) { + ((void (*)(s32, s32))func_8012A8B0)(arg0, &D_801999AC); + ((void (*)(s32, s32))func_8012AD44)(arg0, 0xA); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801808B4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180948); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801809B0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180A30); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180AF0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180BA4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180C74); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180D94); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180E30); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180EEC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180F74); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80180FF8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181130); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8002AC00(int arg0); + +void func_801811BC(void) { + func_8002D4C8(0x853, 0); + func_8002AC00(0x13); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801811E8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181248); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801812B8); + + +extern void (*D_80192E8C[])(void); + +void func_801813F0(void *a0) { + D_80192E8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018142C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181548); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181594); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181678); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181744); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181850); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801818A8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181968); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181A20); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181AD4); + +extern void func_8012B23C(s32 arg); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181B6C(void *a0) { + func_8012B23C((s32)a0); + ((s32 (*)(s32, s32))func_8012AD44)((s32)a0, 1); + } + + +extern void func_8012B21C(void *a0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181BA0(s32 param_1) { + ((void (*)(s32))func_8012B21C)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 2); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181BD4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181C9C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181D1C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181DAC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80181EE8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182014); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182170); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801821E0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182320); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801823F4); + +void func_801824A8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801824B0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182574); + + +extern void (*D_8019A170[])(void); + +void func_801826EC(void *a0) { + D_8019A170[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019A184[])(void); + +void func_80182728(void *a0) { + D_8019A184[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_8019A15C; +extern s32 D_8019A168; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_80182764(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_8019A15C); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_8019A168, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_8019A178; + +void func_80182844(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_8019A178); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_8019A42C; + +void func_80182960(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_8019A42C); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801829BC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182B9C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182CAC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182DC4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182E34); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182E9C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182ED4); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + extern void func_8002AC00(s32 arg0); + void func_80182F7C(void) { + func_8002D4C8(0xA9E, 0); + func_8002AC00(0x14); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182FA8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80182FF0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018308C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183130); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801831FC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801832A8); + + +// @class: plumbing +// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out +extern void func_8012A828(s32 a0, void *a1); +extern void D_801B0750; + +void func_80183318(s32 arg0) +{ + if ((M2C_FIELD(arg0, u8 *, 0xC3) & 1) && (M2C_FIELD(arg0, void **, 0x90) != &D_801B0750)) { + func_8012A828(arg0, &D_801B0750); + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183360); + + +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801B0BD8; + +void func_801833EC(s32 a0) { + *(s16 *)(a0 + 0x2) = 2; + func_8012A828(a0, &D_801B0BD8); + *(s32 *)(a0 + 0x1C) = 0x14; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018342C); + + +// @class: schedule +// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018352C else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched. +extern s32 func_8012BCCC(s32 a0); +extern void func_8018352C(s32 param_1); +extern void func_8012A828(s32 a0, void *a1); +extern u8 D_801B0B30; + +s32 func_8018347C(s32 param_1, s32 param_2, s32 param_3) { + s32 iVar2; + s16 sVar1; + + iVar2 = func_8012BCCC(param_1); + if (param_2 >= iVar2) { + func_8018352C(param_1); + return 1; + } + sVar1 = *(s16 *)(param_1 + 0xdc) + 1; + *(s16 *)(param_1 + 0xdc) = sVar1; + if (sVar1 < 0x79) { + return 0; + } + if (param_3 >= iVar2) { + return 0; + } + *(s16 *)(param_1 + 2) = 1; + func_8012A828(param_1, &D_801B0B30); + return 1; +} + + + +// @class: plumbing +// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay) +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142414(s32 a0, s16 a1); +extern u8 D_801B08F0; + +void func_8018352C(s32 param_1) { + *(s16 *)(param_1 + 2) = 4; + func_8012A828(param_1, &D_801B08F0); + *(s32 *)(param_1 + 0x1c) = 0x1e; + if (*(s16 *)(param_1 + 0xfc) == 0) { + *(s16 *)(param_1 + 0xfc) = 1; + ((void (*)(s32, s32))func_80142414)(param_1, -0x96); + } +} + + +void func_80183588(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0x14; + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_8018359C); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183750); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183798); + + +extern void (*D_801A8C90[])(void); + +void func_801838E4(void *a0) { + D_801A8C90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183920); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801839A8); + + +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); + +void func_80183A80(u8 *a0) { + u8 *p = *(u8 **)(a0 + 0x20); + u16 v = *(u16 *)(a0 + 0xFC); + *(s16 *)(a0 + 0x2) = 2; + *(s32 *)(a0 + 0x1C) = 0x50; + *(s16 *)(p + 0x12) = v; + func_8012B2CC((s32)a0); + func_8012B200(a0); + func_8012B178((s32)a0, 0xFFF00000); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183AD8); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C218(void *a0); + void func_80183B64(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xcc); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C218)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183B9C); + +extern s32 func_8012BEE8(s32 arg); + extern void func_8018342C(s32 a0); + void func_80183C08(s32 a0) { + if (func_8012BEE8(a0)) { + ((void (*)(s32))func_8018342C)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183C40); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183CA4); + +void func_80183CFC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183D04); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183DBC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183E2C); + + +extern void (*D_801B0DF4[])(void); + +void func_80183FA0(void *a0) { + D_801B0DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80183FDC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801840D8); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80184368); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801844FC); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80184554); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_801845D0); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_80178D40", func_80184614); + + diff --git a/src/ov_SC04_005/ov_SC04_005_jr_801734BC.c b/src/ov_SC04_005/ov_SC04_005_jr_801734BC.c index 10573eaed..f8a601363 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_801734BC.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_801734BC.c @@ -3084,1483 +3084,3 @@ void func_80178D18(void) { D_801C232C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C192C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C192C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C192C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C192C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C1954; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C1954 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C1910; - -s32 func_8017A3B0(void) { - switch (D_801C1910) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C194C; -extern short D_801C1948; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C194C) { - case 0: - func_800D0CA0(1); - D_801C194C = D_801C194C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C1948; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C194C = D_801C194C + 1; - if (D_801C194C < 0x1E) { - return 0; - } - D_801C194C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C198C; - extern s16 D_801C198E; - extern s16 D_801C1990; - extern s16 D_801C1984; - extern s16 D_801C1986; - extern s16 D_801C1988; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C198C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C198E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C1990, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C1984, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C1986, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C1988, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C1914; -extern u16 D_801C1994; -extern u16 D_801C1996; -extern u16 D_801C1998; -extern s16 D_801C22B8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C22B8 = 0; - D_801C1914 = 0; - D_801C1994 = D_80126B5E; - D_801C1996 = D_80126B62; - D_801C1998 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B434[]; - extern s16 D_801C198C; - extern s16 D_801C1984; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B434[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B434[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C198C; - s16 *p78C = &D_801C1984; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C22B8 = 1; - D_801C1914 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C1934; - extern SV4_8017B368 D_801C193C; - extern s16 D_801C198C; - extern s16 D_801C1984; - extern u16 D_8018B434; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C1934; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C193C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B434)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B434)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C198C) = loc0; - (*(SV4_8017B368 *)&D_801C1984) = loc1; - D_801C22B8 = 1; - D_801C1914 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018B434[]; - extern s16 D_801C198C; - extern s16 D_801C198E; - extern s16 D_801C1990; - extern s16 D_801C1984; - extern s16 D_801C1986; - extern s16 D_801C1988; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018B434[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018B434[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C198C; - s16 *p78C = &D_801C1984; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C198E; - v798 = D_801C1990; - v78C = *p78C; - v78E = D_801C1986; - v790 = D_801C1988; - __asm__ __volatile__(""); - D_801C22B8 = 1; - D_801C1914 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C1914; -extern s16 D_801C198C; -extern s16 D_801C198E; -extern s16 D_801C1990; -extern s16 D_801C1984; -extern s16 D_801C1986; -extern s16 D_801C1988; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C1914 = 0; - D_801C198C = (s16) D_80114F30; - D_801C198E = (s16) D_80114F34; - D_801C1990 = (s16) D_80114F38; - D_801C1984 = (s16) D_80114F24; - D_801C1986 = (s16) D_80114F28; - D_801C1988 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C19A4; -extern s16 D_801C19A6; -extern s16 D_801C19A8; -extern s16 D_801C19AC; -extern s16 D_801C19AE; -extern s16 D_801C19B0; - -void func_8017B824(void) { - D_801C19A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C19A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C19A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C19AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C19AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C19B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C19A4; -extern s16 D_801C19A6; -extern s16 D_801C19A8; -extern s16 D_801C19AC; -extern s16 D_801C19AE; -extern s16 D_801C19B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C19A4; - D_80114F34 = D_801C19A6; - D_80114F38 = D_801C19A8; - D_80114F24 = D_801C19AC; - D_80114F28 = D_801C19AE; - D_80114F2C = D_801C19B0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C198C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C1984) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C198C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C1984) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C1994; -extern u16 D_801C1996; -extern u16 D_801C1998; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C1914; -extern short D_801C199C; -extern short D_801C199E; -extern short D_801C19A0; -extern s16 D_801C198C; -extern s16 D_801C198E; -extern s16 D_801C1990; -extern s16 D_801C1984; -extern s16 D_801C1986; -extern s16 D_801C1988; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C1994); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C1996); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C1998); - (*(s16 *)&D_801C199C) = buf[0]; - (*(s16 *)&D_801C199E) = buf[1]; - (*(s16 *)&D_801C19A0) = buf[2]; - D_801C198C = D_80114F30 + buf[0]; - D_801C1914 = 0; - D_801C198E = D_80114F34 + buf[1]; - D_801C1990 = D_80114F38 + buf[2]; - D_801C1984 = D_80114F24 + buf[0]; - D_801C1986 = D_80114F28 + buf[1]; - D_801C1988 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C1934; -extern SV4 D_801C193C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C193C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C1934 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C193C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C193C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C1934) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C193C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C195C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C195C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C1914; -extern s16 D_801C22B8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C1914 = D_801C1914 + 1; - if (D_801C1914 >= 0x1F) { - D_801C22B8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C1914; -extern s16 D_801C22B8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C1914 = D_801C1914 + 1; - if (0x18 < D_801C1914) { - func_8012A4BC(); - D_801C22B8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C1914; -extern void (*D_801C1958)(void); -extern short D_801C199C; -extern short D_801C199E; -extern short D_801C19A0; -extern s16 D_801C22B8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C1914 = D_801C1914 + 1; - if (D_801C1914 >= 0x19) { - if (D_801C1958 != 0) { - (*D_801C1958)(); - } else { - D_80114F30 = D_80114F30 + D_801C199C; - D_80114F34 = D_80114F34 + D_801C199E; - D_80114F38 = D_80114F38 + D_801C19A0; - D_80114F24 = D_80114F24 + D_801C199C; - D_80114F28 = D_80114F28 + D_801C199E; - D_80114F2C = D_80114F2C + D_801C19A0; - func_8012A4BC(); - } - D_801C22B8 = 0; - } -} - - - -extern void (*D_8018B4D4[])(void); - -void func_8017BE60(void *a0) { - D_8018B4D4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017CDF4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017CE3C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017CEF4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D098); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D0B8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D1E8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D574); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D7EC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017D934); - - -extern void (*D_8018B694[])(void); - -void func_8017DAB4(void *a0) { - D_8018B694[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DAF0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DC30); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DCB0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DD64); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DDD0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DE5C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DE7C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DED0); - - -extern void (*D_8018B6EC[])(void); - -void func_8017DF0C(void *a0) { - D_8018B6EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DF48); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DF98); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017DFF4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E078); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E1E0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E22C); - - -extern void (*D_8018B700[])(void); - -void func_8017E538(void *a0) { - D_8018B700[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E574); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E5B4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E624); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E6B0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E784); - - -extern void (*D_8018B714[])(void); - -void func_8017E7D8(void *a0) { - D_8018B714[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E814); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E8C8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017E924); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EA94); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EB04); - - -extern void (*D_8018B7BC[])(void); - -void func_8017EB74(void *a0) { - D_8018B7BC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EBB0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017EBF4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EC18); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EC58(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017ECD4(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018B7D0[])(void); - -void func_8017ECF4(void *a0) { - D_8018B7D0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017ED30); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EDA4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EDCC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EDF4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EE8C); - - -extern void (*D_8018B7EC[])(void); - -void func_8017EF24(void *a0) { - D_8018B7EC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EF60); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017EFA8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F048); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F1E0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F210); - -extern s32 func_800D0F8C(s32 arg); - s32 func_8017F270(void) { - return func_800D0F8C(0x62) != 0; - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F290); - -void func_8017F350(void) { -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_8018B844; - -void func_8017F358(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_8018B844); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F390); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F458); - -s32 func_8017F4B4(void) { - return 0x55; - } - - - -extern void (*D_8018B920[])(void); - -void func_8017F4BC(void *a0) { - D_8018B920[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F4F8); - -void func_8017F560(void) { -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_8018B908; - -void func_8017F568(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_8018B908); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F5A0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F5E0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F644); - - -extern void (*D_8018B930[])(void); - -void func_8017F6D4(void *a0) { - D_8018B930[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F710); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F744); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F894); - - -extern void (*D_8018B96C[])(void); - -void func_8017F980(void *a0) { - D_8018B96C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017F9BC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FAA0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FB0C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FBF8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FC50); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FCA0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FD0C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FE60); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FEB4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FED8); - - -extern void (*D_801999B4[])(void); - -void func_8017FF1C(void *a0) { - D_801999B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8017FF58); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801800A4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018011C); - - -void func_8018014C(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180160); - -extern void (*D_801999EC[])(void); - -void func_801801C8(void *a0) { - D_801999EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180204); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180250); - -void func_80180298(void) { -} - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801802A0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180404); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180780); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018093C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801809B8); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80180B6C(void *arg0) { - ((void (*)(void *, int))func_8012AD44)(arg0, 0x3); - } - - -s32 func_80180B8C(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x3; - } - - - -extern void (*D_80199B40[])(void); - -void func_80180BA0(void *a0) { - D_80199B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180BDC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180C68); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180DD8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180E48); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180EFC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80180FF8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181054); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181470); - -void func_80181990(void) { -} - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181998); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801819E0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181CB0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80181FA0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801820B8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182128); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182190); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801821C8); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - extern void func_8002AC00(s32 arg0); - void func_80182270(void) { - func_8002D4C8(0xA9E, 0); - func_8002AC00(0x14); - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018229C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801822E4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182380); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182424); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801824F0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018259C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182728); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801828B0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801829C8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182A44); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182AAC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182B10); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182B7C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182C20); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182D40); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80182E54); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183094); - - -extern void (*D_801ADC68[])(void); - -void func_801831B4(void *a0) { - D_801ADC68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801831F0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183228); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018323C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801832D8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801832E4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018334C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801833BC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801834E4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183564); - - -extern void (*D_801B0AF4[])(void); - -void func_80183634(void *a0) { - D_801B0AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183670); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183744); - -void func_8018376C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183774); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801838C0); - - -extern void func_8012C218(void *a0); - s32 func_801839E0(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183A0C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183A1C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183A2C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80183A6C(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -extern s16 func_80174764(void); - s32 func_80183AA0(void) { - return ((u32)(((s32 (*)(void))func_80174764)() ^ 1)) < 1; - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183AC4); - - -extern void (*D_801B0B1C[])(void); - -void func_80183B28(void *a0) { - D_801B0B1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183B64); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183BEC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183CAC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183D1C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80183E14); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801840A8); - -void func_801841D4(void *a0) { - void *v1 = *(void **)((char *)a0 + 0x20); - *(unsigned char *)((char *)a0 + 0xC1) = 0; - *(short *)((char *)a0 + 0x5E) = 0; - *(short *)((char *)a0 + 0x5C) = 0; - *(unsigned short *)((char *)a0 + 0x102) = 0x3; - *(unsigned short *)((char *)v1 + 0x2C) |= 0x10; - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184200); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184338); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184458); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801844F8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184634); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801846E4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018472C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801847C8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018480C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801849F0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184A38); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184C70); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184CB4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184E38); - -extern void func_8012CBCC(s32 a0); - void func_80184E78(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184EB0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184F08); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801BE63C; - -void func_80184F70(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801BE63C); - *(s16 *)((u8 *)arg0 + 0x2) = 0xe; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80184FA8); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801BE6A4; - -void func_80185060(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801BE6A4); - *(s16 *)((u8 *)arg0 + 0x2) = 0x10; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185098); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801BE75C; - void func_8018514C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 18; - func_8012A828((int)arg0, (int)&D_801BE75C); - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185178); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185368); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801853A8); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018540C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185448); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801854C8); - -extern void func_8002A04C(s32 a0); - extern void func_8012C098(void); - void func_801854FC(s32 param_1) { - ((void (*)(void))func_8002A04C)(); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018552C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801855A0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801856C0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185774); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185914); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185A08); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185B70); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185CEC); - - -extern void (*D_801B5B94[])(void); - -void func_80185EA8(void *a0) { - D_801B5B94[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185EE4); - -void func_80185F40(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80185F54); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80186164); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801861A4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801864DC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80186544); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801865BC); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018676C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801869D4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80186C80); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80186DCC); - - -extern void (*D_801B5BEC[])(void); - -void func_80186FA8(void *a0) { - D_801B5BEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80186FE4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187060); - -extern void func_8012B23C(s32 arg0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_801870A0(s32 param_1) { - ((void (*)(s32))func_8012B23C)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 1); - } - - -extern void func_8012B21C(void *a0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_801870D4(s32 param_1) { - ((void (*)(s32))func_8012B21C)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 2); - } - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187108); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801871D0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187250); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801872E0); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801873C4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_8018741C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187548); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801876A4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187714); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187854); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_80187928); - -void func_801879DC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_801734BC", func_801879E4); - diff --git a/src/ov_SC04_005/ov_SC04_005_jr_80178D40.c b/src/ov_SC04_005/ov_SC04_005_jr_80178D40.c new file mode 100644 index 000000000..5fe1be2ad --- /dev/null +++ b/src/ov_SC04_005/ov_SC04_005_jr_80178D40.c @@ -0,0 +1,4929 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018ACDC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C0C80; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018ACD0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018AD14[]; +extern unsigned short D_8018AD1C[]; +extern unsigned short D_8018AD24[]; +extern unsigned char D_801C0C88[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C0C80; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018AD2C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C0DBC; +extern M2C_UNK D_801C0DC0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C0D48; +extern void (*D_8018AD5C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C0DC4[]; +extern u8 D_801C0DCC[]; +extern u8 D_801C0D7C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018AD64[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018AD80[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018AD88[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018ADF0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018AD94; +extern u8 D_8018ADA0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018AE24[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018AE2C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018AE80[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018AEB4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018AEA4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018AED0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018AF48[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018AF50[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018AF58[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018AF60[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018AF68[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018AF70[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018AF7C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018AF88[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018AF94[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018AFA4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018AFB4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018AFBC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018AFC4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018AFCC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018AFD4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018AFDC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018AFE4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018AFEC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018AFF4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018AFFC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018B004[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018B00C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018B014[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018B01C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018B024[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018B02C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018B034[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018B03C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018B044[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018B04C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018B054[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018B05C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018B064[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018B0A8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018B06C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018B0D8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018B114[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018B16C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018B17C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018B184[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018B2EC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018B2F8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C0378; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C22B8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C1500; +extern short D_801C232C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C232C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C232C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C1500 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C232C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C2288 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C2288 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C232C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C232C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C195C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C1504; + extern s32 D_801C1918; + extern s16 D_801C191C; + extern s16 D_801C1920; + extern s16 D_801C1924; + extern s16 D_801C1928; + extern s32 D_801C1930; + extern s32 D_801C1934; + extern s32 D_801C1944; + extern s16 D_801C1948; + extern s16 D_801C194C; + extern s32 D_801C1950; + extern s32 D_801C1958; + extern s32 D_801C195C[10]; + extern s32 D_801C21D0; + extern s16 D_801C2288; + extern s32 D_801C22B4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C2288; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C1918); + D_801C1918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C1924, D_801C1928 ? 0x48 : 0x40); + (*(s16*)&D_801C232C) = 2; + break; + case 0: + func_80179B28(D_801C1918); + D_801C1918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C191C, D_801C1920 ? 0x48 : 0x40); + (*(s16*)&D_801C232C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C21D0 != 0) { + func_80179B28(D_801C1918); + D_801C1918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C191C, D_801C1920 ? 0x48 : 0x40); + (*(s16*)&D_801C232C) = 1; + } else { + (*(s16*)&D_801C232C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C1918); + D_801C1918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C191C, + D_801C1920 ? 0x48 : 0x40); + (*(s16*)&D_801C232C) = 1; + break; + case 2: + func_80179B28(D_801C1918); + if (D_801C1930 != 0) { + D_801C1500 = D_801C1930; + D_801C1930 = 0; + (*(s16*)&D_801C232C) = 3; + return; + } + (*(s16*)&D_801C232C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C232C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C232C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C232C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C232C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C232C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C232C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C232C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C232C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C232C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C232C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C232C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x1B: + D_801C1950 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C232C) = 4; + D_801C1504 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C232C) = 5; + D_801C1944 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C1944 = (s32)func_8017A3B0; + (*(s16*)&D_801C232C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x24: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C232C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C232C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C232C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C232C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C232C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C232C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C232C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C232C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C232C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C1934); + (*(s16*)&D_801C232C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C1934); + (*(s16*)&D_801C232C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C1934); + (*(s16*)&D_801C232C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C1934); + (*(s16*)&D_801C232C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + break; + case 0x4E: + D_801C1958 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C232C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C22B4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C232C) = 3; + break; + case 0x34: + (*(s16*)&D_801C232C) = 3; + D_801C1500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C1930 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C232C) = 3; + D_801C1500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C232C) = 3; + D_801C1500 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C1500 = *(s32 *)(D_801C1500 + 4); + return; + case 0x37: + (*(s16*)&D_801C232C) = 3; + D_801C191C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C1920 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C232C) = 3; + D_801C1924 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C1928 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C232C) = 3; + D_801C191C = w1; + D_801C1920 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C232C) = 3; + D_801C1924 = w2; + D_801C1928 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + case 0x43: + D_801C1944 = (s32)func_8017A3D8; + D_801C194C = 0; + (*(s16*)&D_801C232C) = 5; + D_801C1948 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C232C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C232C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C232C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C195C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C232C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C195C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C232C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C195C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C232C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C195C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C232C) = 3; + break; + default: + break; + } +Lend: + D_801C1500 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C192C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C192C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C192C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C192C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C1954; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C1954 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C1910; + +s32 func_8017A3B0(void) { + switch (D_801C1910) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C194C; +extern short D_801C1948; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C194C) { + case 0: + func_800D0CA0(1); + D_801C194C = D_801C194C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C1948; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C194C = D_801C194C + 1; + if (D_801C194C < 0x1E) { + return 0; + } + D_801C194C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C198C; + extern s16 D_801C198E; + extern s16 D_801C1990; + extern s16 D_801C1984; + extern s16 D_801C1986; + extern s16 D_801C1988; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C198C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C198E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C1990, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C1984, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C1986, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C1988, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C1914; +extern u16 D_801C1994; +extern u16 D_801C1996; +extern u16 D_801C1998; +extern s16 D_801C22B8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C22B8 = 0; + D_801C1914 = 0; + D_801C1994 = D_80126B5E; + D_801C1996 = D_80126B62; + D_801C1998 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B434[]; + extern s16 D_801C198C; + extern s16 D_801C1984; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B434[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B434[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C198C; + s16 *p78C = &D_801C1984; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C22B8 = 1; + D_801C1914 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C1934; + extern SV4_8017B368 D_801C193C; + extern s16 D_801C198C; + extern s16 D_801C1984; + extern u16 D_8018B434; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C1934; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C193C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018B434)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018B434)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C198C) = loc0; + (*(SV4_8017B368 *)&D_801C1984) = loc1; + D_801C22B8 = 1; + D_801C1914 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018B434[]; + extern s16 D_801C198C; + extern s16 D_801C198E; + extern s16 D_801C1990; + extern s16 D_801C1984; + extern s16 D_801C1986; + extern s16 D_801C1988; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018B434[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018B434[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C198C; + s16 *p78C = &D_801C1984; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C198E; + v798 = D_801C1990; + v78C = *p78C; + v78E = D_801C1986; + v790 = D_801C1988; + __asm__ __volatile__(""); + D_801C22B8 = 1; + D_801C1914 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C1914; +extern s16 D_801C198C; +extern s16 D_801C198E; +extern s16 D_801C1990; +extern s16 D_801C1984; +extern s16 D_801C1986; +extern s16 D_801C1988; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C1914 = 0; + D_801C198C = (s16) D_80114F30; + D_801C198E = (s16) D_80114F34; + D_801C1990 = (s16) D_80114F38; + D_801C1984 = (s16) D_80114F24; + D_801C1986 = (s16) D_80114F28; + D_801C1988 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C19A4; +extern s16 D_801C19A6; +extern s16 D_801C19A8; +extern s16 D_801C19AC; +extern s16 D_801C19AE; +extern s16 D_801C19B0; + +void func_8017B824(void) { + D_801C19A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C19A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C19A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C19AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C19AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C19B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C19A4; +extern s16 D_801C19A6; +extern s16 D_801C19A8; +extern s16 D_801C19AC; +extern s16 D_801C19AE; +extern s16 D_801C19B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C19A4; + D_80114F34 = D_801C19A6; + D_80114F38 = D_801C19A8; + D_80114F24 = D_801C19AC; + D_80114F28 = D_801C19AE; + D_80114F2C = D_801C19B0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C198C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C1984) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C198C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C1984) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C1994; +extern u16 D_801C1996; +extern u16 D_801C1998; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C1914; +extern short D_801C199C; +extern short D_801C199E; +extern short D_801C19A0; +extern s16 D_801C198C; +extern s16 D_801C198E; +extern s16 D_801C1990; +extern s16 D_801C1984; +extern s16 D_801C1986; +extern s16 D_801C1988; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C1994); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C1996); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C1998); + (*(s16 *)&D_801C199C) = buf[0]; + (*(s16 *)&D_801C199E) = buf[1]; + (*(s16 *)&D_801C19A0) = buf[2]; + D_801C198C = D_80114F30 + buf[0]; + D_801C1914 = 0; + D_801C198E = D_80114F34 + buf[1]; + D_801C1990 = D_80114F38 + buf[2]; + D_801C1984 = D_80114F24 + buf[0]; + D_801C1986 = D_80114F28 + buf[1]; + D_801C1988 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C1934; +extern SV4 D_801C193C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C193C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C1934 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C193C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C193C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C1934) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C193C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C195C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C195C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C1914; +extern s16 D_801C22B8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C1914 = D_801C1914 + 1; + if (D_801C1914 >= 0x1F) { + D_801C22B8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C1914; +extern s16 D_801C22B8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C1914 = D_801C1914 + 1; + if (0x18 < D_801C1914) { + func_8012A4BC(); + D_801C22B8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C1914; +extern void (*D_801C1958)(void); +extern short D_801C199C; +extern short D_801C199E; +extern short D_801C19A0; +extern s16 D_801C22B8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C1914 = D_801C1914 + 1; + if (D_801C1914 >= 0x19) { + if (D_801C1958 != 0) { + (*D_801C1958)(); + } else { + D_80114F30 = D_80114F30 + D_801C199C; + D_80114F34 = D_80114F34 + D_801C199E; + D_80114F38 = D_80114F38 + D_801C19A0; + D_80114F24 = D_80114F24 + D_801C199C; + D_80114F28 = D_80114F28 + D_801C199E; + D_80114F2C = D_80114F2C + D_801C19A0; + func_8012A4BC(); + } + D_801C22B8 = 0; + } +} + + + +extern void (*D_8018B4D4[])(void); + +void func_8017BE60(void *a0) { + D_8018B4D4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017CDF4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017CE3C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017CEF4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D098); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D0B8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D1E8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D574); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D7EC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017D934); + + +extern void (*D_8018B694[])(void); + +void func_8017DAB4(void *a0) { + D_8018B694[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DAF0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DC30); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DCB0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DD64); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DDD0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DE5C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DE7C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DED0); + + +extern void (*D_8018B6EC[])(void); + +void func_8017DF0C(void *a0) { + D_8018B6EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DF48); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DF98); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017DFF4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E078); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E1E0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E22C); + + +extern void (*D_8018B700[])(void); + +void func_8017E538(void *a0) { + D_8018B700[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E574); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E5B4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E624); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E6B0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E784); + + +extern void (*D_8018B714[])(void); + +void func_8017E7D8(void *a0) { + D_8018B714[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E814); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E8C8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017E924); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EA94); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EB04); + + +extern void (*D_8018B7BC[])(void); + +void func_8017EB74(void *a0) { + D_8018B7BC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EBB0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017EBF4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EC18); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EC58(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017ECD4(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018B7D0[])(void); + +void func_8017ECF4(void *a0) { + D_8018B7D0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017ED30); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EDA4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EDCC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EDF4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EE8C); + + +extern void (*D_8018B7EC[])(void); + +void func_8017EF24(void *a0) { + D_8018B7EC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EF60); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017EFA8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F048); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F1E0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F210); + +extern s32 func_800D0F8C(s32 arg); + s32 func_8017F270(void) { + return func_800D0F8C(0x62) != 0; + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F290); + +void func_8017F350(void) { +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_8018B844; + +void func_8017F358(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_8018B844); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F390); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F458); + +s32 func_8017F4B4(void) { + return 0x55; + } + + + +extern void (*D_8018B920[])(void); + +void func_8017F4BC(void *a0) { + D_8018B920[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F4F8); + +void func_8017F560(void) { +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_8018B908; + +void func_8017F568(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_8018B908); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F5A0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F5E0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F644); + + +extern void (*D_8018B930[])(void); + +void func_8017F6D4(void *a0) { + D_8018B930[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F710); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F744); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F894); + + +extern void (*D_8018B96C[])(void); + +void func_8017F980(void *a0) { + D_8018B96C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017F9BC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FAA0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FB0C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FBF8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FC50); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FCA0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FD0C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FE60); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FEB4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FED8); + + +extern void (*D_801999B4[])(void); + +void func_8017FF1C(void *a0) { + D_801999B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8017FF58); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801800A4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018011C); + + +void func_8018014C(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180160); + +extern void (*D_801999EC[])(void); + +void func_801801C8(void *a0) { + D_801999EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180204); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180250); + +void func_80180298(void) { +} + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801802A0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180404); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180780); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018093C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801809B8); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180B6C(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x3); + } + + +s32 func_80180B8C(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x3; + } + + + +extern void (*D_80199B40[])(void); + +void func_80180BA0(void *a0) { + D_80199B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180BDC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180C68); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180DD8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180E48); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180EFC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80180FF8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181054); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181470); + +void func_80181990(void) { +} + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181998); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801819E0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181CB0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80181FA0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801820B8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182128); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182190); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801821C8); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + extern void func_8002AC00(s32 arg0); + void func_80182270(void) { + func_8002D4C8(0xA9E, 0); + func_8002AC00(0x14); + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018229C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801822E4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182380); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182424); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801824F0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018259C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182728); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801828B0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801829C8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182A44); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182AAC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182B10); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182B7C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182C20); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182D40); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80182E54); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183094); + + +extern void (*D_801ADC68[])(void); + +void func_801831B4(void *a0) { + D_801ADC68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801831F0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183228); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018323C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801832D8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801832E4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018334C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801833BC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801834E4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183564); + + +extern void (*D_801B0AF4[])(void); + +void func_80183634(void *a0) { + D_801B0AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183670); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183744); + +void func_8018376C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183774); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801838C0); + + +extern void func_8012C218(void *a0); + s32 func_801839E0(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183A0C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183A1C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183A2C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80183A6C(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +extern s16 func_80174764(void); + s32 func_80183AA0(void) { + return ((u32)(((s32 (*)(void))func_80174764)() ^ 1)) < 1; + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183AC4); + + +extern void (*D_801B0B1C[])(void); + +void func_80183B28(void *a0) { + D_801B0B1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183B64); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183BEC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183CAC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183D1C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80183E14); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801840A8); + +void func_801841D4(void *a0) { + void *v1 = *(void **)((char *)a0 + 0x20); + *(unsigned char *)((char *)a0 + 0xC1) = 0; + *(short *)((char *)a0 + 0x5E) = 0; + *(short *)((char *)a0 + 0x5C) = 0; + *(unsigned short *)((char *)a0 + 0x102) = 0x3; + *(unsigned short *)((char *)v1 + 0x2C) |= 0x10; + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184200); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184338); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184458); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801844F8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184634); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801846E4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018472C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801847C8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018480C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801849F0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184A38); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184C70); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184CB4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184E38); + +extern void func_8012CBCC(s32 a0); + void func_80184E78(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184EB0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184F08); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801BE63C; + +void func_80184F70(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801BE63C); + *(s16 *)((u8 *)arg0 + 0x2) = 0xe; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80184FA8); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801BE6A4; + +void func_80185060(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801BE6A4); + *(s16 *)((u8 *)arg0 + 0x2) = 0x10; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185098); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801BE75C; + void func_8018514C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 18; + func_8012A828((int)arg0, (int)&D_801BE75C); + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185178); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185368); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801853A8); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018540C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185448); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801854C8); + +extern void func_8002A04C(s32 a0); + extern void func_8012C098(void); + void func_801854FC(s32 param_1) { + ((void (*)(void))func_8002A04C)(); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018552C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801855A0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801856C0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185774); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185914); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185A08); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185B70); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185CEC); + + +extern void (*D_801B5B94[])(void); + +void func_80185EA8(void *a0) { + D_801B5B94[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185EE4); + +void func_80185F40(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80185F54); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80186164); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801861A4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801864DC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80186544); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801865BC); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018676C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801869D4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80186C80); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80186DCC); + + +extern void (*D_801B5BEC[])(void); + +void func_80186FA8(void *a0) { + D_801B5BEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80186FE4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187060); + +extern void func_8012B23C(s32 arg0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_801870A0(s32 param_1) { + ((void (*)(s32))func_8012B23C)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 1); + } + + +extern void func_8012B21C(void *a0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_801870D4(s32 param_1) { + ((void (*)(s32))func_8012B21C)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 2); + } + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187108); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801871D0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187250); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801872E0); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801873C4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_8018741C); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187548); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801876A4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187714); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187854); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_80187928); + +void func_801879DC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_80178D40", func_801879E4); + + diff --git a/src/ov_SC04_006/ov_SC04_006_jr_801734BC.c b/src/ov_SC04_006/ov_SC04_006_jr_801734BC.c index 9f53522d3..caec18917 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_801734BC.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_801734BC.c @@ -3084,1023 +3084,3 @@ void func_80178D18(void) { D_8019DDCC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019DBD4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019DBD4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019DBD4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019DBD4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019DBFC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019DBFC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019DBB8; - -s32 func_8017A3B0(void) { - switch (D_8019DBB8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019DBF4; -extern short D_8019DBF0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019DBF4) { - case 0: - func_800D0CA0(1); - D_8019DBF4 = D_8019DBF4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019DBF0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019DBF4 = D_8019DBF4 + 1; - if (D_8019DBF4 < 0x1E) { - return 0; - } - D_8019DBF4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019DC34; - extern s16 D_8019DC36; - extern s16 D_8019DC38; - extern s16 D_8019DC2C; - extern s16 D_8019DC2E; - extern s16 D_8019DC30; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019DC34, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019DC36, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019DC38, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019DC2C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019DC2E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019DC30, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019DBBC; -extern u16 D_8019DC3C; -extern u16 D_8019DC3E; -extern u16 D_8019DC40; -extern s16 D_8019DD58; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019DD58 = 0; - D_8019DBBC = 0; - D_8019DC3C = D_80126B5E; - D_8019DC3E = D_80126B62; - D_8019DC40 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183514[]; - extern s16 D_8019DC34; - extern s16 D_8019DC2C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183514[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183514[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019DC34; - s16 *p78C = &D_8019DC2C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019DD58 = 1; - D_8019DBBC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019DBDC; - extern SV4_8017B368 D_8019DBE4; - extern s16 D_8019DC34; - extern s16 D_8019DC2C; - extern u16 D_80183514; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019DBDC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019DBE4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183514)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183514)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019DC34) = loc0; - (*(SV4_8017B368 *)&D_8019DC2C) = loc1; - D_8019DD58 = 1; - D_8019DBBC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183514[]; - extern s16 D_8019DC34; - extern s16 D_8019DC36; - extern s16 D_8019DC38; - extern s16 D_8019DC2C; - extern s16 D_8019DC2E; - extern s16 D_8019DC30; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183514[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183514[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019DC34; - s16 *p78C = &D_8019DC2C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019DC36; - v798 = D_8019DC38; - v78C = *p78C; - v78E = D_8019DC2E; - v790 = D_8019DC30; - __asm__ __volatile__(""); - D_8019DD58 = 1; - D_8019DBBC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019DBBC; -extern s16 D_8019DC34; -extern s16 D_8019DC36; -extern s16 D_8019DC38; -extern s16 D_8019DC2C; -extern s16 D_8019DC2E; -extern s16 D_8019DC30; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019DBBC = 0; - D_8019DC34 = (s16) D_80114F30; - D_8019DC36 = (s16) D_80114F34; - D_8019DC38 = (s16) D_80114F38; - D_8019DC2C = (s16) D_80114F24; - D_8019DC2E = (s16) D_80114F28; - D_8019DC30 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019DC4C; -extern s16 D_8019DC4E; -extern s16 D_8019DC50; -extern s16 D_8019DC54; -extern s16 D_8019DC56; -extern s16 D_8019DC58; - -void func_8017B824(void) { - D_8019DC4C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019DC4E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019DC50 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019DC54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019DC56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019DC58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019DC4C; -extern s16 D_8019DC4E; -extern s16 D_8019DC50; -extern s16 D_8019DC54; -extern s16 D_8019DC56; -extern s16 D_8019DC58; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019DC4C; - D_80114F34 = D_8019DC4E; - D_80114F38 = D_8019DC50; - D_80114F24 = D_8019DC54; - D_80114F28 = D_8019DC56; - D_80114F2C = D_8019DC58; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019DC34), src[8..15] -> (*(S8_8017B8E8 *)&D_8019DC2C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019DC34) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019DC2C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019DC3C; -extern u16 D_8019DC3E; -extern u16 D_8019DC40; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019DBBC; -extern short D_8019DC44; -extern short D_8019DC46; -extern short D_8019DC48; -extern s16 D_8019DC34; -extern s16 D_8019DC36; -extern s16 D_8019DC38; -extern s16 D_8019DC2C; -extern s16 D_8019DC2E; -extern s16 D_8019DC30; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019DC3C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019DC3E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019DC40); - (*(s16 *)&D_8019DC44) = buf[0]; - (*(s16 *)&D_8019DC46) = buf[1]; - (*(s16 *)&D_8019DC48) = buf[2]; - D_8019DC34 = D_80114F30 + buf[0]; - D_8019DBBC = 0; - D_8019DC36 = D_80114F34 + buf[1]; - D_8019DC38 = D_80114F38 + buf[2]; - D_8019DC2C = D_80114F24 + buf[0]; - D_8019DC2E = D_80114F28 + buf[1]; - D_8019DC30 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019DBDC; -extern SV4 D_8019DBE4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019DBE4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019DBDC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019DBE4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019DBE4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019DBDC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019DBE4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019DC04[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019DC04; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019DBBC; -extern s16 D_8019DD58; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019DBBC = D_8019DBBC + 1; - if (D_8019DBBC >= 0x1F) { - D_8019DD58 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019DBBC; -extern s16 D_8019DD58; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019DBBC = D_8019DBBC + 1; - if (0x18 < D_8019DBBC) { - func_8012A4BC(); - D_8019DD58 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019DBBC; -extern void (*D_8019DC00)(void); -extern short D_8019DC44; -extern short D_8019DC46; -extern short D_8019DC48; -extern s16 D_8019DD58; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019DBBC = D_8019DBBC + 1; - if (D_8019DBBC >= 0x19) { - if (D_8019DC00 != 0) { - (*D_8019DC00)(); - } else { - D_80114F30 = D_80114F30 + D_8019DC44; - D_80114F34 = D_80114F34 + D_8019DC46; - D_80114F38 = D_80114F38 + D_8019DC48; - D_80114F24 = D_80114F24 + D_8019DC44; - D_80114F28 = D_80114F28 + D_8019DC46; - D_80114F2C = D_80114F2C + D_8019DC48; - func_8012A4BC(); - } - D_8019DD58 = 0; - } -} - - - -extern void (*D_801835B4[])(void); - -void func_8017BE60(void *a0) { - D_801835B4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017CE0C); - - -extern void (*D_801836B0[])(void); - -void func_8017CE7C(void *a0) { - D_801836B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017CEB8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CEFC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017CF20); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF60(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CFDC(void) { - func_800D1EBC(); - } - - - -extern void (*D_801836C4[])(void); - -void func_8017CFFC(void *a0) { - D_801836C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D038); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D0D4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D0FC); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D194); - - -extern void (*D_801836E0[])(void); - -void func_8017D22C(void *a0) { - D_801836E0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D268); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D344); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D3E4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D584); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D5B4); - -extern s32 func_8017D638(void); - -s32 func_8017D638(void) { - return 0x55; -} - - - -extern void (*D_80183708[])(void); - -void func_8017D640(void *a0) { - D_80183708[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D67C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D6B0); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D800); - - -extern void (*D_80183744[])(void); - -void func_8017D8EC(void *a0) { - D_80183744[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017D928); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DA0C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DA78); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DB64); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DBC8); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DD28); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DF0C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017DFC8); - - -extern void (*D_80195020[])(void); - -void func_8017E074(void *a0) { - D_80195020[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E0B0); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E184); - -void func_8017E1AC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E1B4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E300); - - -extern void func_8012C218(void *a0); - s32 func_8017E420(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E44C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E45C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E46C); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8017E4AC(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E4E0); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E504); - - -extern void (*D_80195048[])(void); - -void func_8017E568(void *a0) { - D_80195048[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E5A4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E62C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E75C); - - -extern void (*D_801957C4[])(void); - -void func_8017E854(void *a0) { - D_801957C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E890); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E948); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017E9EC); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_8019ADFC; - void func_8017EA74(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_8012A828((int)arg0, (int)&D_8019ADFC); - } - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EAA0); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EAE0); - -extern s32 func_8012BEE8(s32 arg); - void func_8017EB20(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((s32)a0 + 0x2) = 0x7; - } - } - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EB54); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EBA8); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EC64); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017ED40); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EDD8); - -void func_8017EDEC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EDF4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EE34); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EF74); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017EFF4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F180); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F354); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F43C); - - -extern void (*D_8019B250[])(void); - -void func_8017F4B4(void *a0) { - D_8019B250[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F4F0); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F5EC); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017F87C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017FA10); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017FA68); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017FAE4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_801734BC", func_8017FB28); - diff --git a/src/ov_SC04_006/ov_SC04_006_jr_80178D40.c b/src/ov_SC04_006/ov_SC04_006_jr_80178D40.c new file mode 100644 index 000000000..3719bebc9 --- /dev/null +++ b/src/ov_SC04_006/ov_SC04_006_jr_80178D40.c @@ -0,0 +1,4469 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182DBC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019CF28; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182DB0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182DF4[]; +extern unsigned short D_80182DFC[]; +extern unsigned short D_80182E04[]; +extern unsigned char D_8019CF30[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019CF28; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182E0C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019D064; +extern M2C_UNK D_8019D068; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019CFF0; +extern void (*D_80182E3C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019D06C[]; +extern u8 D_8019D074[]; +extern u8 D_8019D024[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182E44[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182E60[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182E68[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182ED0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182E74; +extern u8 D_80182E80; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182F04[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182F0C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182F60[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182F94[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182F84[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182FB0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183028[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183030[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183038[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183040[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80183048[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183050[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018305C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80183068[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80183074[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80183084[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80183094[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018309C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801830A4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801830AC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801830B4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801830BC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801830C4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801830CC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801830D4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801830DC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801830E4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801830EC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801830F4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801830FC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183104[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018310C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183114[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018311C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183124[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018312C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183134[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018313C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183144[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80183188[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018314C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801831B8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801831F4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018324C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018325C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183264[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801833CC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801833D8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019C620; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019DD58; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019D7A8; +extern short D_8019DDCC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019DDCC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019DDCC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019D7A8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019DDCC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019DD28 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019DD28 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019DDCC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019DDCC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019DC04[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019D7AC; + extern s32 D_8019DBC0; + extern s16 D_8019DBC4; + extern s16 D_8019DBC8; + extern s16 D_8019DBCC; + extern s16 D_8019DBD0; + extern s32 D_8019DBD8; + extern s32 D_8019DBDC; + extern s32 D_8019DBEC; + extern s16 D_8019DBF0; + extern s16 D_8019DBF4; + extern s32 D_8019DBF8; + extern s32 D_8019DC00; + extern s32 D_8019DC04[10]; + extern s32 D_8019DC70; + extern s16 D_8019DD28; + extern s32 D_8019DD54; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019DD28; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019DBC0); + D_8019DBC0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019DBCC, D_8019DBD0 ? 0x48 : 0x40); + (*(s16*)&D_8019DDCC) = 2; + break; + case 0: + func_80179B28(D_8019DBC0); + D_8019DBC0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019DBC4, D_8019DBC8 ? 0x48 : 0x40); + (*(s16*)&D_8019DDCC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019DC70 != 0) { + func_80179B28(D_8019DBC0); + D_8019DBC0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019DBC4, D_8019DBC8 ? 0x48 : 0x40); + (*(s16*)&D_8019DDCC) = 1; + } else { + (*(s16*)&D_8019DDCC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019DBC0); + D_8019DBC0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019DBC4, + D_8019DBC8 ? 0x48 : 0x40); + (*(s16*)&D_8019DDCC) = 1; + break; + case 2: + func_80179B28(D_8019DBC0); + if (D_8019DBD8 != 0) { + D_8019D7A8 = D_8019DBD8; + D_8019DBD8 = 0; + (*(s16*)&D_8019DDCC) = 3; + return; + } + (*(s16*)&D_8019DDCC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019DDCC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019DDCC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019DDCC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x1B: + D_8019DBF8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019DDCC) = 4; + D_8019D7AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019DDCC) = 5; + D_8019DBEC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019DBEC = (s32)func_8017A3B0; + (*(s16*)&D_8019DDCC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x24: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019DDCC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019DDCC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019DDCC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019DDCC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019DDCC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019DDCC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019DDCC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019DBDC); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019DBDC); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019DBDC); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019DBDC); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x4E: + D_8019DC00 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019DDCC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019DD54 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x34: + (*(s16*)&D_8019DDCC) = 3; + D_8019D7A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019DBD8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019DDCC) = 3; + D_8019D7A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019DDCC) = 3; + D_8019D7A8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019D7A8 = *(s32 *)(D_8019D7A8 + 4); + return; + case 0x37: + (*(s16*)&D_8019DDCC) = 3; + D_8019DBC4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019DBC8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019DDCC) = 3; + D_8019DBCC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019DBD0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019DDCC) = 3; + D_8019DBC4 = w1; + D_8019DBC8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019DDCC) = 3; + D_8019DBCC = w2; + D_8019DBD0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x43: + D_8019DBEC = (s32)func_8017A3D8; + D_8019DBF4 = 0; + (*(s16*)&D_8019DDCC) = 5; + D_8019DBF0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019DDCC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019DDCC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019DC04; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019DDCC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019DC04; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019DDCC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019DC04[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019DDCC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019DC04; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019DDCC) = 3; + break; + default: + break; + } +Lend: + D_8019D7A8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019DBD4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019DBD4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019DBD4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019DBD4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019DBFC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019DBFC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019DBB8; + +s32 func_8017A3B0(void) { + switch (D_8019DBB8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019DBF4; +extern short D_8019DBF0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019DBF4) { + case 0: + func_800D0CA0(1); + D_8019DBF4 = D_8019DBF4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019DBF0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019DBF4 = D_8019DBF4 + 1; + if (D_8019DBF4 < 0x1E) { + return 0; + } + D_8019DBF4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019DC34; + extern s16 D_8019DC36; + extern s16 D_8019DC38; + extern s16 D_8019DC2C; + extern s16 D_8019DC2E; + extern s16 D_8019DC30; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019DC34, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019DC36, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019DC38, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019DC2C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019DC2E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019DC30, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019DBBC; +extern u16 D_8019DC3C; +extern u16 D_8019DC3E; +extern u16 D_8019DC40; +extern s16 D_8019DD58; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019DD58 = 0; + D_8019DBBC = 0; + D_8019DC3C = D_80126B5E; + D_8019DC3E = D_80126B62; + D_8019DC40 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183514[]; + extern s16 D_8019DC34; + extern s16 D_8019DC2C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183514[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183514[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019DC34; + s16 *p78C = &D_8019DC2C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019DD58 = 1; + D_8019DBBC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019DBDC; + extern SV4_8017B368 D_8019DBE4; + extern s16 D_8019DC34; + extern s16 D_8019DC2C; + extern u16 D_80183514; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019DBDC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019DBE4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183514)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183514)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019DC34) = loc0; + (*(SV4_8017B368 *)&D_8019DC2C) = loc1; + D_8019DD58 = 1; + D_8019DBBC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183514[]; + extern s16 D_8019DC34; + extern s16 D_8019DC36; + extern s16 D_8019DC38; + extern s16 D_8019DC2C; + extern s16 D_8019DC2E; + extern s16 D_8019DC30; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183514[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183514[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019DC34; + s16 *p78C = &D_8019DC2C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019DC36; + v798 = D_8019DC38; + v78C = *p78C; + v78E = D_8019DC2E; + v790 = D_8019DC30; + __asm__ __volatile__(""); + D_8019DD58 = 1; + D_8019DBBC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019DBBC; +extern s16 D_8019DC34; +extern s16 D_8019DC36; +extern s16 D_8019DC38; +extern s16 D_8019DC2C; +extern s16 D_8019DC2E; +extern s16 D_8019DC30; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019DBBC = 0; + D_8019DC34 = (s16) D_80114F30; + D_8019DC36 = (s16) D_80114F34; + D_8019DC38 = (s16) D_80114F38; + D_8019DC2C = (s16) D_80114F24; + D_8019DC2E = (s16) D_80114F28; + D_8019DC30 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019DC4C; +extern s16 D_8019DC4E; +extern s16 D_8019DC50; +extern s16 D_8019DC54; +extern s16 D_8019DC56; +extern s16 D_8019DC58; + +void func_8017B824(void) { + D_8019DC4C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019DC4E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019DC50 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019DC54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019DC56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019DC58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019DC4C; +extern s16 D_8019DC4E; +extern s16 D_8019DC50; +extern s16 D_8019DC54; +extern s16 D_8019DC56; +extern s16 D_8019DC58; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019DC4C; + D_80114F34 = D_8019DC4E; + D_80114F38 = D_8019DC50; + D_80114F24 = D_8019DC54; + D_80114F28 = D_8019DC56; + D_80114F2C = D_8019DC58; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019DC34), src[8..15] -> (*(S8_8017B8E8 *)&D_8019DC2C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019DC34) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019DC2C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019DC3C; +extern u16 D_8019DC3E; +extern u16 D_8019DC40; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019DBBC; +extern short D_8019DC44; +extern short D_8019DC46; +extern short D_8019DC48; +extern s16 D_8019DC34; +extern s16 D_8019DC36; +extern s16 D_8019DC38; +extern s16 D_8019DC2C; +extern s16 D_8019DC2E; +extern s16 D_8019DC30; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019DC3C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019DC3E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019DC40); + (*(s16 *)&D_8019DC44) = buf[0]; + (*(s16 *)&D_8019DC46) = buf[1]; + (*(s16 *)&D_8019DC48) = buf[2]; + D_8019DC34 = D_80114F30 + buf[0]; + D_8019DBBC = 0; + D_8019DC36 = D_80114F34 + buf[1]; + D_8019DC38 = D_80114F38 + buf[2]; + D_8019DC2C = D_80114F24 + buf[0]; + D_8019DC2E = D_80114F28 + buf[1]; + D_8019DC30 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019DBDC; +extern SV4 D_8019DBE4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019DBE4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019DBDC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019DBE4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019DBE4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019DBDC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019DBE4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019DC04[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019DC04; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019DBBC; +extern s16 D_8019DD58; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019DBBC = D_8019DBBC + 1; + if (D_8019DBBC >= 0x1F) { + D_8019DD58 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019DBBC; +extern s16 D_8019DD58; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019DBBC = D_8019DBBC + 1; + if (0x18 < D_8019DBBC) { + func_8012A4BC(); + D_8019DD58 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019DBBC; +extern void (*D_8019DC00)(void); +extern short D_8019DC44; +extern short D_8019DC46; +extern short D_8019DC48; +extern s16 D_8019DD58; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019DBBC = D_8019DBBC + 1; + if (D_8019DBBC >= 0x19) { + if (D_8019DC00 != 0) { + (*D_8019DC00)(); + } else { + D_80114F30 = D_80114F30 + D_8019DC44; + D_80114F34 = D_80114F34 + D_8019DC46; + D_80114F38 = D_80114F38 + D_8019DC48; + D_80114F24 = D_80114F24 + D_8019DC44; + D_80114F28 = D_80114F28 + D_8019DC46; + D_80114F2C = D_80114F2C + D_8019DC48; + func_8012A4BC(); + } + D_8019DD58 = 0; + } +} + + + +extern void (*D_801835B4[])(void); + +void func_8017BE60(void *a0) { + D_801835B4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017CE0C); + + +extern void (*D_801836B0[])(void); + +void func_8017CE7C(void *a0) { + D_801836B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017CEB8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CEFC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017CF20); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF60(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CFDC(void) { + func_800D1EBC(); + } + + + +extern void (*D_801836C4[])(void); + +void func_8017CFFC(void *a0) { + D_801836C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D038); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D0D4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D0FC); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D194); + + +extern void (*D_801836E0[])(void); + +void func_8017D22C(void *a0) { + D_801836E0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D268); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D344); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D3E4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D584); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D5B4); + +extern s32 func_8017D638(void); + +s32 func_8017D638(void) { + return 0x55; +} + + + +extern void (*D_80183708[])(void); + +void func_8017D640(void *a0) { + D_80183708[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D67C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D6B0); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D800); + + +extern void (*D_80183744[])(void); + +void func_8017D8EC(void *a0) { + D_80183744[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017D928); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DA0C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DA78); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DB64); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DBC8); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DD28); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DF0C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017DFC8); + + +extern void (*D_80195020[])(void); + +void func_8017E074(void *a0) { + D_80195020[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E0B0); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E184); + +void func_8017E1AC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E1B4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E300); + + +extern void func_8012C218(void *a0); + s32 func_8017E420(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E44C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E45C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E46C); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8017E4AC(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E4E0); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E504); + + +extern void (*D_80195048[])(void); + +void func_8017E568(void *a0) { + D_80195048[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E5A4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E62C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E75C); + + +extern void (*D_801957C4[])(void); + +void func_8017E854(void *a0) { + D_801957C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E890); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E948); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017E9EC); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_8019ADFC; + void func_8017EA74(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_8012A828((int)arg0, (int)&D_8019ADFC); + } + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EAA0); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EAE0); + +extern s32 func_8012BEE8(s32 arg); + void func_8017EB20(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((s32)a0 + 0x2) = 0x7; + } + } + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EB54); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EBA8); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EC64); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017ED40); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EDD8); + +void func_8017EDEC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EDF4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EE34); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EF74); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017EFF4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F180); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F354); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F43C); + + +extern void (*D_8019B250[])(void); + +void func_8017F4B4(void *a0) { + D_8019B250[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F4F0); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F5EC); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017F87C); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017FA10); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017FA68); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017FAE4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_80178D40", func_8017FB28); + + diff --git a/src/ov_SC04_007/ov_SC04_007_jr_801734BC.c b/src/ov_SC04_007/ov_SC04_007_jr_801734BC.c index 063d26d8c..fc7666d9a 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_801734BC.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_801734BC.c @@ -3084,1361 +3084,3 @@ void func_80178D18(void) { D_801B5B8C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B518C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B518C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B518C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B518C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B51B4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B51B4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B5170; - -s32 func_8017A3B0(void) { - switch (D_801B5170) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B51AC; -extern short D_801B51A8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B51AC) { - case 0: - func_800D0CA0(1); - D_801B51AC = D_801B51AC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B51A8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B51AC = D_801B51AC + 1; - if (D_801B51AC < 0x1E) { - return 0; - } - D_801B51AC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B51EC; - extern s16 D_801B51EE; - extern s16 D_801B51F0; - extern s16 D_801B51E4; - extern s16 D_801B51E6; - extern s16 D_801B51E8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B51EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B51EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B51F0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B51E4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B51E6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B51E8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B5174; -extern u16 D_801B51F4; -extern u16 D_801B51F6; -extern u16 D_801B51F8; -extern s16 D_801B5B18; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B5B18 = 0; - D_801B5174 = 0; - D_801B51F4 = D_80126B5E; - D_801B51F6 = D_80126B62; - D_801B51F8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801894CC[]; - extern s16 D_801B51EC; - extern s16 D_801B51E4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801894CC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801894CC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B51EC; - s16 *p78C = &D_801B51E4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B5B18 = 1; - D_801B5174 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B5194; - extern SV4_8017B368 D_801B519C; - extern s16 D_801B51EC; - extern s16 D_801B51E4; - extern u16 D_801894CC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B5194; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B519C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801894CC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801894CC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B51EC) = loc0; - (*(SV4_8017B368 *)&D_801B51E4) = loc1; - D_801B5B18 = 1; - D_801B5174 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801894CC[]; - extern s16 D_801B51EC; - extern s16 D_801B51EE; - extern s16 D_801B51F0; - extern s16 D_801B51E4; - extern s16 D_801B51E6; - extern s16 D_801B51E8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801894CC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801894CC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B51EC; - s16 *p78C = &D_801B51E4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B51EE; - v798 = D_801B51F0; - v78C = *p78C; - v78E = D_801B51E6; - v790 = D_801B51E8; - __asm__ __volatile__(""); - D_801B5B18 = 1; - D_801B5174 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B5174; -extern s16 D_801B51EC; -extern s16 D_801B51EE; -extern s16 D_801B51F0; -extern s16 D_801B51E4; -extern s16 D_801B51E6; -extern s16 D_801B51E8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B5174 = 0; - D_801B51EC = (s16) D_80114F30; - D_801B51EE = (s16) D_80114F34; - D_801B51F0 = (s16) D_80114F38; - D_801B51E4 = (s16) D_80114F24; - D_801B51E6 = (s16) D_80114F28; - D_801B51E8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B5204; -extern s16 D_801B5206; -extern s16 D_801B5208; -extern s16 D_801B520C; -extern s16 D_801B520E; -extern s16 D_801B5210; - -void func_8017B824(void) { - D_801B5204 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B5206 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B5208 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B520C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B520E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B5210 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B5204; -extern s16 D_801B5206; -extern s16 D_801B5208; -extern s16 D_801B520C; -extern s16 D_801B520E; -extern s16 D_801B5210; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B5204; - D_80114F34 = D_801B5206; - D_80114F38 = D_801B5208; - D_80114F24 = D_801B520C; - D_80114F28 = D_801B520E; - D_80114F2C = D_801B5210; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B51EC), src[8..15] -> (*(S8_8017B8E8 *)&D_801B51E4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B51EC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B51E4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B51F4; -extern u16 D_801B51F6; -extern u16 D_801B51F8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B5174; -extern short D_801B51FC; -extern short D_801B51FE; -extern short D_801B5200; -extern s16 D_801B51EC; -extern s16 D_801B51EE; -extern s16 D_801B51F0; -extern s16 D_801B51E4; -extern s16 D_801B51E6; -extern s16 D_801B51E8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B51F4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B51F6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B51F8); - (*(s16 *)&D_801B51FC) = buf[0]; - (*(s16 *)&D_801B51FE) = buf[1]; - (*(s16 *)&D_801B5200) = buf[2]; - D_801B51EC = D_80114F30 + buf[0]; - D_801B5174 = 0; - D_801B51EE = D_80114F34 + buf[1]; - D_801B51F0 = D_80114F38 + buf[2]; - D_801B51E4 = D_80114F24 + buf[0]; - D_801B51E6 = D_80114F28 + buf[1]; - D_801B51E8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B5194; -extern SV4 D_801B519C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B519C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B5194 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B519C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B519C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B5194) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B519C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B51BC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B51BC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B5174; -extern s16 D_801B5B18; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B5174 = D_801B5174 + 1; - if (D_801B5174 >= 0x1F) { - D_801B5B18 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B5174; -extern s16 D_801B5B18; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B5174 = D_801B5174 + 1; - if (0x18 < D_801B5174) { - func_8012A4BC(); - D_801B5B18 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B5174; -extern void (*D_801B51B8)(void); -extern short D_801B51FC; -extern short D_801B51FE; -extern short D_801B5200; -extern s16 D_801B5B18; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B5174 = D_801B5174 + 1; - if (D_801B5174 >= 0x19) { - if (D_801B51B8 != 0) { - (*D_801B51B8)(); - } else { - D_80114F30 = D_80114F30 + D_801B51FC; - D_80114F34 = D_80114F34 + D_801B51FE; - D_80114F38 = D_80114F38 + D_801B5200; - D_80114F24 = D_80114F24 + D_801B51FC; - D_80114F28 = D_80114F28 + D_801B51FE; - D_80114F2C = D_80114F2C + D_801B5200; - func_8012A4BC(); - } - D_801B5B18 = 0; - } -} - - - -extern void (*D_8018956C[])(void); - -void func_8017BE60(void *a0) { - D_8018956C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017CECC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D258); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D4D0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D618); - - -extern void (*D_80189688[])(void); - -void func_8017D798(void *a0) { - D_80189688[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D7D4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D820); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D914); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017D994); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DA48); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DAB4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DB40); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DB60); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DBB4); - - -extern void (*D_801896E0[])(void); - -void func_8017DBF0(void *a0) { - D_801896E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DC2C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DC7C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DCD8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DD5C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DEC4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017DF10); - - -extern void (*D_801896F4[])(void); - -void func_8017E21C(void *a0) { - D_801896F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E258); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E298); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E308); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E468); - - -extern void (*D_80189708[])(void); - -void func_8017E4BC(void *a0) { - D_80189708[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E4F8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E5AC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E608); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E7E8); - - -extern void (*D_801897B0[])(void); - -void func_8017E858(void *a0) { - D_801897B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E894); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E8D8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E8FC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E93C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017E9B8); - - -extern void (*D_801897C4[])(void); - -void func_8017E9D8(void *a0) { - D_801897C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EA14); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EA88); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EAB0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EAD8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EB70); - - -extern void (*D_801897E0[])(void); - -void func_8017EC08(void *a0) { - D_801897E0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EC44); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EC8C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017ED2C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EEC4); - - -s32 func_8017EEF4(void) { - return 85; -} - - - -extern void (*D_80189850[])(void); - -void func_8017EEFC(void *a0) { - D_80189850[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EF38); - -void func_8017EF9C(void) { -} - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_80189838; - -void func_8017EFA4(void *arg0) { - ((void (*)(void *, s32))func_80178CBC)(arg0, &D_80189838); - *(s16 *)((s32)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017EFDC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F01C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F080); - - -extern void (*D_80189860[])(void); - -void func_8017F110(void *a0) { - D_80189860[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F14C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F180); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F2D0); - - -extern void (*D_8018989C[])(void); - -void func_8017F3BC(void *a0) { - D_8018989C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F3F8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F4DC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F548); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F634); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F7F0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017F86C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FA20); - - -s32 func_8017FA40(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x3; - } - - - -extern void (*D_80197FF8[])(void); - -void func_8017FA54(void *a0) { - D_80197FF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FA90); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FB1C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FC8C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FCFC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FDB0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FEAC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8017FF08); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180324); - -void func_80180844(void) { -} - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8018084C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180894); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180B64); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180CA0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180D50); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180D98); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180E34); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80180E78); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8018105C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801810A4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801812DC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181320); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801814A4); - -extern void func_8012CBCC(s32 a0); - void func_801814E4(s32 arg0) { - if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { - *(s16*)(arg0 + 0x2) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8018151C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181574); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801A0CE4; - -void func_801815DC(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A0CE4); - *(s16 *)((u8 *)arg0 + 0x2) = 0xe; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181614); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801A0D4C; - -void func_801816CC(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A0D4C); - *(s16 *)((u8 *)arg0 + 0x2) = 0x10; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181704); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801A0E04; - void func_801817B8(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 18; - func_8012A828((int)arg0, (int)&D_801A0E04); - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801817E4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801819D4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181A14); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181A78); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181AB4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181B34); - -extern void func_8002A04C(s32 arg0); - extern void func_8012C098(void); - void func_80181B68(s32 param_1) { - func_8002A04C(param_1); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181B98); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181C0C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181D2C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181DE0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80181F80); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182074); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801821DC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182358); - - -extern void (*D_8019823C[])(void); - -void func_80182514(void *a0) { - D_8019823C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182550); - -void func_801825AC(void *a0) { - *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801825C0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801827D0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182810); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182B48); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182BB0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182C28); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80182DD8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183040); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801832EC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183438); - - -extern void (*D_80198294[])(void); - -void func_80183614(void *a0) { - D_80198294[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183650); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801836CC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_8018370C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801838EC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801839FC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183B14); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183B84); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183BEC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183C24); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8002AC00(s32 arg0); - -void func_80183CCC(void) { - func_8002D4C8(0xA9E, 0); - func_8002AC00(0x14); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183CF8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183D40); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183DDC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183E80); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183F4C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80183FF8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184238); - - -extern void (*D_801AC550[])(void); - -void func_80184358(void *a0) { - D_801AC550[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8002AC00(s32 arg0); - extern void func_80131E00(struct S80131E00 *a0, s32 a1); - void func_80184394(int param_1) { - ((int (*)(int))func_8002AC00)(0x16); - ((int (*)(int, int))func_80131E00)(param_1, 0x11); - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801843CC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801843E0); - -void func_8018447C(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184488); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801844F0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184560); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184688); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184708); - -extern void (*D_801AF3DC[])(void); - -void func_801847D8(void *a0) { - D_801AF3DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184814); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801848E8); - -void func_80184910(void) { -} - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184918); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184A64); - -extern void func_8012C218(void *a0); - void func_80184B84(s32 arg0) { - *(s16 *)(arg0 + 0x2) = 2; - func_8012C218(*(void **)(arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184BB0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184BC0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184BD0); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80184C10(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -extern s16 func_80174764(void); - s32 func_80184C44(void) { - return ((u32)((s32 (*)(void))func_80174764)() ^ 1) < 1; - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184C68); - -extern void (*D_801AF404[])(void); - -void func_80184CCC(void *a0) { - D_801AF404[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184D08); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184D90); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184E50); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184EC0); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80184FB8); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185010); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185060); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801850CC); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185220); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185274); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185298); - -extern void (*D_801B2694[])(void); - -void func_801852DC(void *a0) { - D_801B2694[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185318); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185464); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801854DC); - - -void func_8018550C(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185520); - -extern void (*D_801B26CC[])(void); - -void func_80185588(void *a0) { - D_801B26CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801855C4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185610); - -void func_80185658(void) { -} - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_80185660); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_801734BC", func_801857C4); - diff --git a/src/ov_SC04_007/ov_SC04_007_jr_80178D40.c b/src/ov_SC04_007/ov_SC04_007_jr_80178D40.c new file mode 100644 index 000000000..417316114 --- /dev/null +++ b/src/ov_SC04_007/ov_SC04_007_jr_80178D40.c @@ -0,0 +1,4807 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188D74[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B44E0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80188D68[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80188DAC[]; +extern unsigned short D_80188DB4[]; +extern unsigned short D_80188DBC[]; +extern unsigned char D_801B44E8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B44E0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188DC4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B461C; +extern M2C_UNK D_801B4620; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B45A8; +extern void (*D_80188DF4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B4624[]; +extern u8 D_801B462C[]; +extern u8 D_801B45DC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188DFC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188E18[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80188E20[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188E88[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188E2C; +extern u8 D_80188E38; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188EBC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188EC4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188F18[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188F4C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188F3C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188F68; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188FE0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188FE8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188FF0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188FF8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189000[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189008[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189014[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189020[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018902C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018903C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018904C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189054[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018905C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189064[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018906C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189074[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018907C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189084[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018908C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189094[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018909C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801890A4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801890AC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801890B4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801890BC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801890C4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801890CC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801890D4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801890DC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801890E4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801890EC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801890F4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801890FC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189140[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189104; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189170[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801891AC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189204[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189214[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018921C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80189384[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189390[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B3BDC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B5B18; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B4D60; +extern short D_801B5B8C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B5B8C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B5B8C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B4D60 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B5B8C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B5AE8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B5AE8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B5B8C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B5B8C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B51BC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B4D64; + extern s32 D_801B5178; + extern s16 D_801B517C; + extern s16 D_801B5180; + extern s16 D_801B5184; + extern s16 D_801B5188; + extern s32 D_801B5190; + extern s32 D_801B5194; + extern s32 D_801B51A4; + extern s16 D_801B51A8; + extern s16 D_801B51AC; + extern s32 D_801B51B0; + extern s32 D_801B51B8; + extern s32 D_801B51BC[10]; + extern s32 D_801B5A30; + extern s16 D_801B5AE8; + extern s32 D_801B5B14; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B5AE8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B5178); + D_801B5178 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B5184, D_801B5188 ? 0x48 : 0x40); + (*(s16*)&D_801B5B8C) = 2; + break; + case 0: + func_80179B28(D_801B5178); + D_801B5178 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B517C, D_801B5180 ? 0x48 : 0x40); + (*(s16*)&D_801B5B8C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B5A30 != 0) { + func_80179B28(D_801B5178); + D_801B5178 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B517C, D_801B5180 ? 0x48 : 0x40); + (*(s16*)&D_801B5B8C) = 1; + } else { + (*(s16*)&D_801B5B8C) = 3; + } + break; + case 0x32: + func_80179B28(D_801B5178); + D_801B5178 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B517C, + D_801B5180 ? 0x48 : 0x40); + (*(s16*)&D_801B5B8C) = 1; + break; + case 2: + func_80179B28(D_801B5178); + if (D_801B5190 != 0) { + D_801B4D60 = D_801B5190; + D_801B5190 = 0; + (*(s16*)&D_801B5B8C) = 3; + return; + } + (*(s16*)&D_801B5B8C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B5B8C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B5B8C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B5B8C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x1B: + D_801B51B0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B5B8C) = 4; + D_801B4D64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B5B8C) = 5; + D_801B51A4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B51A4 = (s32)func_8017A3B0; + (*(s16*)&D_801B5B8C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x24: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B5B8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B5B8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B5B8C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B5B8C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B5B8C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B5B8C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B5B8C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B5194); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B5194); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B5194); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B5194); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x4E: + D_801B51B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x2B: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B5B8C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B5B14 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x34: + (*(s16*)&D_801B5B8C) = 3; + D_801B4D60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B5190 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B5B8C) = 3; + D_801B4D60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B5B8C) = 3; + D_801B4D60 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B4D60 = *(s32 *)(D_801B4D60 + 4); + return; + case 0x37: + (*(s16*)&D_801B5B8C) = 3; + D_801B517C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B5180 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B5B8C) = 3; + D_801B5184 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B5188 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B5B8C) = 3; + D_801B517C = w1; + D_801B5180 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B5B8C) = 3; + D_801B5184 = w2; + D_801B5188 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x43: + D_801B51A4 = (s32)func_8017A3D8; + D_801B51AC = 0; + (*(s16*)&D_801B5B8C) = 5; + D_801B51A8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B5B8C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B5B8C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B51BC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B5B8C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B51BC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B5B8C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B51BC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B5B8C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B51BC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B5B8C) = 3; + break; + default: + break; + } +Lend: + D_801B4D60 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B518C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B518C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B518C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B518C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B51B4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B51B4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B5170; + +s32 func_8017A3B0(void) { + switch (D_801B5170) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B51AC; +extern short D_801B51A8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B51AC) { + case 0: + func_800D0CA0(1); + D_801B51AC = D_801B51AC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B51A8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B51AC = D_801B51AC + 1; + if (D_801B51AC < 0x1E) { + return 0; + } + D_801B51AC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B51EC; + extern s16 D_801B51EE; + extern s16 D_801B51F0; + extern s16 D_801B51E4; + extern s16 D_801B51E6; + extern s16 D_801B51E8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B51EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B51EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B51F0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B51E4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B51E6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B51E8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B5174; +extern u16 D_801B51F4; +extern u16 D_801B51F6; +extern u16 D_801B51F8; +extern s16 D_801B5B18; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B5B18 = 0; + D_801B5174 = 0; + D_801B51F4 = D_80126B5E; + D_801B51F6 = D_80126B62; + D_801B51F8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801894CC[]; + extern s16 D_801B51EC; + extern s16 D_801B51E4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801894CC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801894CC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B51EC; + s16 *p78C = &D_801B51E4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B5B18 = 1; + D_801B5174 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B5194; + extern SV4_8017B368 D_801B519C; + extern s16 D_801B51EC; + extern s16 D_801B51E4; + extern u16 D_801894CC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B5194; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B519C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801894CC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801894CC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B51EC) = loc0; + (*(SV4_8017B368 *)&D_801B51E4) = loc1; + D_801B5B18 = 1; + D_801B5174 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801894CC[]; + extern s16 D_801B51EC; + extern s16 D_801B51EE; + extern s16 D_801B51F0; + extern s16 D_801B51E4; + extern s16 D_801B51E6; + extern s16 D_801B51E8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801894CC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801894CC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B51EC; + s16 *p78C = &D_801B51E4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B51EE; + v798 = D_801B51F0; + v78C = *p78C; + v78E = D_801B51E6; + v790 = D_801B51E8; + __asm__ __volatile__(""); + D_801B5B18 = 1; + D_801B5174 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B5174; +extern s16 D_801B51EC; +extern s16 D_801B51EE; +extern s16 D_801B51F0; +extern s16 D_801B51E4; +extern s16 D_801B51E6; +extern s16 D_801B51E8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B5174 = 0; + D_801B51EC = (s16) D_80114F30; + D_801B51EE = (s16) D_80114F34; + D_801B51F0 = (s16) D_80114F38; + D_801B51E4 = (s16) D_80114F24; + D_801B51E6 = (s16) D_80114F28; + D_801B51E8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B5204; +extern s16 D_801B5206; +extern s16 D_801B5208; +extern s16 D_801B520C; +extern s16 D_801B520E; +extern s16 D_801B5210; + +void func_8017B824(void) { + D_801B5204 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B5206 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B5208 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B520C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B520E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B5210 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B5204; +extern s16 D_801B5206; +extern s16 D_801B5208; +extern s16 D_801B520C; +extern s16 D_801B520E; +extern s16 D_801B5210; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B5204; + D_80114F34 = D_801B5206; + D_80114F38 = D_801B5208; + D_80114F24 = D_801B520C; + D_80114F28 = D_801B520E; + D_80114F2C = D_801B5210; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B51EC), src[8..15] -> (*(S8_8017B8E8 *)&D_801B51E4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B51EC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B51E4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B51F4; +extern u16 D_801B51F6; +extern u16 D_801B51F8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B5174; +extern short D_801B51FC; +extern short D_801B51FE; +extern short D_801B5200; +extern s16 D_801B51EC; +extern s16 D_801B51EE; +extern s16 D_801B51F0; +extern s16 D_801B51E4; +extern s16 D_801B51E6; +extern s16 D_801B51E8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B51F4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B51F6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B51F8); + (*(s16 *)&D_801B51FC) = buf[0]; + (*(s16 *)&D_801B51FE) = buf[1]; + (*(s16 *)&D_801B5200) = buf[2]; + D_801B51EC = D_80114F30 + buf[0]; + D_801B5174 = 0; + D_801B51EE = D_80114F34 + buf[1]; + D_801B51F0 = D_80114F38 + buf[2]; + D_801B51E4 = D_80114F24 + buf[0]; + D_801B51E6 = D_80114F28 + buf[1]; + D_801B51E8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B5194; +extern SV4 D_801B519C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B519C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B5194 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B519C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B519C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B5194) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B519C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B51BC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B51BC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B5174; +extern s16 D_801B5B18; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B5174 = D_801B5174 + 1; + if (D_801B5174 >= 0x1F) { + D_801B5B18 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B5174; +extern s16 D_801B5B18; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B5174 = D_801B5174 + 1; + if (0x18 < D_801B5174) { + func_8012A4BC(); + D_801B5B18 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B5174; +extern void (*D_801B51B8)(void); +extern short D_801B51FC; +extern short D_801B51FE; +extern short D_801B5200; +extern s16 D_801B5B18; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B5174 = D_801B5174 + 1; + if (D_801B5174 >= 0x19) { + if (D_801B51B8 != 0) { + (*D_801B51B8)(); + } else { + D_80114F30 = D_80114F30 + D_801B51FC; + D_80114F34 = D_80114F34 + D_801B51FE; + D_80114F38 = D_80114F38 + D_801B5200; + D_80114F24 = D_80114F24 + D_801B51FC; + D_80114F28 = D_80114F28 + D_801B51FE; + D_80114F2C = D_80114F2C + D_801B5200; + func_8012A4BC(); + } + D_801B5B18 = 0; + } +} + + + +extern void (*D_8018956C[])(void); + +void func_8017BE60(void *a0) { + D_8018956C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017CECC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D258); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D4D0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D618); + + +extern void (*D_80189688[])(void); + +void func_8017D798(void *a0) { + D_80189688[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D7D4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D820); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D914); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017D994); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DA48); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DAB4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DB40); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DB60); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DBB4); + + +extern void (*D_801896E0[])(void); + +void func_8017DBF0(void *a0) { + D_801896E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DC2C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DC7C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DCD8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DD5C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DEC4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017DF10); + + +extern void (*D_801896F4[])(void); + +void func_8017E21C(void *a0) { + D_801896F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E258); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E298); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E308); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E468); + + +extern void (*D_80189708[])(void); + +void func_8017E4BC(void *a0) { + D_80189708[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E4F8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E5AC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E608); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E7E8); + + +extern void (*D_801897B0[])(void); + +void func_8017E858(void *a0) { + D_801897B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E894); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E8D8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E8FC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E93C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017E9B8); + + +extern void (*D_801897C4[])(void); + +void func_8017E9D8(void *a0) { + D_801897C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EA14); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EA88); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EAB0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EAD8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EB70); + + +extern void (*D_801897E0[])(void); + +void func_8017EC08(void *a0) { + D_801897E0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EC44); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EC8C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017ED2C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EEC4); + + +s32 func_8017EEF4(void) { + return 85; +} + + + +extern void (*D_80189850[])(void); + +void func_8017EEFC(void *a0) { + D_80189850[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EF38); + +void func_8017EF9C(void) { +} + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_80189838; + +void func_8017EFA4(void *arg0) { + ((void (*)(void *, s32))func_80178CBC)(arg0, &D_80189838); + *(s16 *)((s32)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017EFDC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F01C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F080); + + +extern void (*D_80189860[])(void); + +void func_8017F110(void *a0) { + D_80189860[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F14C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F180); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F2D0); + + +extern void (*D_8018989C[])(void); + +void func_8017F3BC(void *a0) { + D_8018989C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F3F8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F4DC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F548); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F634); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F7F0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017F86C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FA20); + + +s32 func_8017FA40(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x3; + } + + + +extern void (*D_80197FF8[])(void); + +void func_8017FA54(void *a0) { + D_80197FF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FA90); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FB1C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FC8C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FCFC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FDB0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FEAC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8017FF08); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180324); + +void func_80180844(void) { +} + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8018084C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180894); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180B64); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180CA0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180D50); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180D98); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180E34); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80180E78); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8018105C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801810A4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801812DC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181320); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801814A4); + +extern void func_8012CBCC(s32 a0); + void func_801814E4(s32 arg0) { + if ((((s32 (*)(void))func_8012CBCC)() & 0x2000) != 0) { + *(s16*)(arg0 + 0x2) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8018151C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181574); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801A0CE4; + +void func_801815DC(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A0CE4); + *(s16 *)((u8 *)arg0 + 0x2) = 0xe; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181614); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801A0D4C; + +void func_801816CC(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A0D4C); + *(s16 *)((u8 *)arg0 + 0x2) = 0x10; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181704); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801A0E04; + void func_801817B8(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 18; + func_8012A828((int)arg0, (int)&D_801A0E04); + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801817E4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801819D4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181A14); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181A78); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181AB4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181B34); + +extern void func_8002A04C(s32 arg0); + extern void func_8012C098(void); + void func_80181B68(s32 param_1) { + func_8002A04C(param_1); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181B98); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181C0C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181D2C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181DE0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80181F80); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182074); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801821DC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182358); + + +extern void (*D_8019823C[])(void); + +void func_80182514(void *a0) { + D_8019823C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182550); + +void func_801825AC(void *a0) { + *(s16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801825C0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801827D0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182810); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182B48); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182BB0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182C28); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80182DD8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183040); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801832EC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183438); + + +extern void (*D_80198294[])(void); + +void func_80183614(void *a0) { + D_80198294[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183650); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801836CC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_8018370C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801838EC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801839FC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183B14); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183B84); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183BEC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183C24); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8002AC00(s32 arg0); + +void func_80183CCC(void) { + func_8002D4C8(0xA9E, 0); + func_8002AC00(0x14); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183CF8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183D40); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183DDC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183E80); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183F4C); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80183FF8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184238); + + +extern void (*D_801AC550[])(void); + +void func_80184358(void *a0) { + D_801AC550[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8002AC00(s32 arg0); + extern void func_80131E00(struct S80131E00 *a0, s32 a1); + void func_80184394(int param_1) { + ((int (*)(int))func_8002AC00)(0x16); + ((int (*)(int, int))func_80131E00)(param_1, 0x11); + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801843CC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801843E0); + +void func_8018447C(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184488); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801844F0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184560); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184688); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184708); + +extern void (*D_801AF3DC[])(void); + +void func_801847D8(void *a0) { + D_801AF3DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184814); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801848E8); + +void func_80184910(void) { +} + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184918); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184A64); + +extern void func_8012C218(void *a0); + void func_80184B84(s32 arg0) { + *(s16 *)(arg0 + 0x2) = 2; + func_8012C218(*(void **)(arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184BB0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184BC0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184BD0); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80184C10(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +extern s16 func_80174764(void); + s32 func_80184C44(void) { + return ((u32)((s32 (*)(void))func_80174764)() ^ 1) < 1; + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184C68); + +extern void (*D_801AF404[])(void); + +void func_80184CCC(void *a0) { + D_801AF404[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184D08); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184D90); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184E50); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184EC0); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80184FB8); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185010); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185060); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801850CC); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185220); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185274); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185298); + +extern void (*D_801B2694[])(void); + +void func_801852DC(void *a0) { + D_801B2694[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185318); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185464); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801854DC); + + +void func_8018550C(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185520); + +extern void (*D_801B26CC[])(void); + +void func_80185588(void *a0) { + D_801B26CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801855C4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185610); + +void func_80185658(void) { +} + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_80185660); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_80178D40", func_801857C4); + + diff --git a/src/ov_SC04_008/ov_SC04_008_jr_801734BC.c b/src/ov_SC04_008/ov_SC04_008_jr_801734BC.c index 7ba54389d..3d49146ca 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_801734BC.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_801734BC.c @@ -3084,915 +3084,3 @@ void func_80178D18(void) { D_801934BC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80191E64; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80191E64 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80191E64; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80191E64 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80191E8C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80191E8C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80191E48; - -s32 func_8017A3B0(void) { - switch (D_80191E48) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80191E84; -extern short D_80191E80; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80191E84) { - case 0: - func_800D0CA0(1); - D_80191E84 = D_80191E84 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80191E80; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80191E84 = D_80191E84 + 1; - if (D_80191E84 < 0x1E) { - return 0; - } - D_80191E84 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80191EC4; - extern s16 D_80191EC6; - extern s16 D_80191EC8; - extern s16 D_80191EBC; - extern s16 D_80191EBE; - extern s16 D_80191EC0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80191EC4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80191EC6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80191EC8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80191EBC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80191EBE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80191EC0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80191E4C; -extern u16 D_80191ECC; -extern u16 D_80191ECE; -extern u16 D_80191ED0; -extern s16 D_80193448; - -void func_8017B1D8(void) { - func_8012A418(); - D_80193448 = 0; - D_80191E4C = 0; - D_80191ECC = D_80126B5E; - D_80191ECE = D_80126B62; - D_80191ED0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182404[]; - extern s16 D_80191EC4; - extern s16 D_80191EBC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80191EC4; - s16 *p78C = &D_80191EBC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80193448 = 1; - D_80191E4C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80191E6C; - extern SV4_8017B368 D_80191E74; - extern s16 D_80191EC4; - extern s16 D_80191EBC; - extern u16 D_80182404; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80191E6C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80191E74; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182404)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182404)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80191EC4) = loc0; - (*(SV4_8017B368 *)&D_80191EBC) = loc1; - D_80193448 = 1; - D_80191E4C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182404[]; - extern s16 D_80191EC4; - extern s16 D_80191EC6; - extern s16 D_80191EC8; - extern s16 D_80191EBC; - extern s16 D_80191EBE; - extern s16 D_80191EC0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80191EC4; - s16 *p78C = &D_80191EBC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80191EC6; - v798 = D_80191EC8; - v78C = *p78C; - v78E = D_80191EBE; - v790 = D_80191EC0; - __asm__ __volatile__(""); - D_80193448 = 1; - D_80191E4C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80191E4C; -extern s16 D_80191EC4; -extern s16 D_80191EC6; -extern s16 D_80191EC8; -extern s16 D_80191EBC; -extern s16 D_80191EBE; -extern s16 D_80191EC0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80191E4C = 0; - D_80191EC4 = (s16) D_80114F30; - D_80191EC6 = (s16) D_80114F34; - D_80191EC8 = (s16) D_80114F38; - D_80191EBC = (s16) D_80114F24; - D_80191EBE = (s16) D_80114F28; - D_80191EC0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80191EDC; -extern s16 D_80191EDE; -extern s16 D_80191EE0; -extern s16 D_80191EE4; -extern s16 D_80191EE6; -extern s16 D_80191EE8; - -void func_8017B824(void) { - D_80191EDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80191EDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80191EE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80191EE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80191EE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80191EE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80191EDC; -extern s16 D_80191EDE; -extern s16 D_80191EE0; -extern s16 D_80191EE4; -extern s16 D_80191EE6; -extern s16 D_80191EE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80191EDC; - D_80114F34 = D_80191EDE; - D_80114F38 = D_80191EE0; - D_80114F24 = D_80191EE4; - D_80114F28 = D_80191EE6; - D_80114F2C = D_80191EE8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80191EC4), src[8..15] -> (*(S8_8017B8E8 *)&D_80191EBC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80191EC4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80191EBC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80191ECC; -extern u16 D_80191ECE; -extern u16 D_80191ED0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80191E4C; -extern short D_80191ED4; -extern short D_80191ED6; -extern short D_80191ED8; -extern s16 D_80191EC4; -extern s16 D_80191EC6; -extern s16 D_80191EC8; -extern s16 D_80191EBC; -extern s16 D_80191EBE; -extern s16 D_80191EC0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80191ECC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80191ECE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80191ED0); - (*(s16 *)&D_80191ED4) = buf[0]; - (*(s16 *)&D_80191ED6) = buf[1]; - (*(s16 *)&D_80191ED8) = buf[2]; - D_80191EC4 = D_80114F30 + buf[0]; - D_80191E4C = 0; - D_80191EC6 = D_80114F34 + buf[1]; - D_80191EC8 = D_80114F38 + buf[2]; - D_80191EBC = D_80114F24 + buf[0]; - D_80191EBE = D_80114F28 + buf[1]; - D_80191EC0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80191E6C; -extern SV4 D_80191E74; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80191E74) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80191E6C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80191E74 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80191E74)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80191E6C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80191E74) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80191E94[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80191E94; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80191E4C; -extern s16 D_80193448; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80191E4C = D_80191E4C + 1; - if (D_80191E4C >= 0x1F) { - D_80193448 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80191E4C; -extern s16 D_80193448; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80191E4C = D_80191E4C + 1; - if (0x18 < D_80191E4C) { - func_8012A4BC(); - D_80193448 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80191E4C; -extern void (*D_80191E90)(void); -extern short D_80191ED4; -extern short D_80191ED6; -extern short D_80191ED8; -extern s16 D_80193448; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80191E4C = D_80191E4C + 1; - if (D_80191E4C >= 0x19) { - if (D_80191E90 != 0) { - (*D_80191E90)(); - } else { - D_80114F30 = D_80114F30 + D_80191ED4; - D_80114F34 = D_80114F34 + D_80191ED6; - D_80114F38 = D_80114F38 + D_80191ED8; - D_80114F24 = D_80114F24 + D_80191ED4; - D_80114F28 = D_80114F28 + D_80191ED6; - D_80114F2C = D_80114F2C + D_80191ED8; - func_8012A4BC(); - } - D_80193448 = 0; - } -} - - - -extern void (*D_801824A4[])(void); - -void func_8017BE60(void *a0) { - D_801824A4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017CD9C); - - -extern void (*D_80182500[])(void); - -void func_8017CE0C(void *a0) { - D_80182500[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017CE48); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE8C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017CEB0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEF0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF6C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80182514[])(void); - -void func_8017CF8C(void *a0) { - D_80182514[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017CFC8); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D03C); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D064); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D08C); - - -extern void (*D_80182530[])(void); - -void func_8017D12C(void *a0) { - D_80182530[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D168); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D210); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D3A8); - -extern void func_8013CB84(void); - void func_8017D3D8(void) { - func_8013CB84(); - } - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D3F8); - -extern s32 func_8017D738(void); - -s32 func_8017D738(void) { - return 0x55; -} - - - -extern void (*D_8018255C[])(void); - -void func_8017D740(void *a0) { - D_8018255C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D77C); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D8C4); - - -extern void (*D_80182564[])(void); - -void func_8017D990(void *a0) { - D_80182564[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017D9CC); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DB64); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DC54); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DCB4); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DE40); - - -extern void (*D_80182570[])(void); - -void func_8017DE70(void *a0) { - D_80182570[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DEAC); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017DEE0); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E030); - - -extern void (*D_801825AC[])(void); - -void func_8017E11C(void *a0) { - D_801825AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E158); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E23C); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E2A8); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E628); - - -void func_8017E754(s32 arg0) { - s32 var_v1; - *(s8 *)(arg0 + 0xc1) = 0; - *(s16 *)(arg0 + 0x5e) = 0; - *(s16 *)(arg0 + 0x5c) = 0; - *(s16 *)(arg0 + 0x102) = 3; - var_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(var_v1 + 0x2c) |= 0x10; - } - - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E780); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E8B8); - -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_801734BC", func_8017E9D8); - diff --git a/src/ov_SC04_008/ov_SC04_008_jr_80178D40.c b/src/ov_SC04_008/ov_SC04_008_jr_80178D40.c new file mode 100644 index 000000000..37c160932 --- /dev/null +++ b/src/ov_SC04_008/ov_SC04_008_jr_80178D40.c @@ -0,0 +1,4361 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181CAC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801911B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181CA0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181CE4[]; +extern unsigned short D_80181CEC[]; +extern unsigned short D_80181CF4[]; +extern unsigned char D_801911C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801911B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181CFC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801912F4; +extern M2C_UNK D_801912F8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80191280; +extern void (*D_80181D2C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801912FC[]; +extern u8 D_80191304[]; +extern u8 D_801912B4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181D34[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181D50[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181D58[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DC0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181D64; +extern u8 D_80181D70; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181DF4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181DFC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181E50[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181E84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181E74[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181EA0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181F18[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181F20[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181F28[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181F30[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181F38[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181F40[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181F4C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181F58[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181F64[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181F74[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181F84[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181F8C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181F94[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181F9C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181FA4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181FAC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181FB4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181FBC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181FC4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181FCC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181FD4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181FDC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181FE4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181FEC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181FF4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181FFC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182004[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018200C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182014[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018201C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182024[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018202C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182034[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182078[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018203C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801820A8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801820E4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018213C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018214C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182154[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801822BC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801822C8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801908C4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80193448; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80191A38; +extern short D_801934BC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801934BC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801934BC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80191A38 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801934BC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80193418 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80193418 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801934BC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801934BC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80191E94[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80191A3C; + extern s32 D_80191E50; + extern s16 D_80191E54; + extern s16 D_80191E58; + extern s16 D_80191E5C; + extern s16 D_80191E60; + extern s32 D_80191E68; + extern s32 D_80191E6C; + extern s32 D_80191E7C; + extern s16 D_80191E80; + extern s16 D_80191E84; + extern s32 D_80191E88; + extern s32 D_80191E90; + extern s32 D_80191E94[10]; + extern s32 D_80193360; + extern s16 D_80193418; + extern s32 D_80193444; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80193418; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80191E50); + D_80191E50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80191E5C, D_80191E60 ? 0x48 : 0x40); + (*(s16*)&D_801934BC) = 2; + break; + case 0: + func_80179B28(D_80191E50); + D_80191E50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80191E54, D_80191E58 ? 0x48 : 0x40); + (*(s16*)&D_801934BC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80193360 != 0) { + func_80179B28(D_80191E50); + D_80191E50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80191E54, D_80191E58 ? 0x48 : 0x40); + (*(s16*)&D_801934BC) = 1; + } else { + (*(s16*)&D_801934BC) = 3; + } + break; + case 0x32: + func_80179B28(D_80191E50); + D_80191E50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80191E54, + D_80191E58 ? 0x48 : 0x40); + (*(s16*)&D_801934BC) = 1; + break; + case 2: + func_80179B28(D_80191E50); + if (D_80191E68 != 0) { + D_80191A38 = D_80191E68; + D_80191E68 = 0; + (*(s16*)&D_801934BC) = 3; + return; + } + (*(s16*)&D_801934BC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801934BC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801934BC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801934BC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801934BC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801934BC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801934BC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801934BC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801934BC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801934BC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801934BC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801934BC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x1B: + D_80191E88 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801934BC) = 4; + D_80191A3C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801934BC) = 5; + D_80191E7C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80191E7C = (s32)func_8017A3B0; + (*(s16*)&D_801934BC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x24: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801934BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801934BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801934BC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801934BC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801934BC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801934BC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801934BC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801934BC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801934BC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80191E6C); + (*(s16*)&D_801934BC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80191E6C); + (*(s16*)&D_801934BC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80191E6C); + (*(s16*)&D_801934BC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80191E6C); + (*(s16*)&D_801934BC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + break; + case 0x4E: + D_80191E90 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x2B: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801934BC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80193444 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801934BC) = 3; + break; + case 0x34: + (*(s16*)&D_801934BC) = 3; + D_80191A38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80191E68 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801934BC) = 3; + D_80191A38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801934BC) = 3; + D_80191A38 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80191A38 = *(s32 *)(D_80191A38 + 4); + return; + case 0x37: + (*(s16*)&D_801934BC) = 3; + D_80191E54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80191E58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801934BC) = 3; + D_80191E5C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80191E60 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801934BC) = 3; + D_80191E54 = w1; + D_80191E58 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801934BC) = 3; + D_80191E5C = w2; + D_80191E60 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + case 0x43: + D_80191E7C = (s32)func_8017A3D8; + D_80191E84 = 0; + (*(s16*)&D_801934BC) = 5; + D_80191E80 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801934BC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801934BC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801934BC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80191E94; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801934BC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80191E94; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801934BC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80191E94[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801934BC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80191E94; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801934BC) = 3; + break; + default: + break; + } +Lend: + D_80191A38 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80191E64; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80191E64 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80191E64; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80191E64 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80191E8C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80191E8C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80191E48; + +s32 func_8017A3B0(void) { + switch (D_80191E48) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80191E84; +extern short D_80191E80; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80191E84) { + case 0: + func_800D0CA0(1); + D_80191E84 = D_80191E84 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80191E80; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80191E84 = D_80191E84 + 1; + if (D_80191E84 < 0x1E) { + return 0; + } + D_80191E84 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80191EC4; + extern s16 D_80191EC6; + extern s16 D_80191EC8; + extern s16 D_80191EBC; + extern s16 D_80191EBE; + extern s16 D_80191EC0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80191EC4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80191EC6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80191EC8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80191EBC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80191EBE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80191EC0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80191E4C; +extern u16 D_80191ECC; +extern u16 D_80191ECE; +extern u16 D_80191ED0; +extern s16 D_80193448; + +void func_8017B1D8(void) { + func_8012A418(); + D_80193448 = 0; + D_80191E4C = 0; + D_80191ECC = D_80126B5E; + D_80191ECE = D_80126B62; + D_80191ED0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182404[]; + extern s16 D_80191EC4; + extern s16 D_80191EBC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80191EC4; + s16 *p78C = &D_80191EBC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80193448 = 1; + D_80191E4C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80191E6C; + extern SV4_8017B368 D_80191E74; + extern s16 D_80191EC4; + extern s16 D_80191EBC; + extern u16 D_80182404; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80191E6C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80191E74; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182404)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182404)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80191EC4) = loc0; + (*(SV4_8017B368 *)&D_80191EBC) = loc1; + D_80193448 = 1; + D_80191E4C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182404[]; + extern s16 D_80191EC4; + extern s16 D_80191EC6; + extern s16 D_80191EC8; + extern s16 D_80191EBC; + extern s16 D_80191EBE; + extern s16 D_80191EC0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80191EC4; + s16 *p78C = &D_80191EBC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80191EC6; + v798 = D_80191EC8; + v78C = *p78C; + v78E = D_80191EBE; + v790 = D_80191EC0; + __asm__ __volatile__(""); + D_80193448 = 1; + D_80191E4C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80191E4C; +extern s16 D_80191EC4; +extern s16 D_80191EC6; +extern s16 D_80191EC8; +extern s16 D_80191EBC; +extern s16 D_80191EBE; +extern s16 D_80191EC0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80191E4C = 0; + D_80191EC4 = (s16) D_80114F30; + D_80191EC6 = (s16) D_80114F34; + D_80191EC8 = (s16) D_80114F38; + D_80191EBC = (s16) D_80114F24; + D_80191EBE = (s16) D_80114F28; + D_80191EC0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80191EDC; +extern s16 D_80191EDE; +extern s16 D_80191EE0; +extern s16 D_80191EE4; +extern s16 D_80191EE6; +extern s16 D_80191EE8; + +void func_8017B824(void) { + D_80191EDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80191EDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80191EE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80191EE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80191EE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80191EE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80191EDC; +extern s16 D_80191EDE; +extern s16 D_80191EE0; +extern s16 D_80191EE4; +extern s16 D_80191EE6; +extern s16 D_80191EE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80191EDC; + D_80114F34 = D_80191EDE; + D_80114F38 = D_80191EE0; + D_80114F24 = D_80191EE4; + D_80114F28 = D_80191EE6; + D_80114F2C = D_80191EE8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80191EC4), src[8..15] -> (*(S8_8017B8E8 *)&D_80191EBC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80191EC4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80191EBC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80191ECC; +extern u16 D_80191ECE; +extern u16 D_80191ED0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80191E4C; +extern short D_80191ED4; +extern short D_80191ED6; +extern short D_80191ED8; +extern s16 D_80191EC4; +extern s16 D_80191EC6; +extern s16 D_80191EC8; +extern s16 D_80191EBC; +extern s16 D_80191EBE; +extern s16 D_80191EC0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80191ECC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80191ECE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80191ED0); + (*(s16 *)&D_80191ED4) = buf[0]; + (*(s16 *)&D_80191ED6) = buf[1]; + (*(s16 *)&D_80191ED8) = buf[2]; + D_80191EC4 = D_80114F30 + buf[0]; + D_80191E4C = 0; + D_80191EC6 = D_80114F34 + buf[1]; + D_80191EC8 = D_80114F38 + buf[2]; + D_80191EBC = D_80114F24 + buf[0]; + D_80191EBE = D_80114F28 + buf[1]; + D_80191EC0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80191E6C; +extern SV4 D_80191E74; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80191E74) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80191E6C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80191E74 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80191E74)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80191E6C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80191E74) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80191E94[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80191E94; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80191E4C; +extern s16 D_80193448; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80191E4C = D_80191E4C + 1; + if (D_80191E4C >= 0x1F) { + D_80193448 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80191E4C; +extern s16 D_80193448; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80191E4C = D_80191E4C + 1; + if (0x18 < D_80191E4C) { + func_8012A4BC(); + D_80193448 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80191E4C; +extern void (*D_80191E90)(void); +extern short D_80191ED4; +extern short D_80191ED6; +extern short D_80191ED8; +extern s16 D_80193448; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80191E4C = D_80191E4C + 1; + if (D_80191E4C >= 0x19) { + if (D_80191E90 != 0) { + (*D_80191E90)(); + } else { + D_80114F30 = D_80114F30 + D_80191ED4; + D_80114F34 = D_80114F34 + D_80191ED6; + D_80114F38 = D_80114F38 + D_80191ED8; + D_80114F24 = D_80114F24 + D_80191ED4; + D_80114F28 = D_80114F28 + D_80191ED6; + D_80114F2C = D_80114F2C + D_80191ED8; + func_8012A4BC(); + } + D_80193448 = 0; + } +} + + + +extern void (*D_801824A4[])(void); + +void func_8017BE60(void *a0) { + D_801824A4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017CD9C); + + +extern void (*D_80182500[])(void); + +void func_8017CE0C(void *a0) { + D_80182500[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017CE48); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE8C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017CEB0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEF0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF6C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80182514[])(void); + +void func_8017CF8C(void *a0) { + D_80182514[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017CFC8); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D03C); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D064); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D08C); + + +extern void (*D_80182530[])(void); + +void func_8017D12C(void *a0) { + D_80182530[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D168); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D210); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D3A8); + +extern void func_8013CB84(void); + void func_8017D3D8(void) { + func_8013CB84(); + } + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D3F8); + +extern s32 func_8017D738(void); + +s32 func_8017D738(void) { + return 0x55; +} + + + +extern void (*D_8018255C[])(void); + +void func_8017D740(void *a0) { + D_8018255C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D77C); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D8C4); + + +extern void (*D_80182564[])(void); + +void func_8017D990(void *a0) { + D_80182564[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017D9CC); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DB64); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DC54); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DCB4); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DE40); + + +extern void (*D_80182570[])(void); + +void func_8017DE70(void *a0) { + D_80182570[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DEAC); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017DEE0); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E030); + + +extern void (*D_801825AC[])(void); + +void func_8017E11C(void *a0) { + D_801825AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E158); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E23C); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E2A8); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E628); + + +void func_8017E754(s32 arg0) { + s32 var_v1; + *(s8 *)(arg0 + 0xc1) = 0; + *(s16 *)(arg0 + 0x5e) = 0; + *(s16 *)(arg0 + 0x5c) = 0; + *(s16 *)(arg0 + 0x102) = 3; + var_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(var_v1 + 0x2c) |= 0x10; + } + + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E780); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E8B8); + +INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_80178D40", func_8017E9D8); + + diff --git a/src/ov_SC04_009/ov_SC04_009_jr_801734BC.c b/src/ov_SC04_009/ov_SC04_009_jr_801734BC.c index a6267f05b..467e626c1 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_801734BC.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_801734BC.c @@ -3084,1022 +3084,3 @@ void func_80178D18(void) { D_8019826C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80198074; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80198074 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80198074; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80198074 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019809C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019809C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80198058; - -s32 func_8017A3B0(void) { - switch (D_80198058) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80198094; -extern short D_80198090; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80198094) { - case 0: - func_800D0CA0(1); - D_80198094 = D_80198094 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80198090; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80198094 = D_80198094 + 1; - if (D_80198094 < 0x1E) { - return 0; - } - D_80198094 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801980D4; - extern s16 D_801980D6; - extern s16 D_801980D8; - extern s16 D_801980CC; - extern s16 D_801980CE; - extern s16 D_801980D0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801980D4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801980D6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801980D8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801980CC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801980CE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801980D0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019805C; -extern u16 D_801980DC; -extern u16 D_801980DE; -extern u16 D_801980E0; -extern s16 D_801981F8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801981F8 = 0; - D_8019805C = 0; - D_801980DC = D_80126B5E; - D_801980DE = D_80126B62; - D_801980E0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182430[]; - extern s16 D_801980D4; - extern s16 D_801980CC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182430[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182430[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801980D4; - s16 *p78C = &D_801980CC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801981F8 = 1; - D_8019805C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019807C; - extern SV4_8017B368 D_80198084; - extern s16 D_801980D4; - extern s16 D_801980CC; - extern u16 D_80182430; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019807C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80198084; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182430)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182430)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801980D4) = loc0; - (*(SV4_8017B368 *)&D_801980CC) = loc1; - D_801981F8 = 1; - D_8019805C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182430[]; - extern s16 D_801980D4; - extern s16 D_801980D6; - extern s16 D_801980D8; - extern s16 D_801980CC; - extern s16 D_801980CE; - extern s16 D_801980D0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182430[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182430[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801980D4; - s16 *p78C = &D_801980CC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801980D6; - v798 = D_801980D8; - v78C = *p78C; - v78E = D_801980CE; - v790 = D_801980D0; - __asm__ __volatile__(""); - D_801981F8 = 1; - D_8019805C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019805C; -extern s16 D_801980D4; -extern s16 D_801980D6; -extern s16 D_801980D8; -extern s16 D_801980CC; -extern s16 D_801980CE; -extern s16 D_801980D0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019805C = 0; - D_801980D4 = (s16) D_80114F30; - D_801980D6 = (s16) D_80114F34; - D_801980D8 = (s16) D_80114F38; - D_801980CC = (s16) D_80114F24; - D_801980CE = (s16) D_80114F28; - D_801980D0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801980EC; -extern s16 D_801980EE; -extern s16 D_801980F0; -extern s16 D_801980F4; -extern s16 D_801980F6; -extern s16 D_801980F8; - -void func_8017B824(void) { - D_801980EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801980EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801980F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801980F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801980F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801980F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801980EC; -extern s16 D_801980EE; -extern s16 D_801980F0; -extern s16 D_801980F4; -extern s16 D_801980F6; -extern s16 D_801980F8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801980EC; - D_80114F34 = D_801980EE; - D_80114F38 = D_801980F0; - D_80114F24 = D_801980F4; - D_80114F28 = D_801980F6; - D_80114F2C = D_801980F8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801980D4), src[8..15] -> (*(S8_8017B8E8 *)&D_801980CC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801980D4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801980CC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801980DC; -extern u16 D_801980DE; -extern u16 D_801980E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019805C; -extern short D_801980E4; -extern short D_801980E6; -extern short D_801980E8; -extern s16 D_801980D4; -extern s16 D_801980D6; -extern s16 D_801980D8; -extern s16 D_801980CC; -extern s16 D_801980CE; -extern s16 D_801980D0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801980DC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801980DE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801980E0); - (*(s16 *)&D_801980E4) = buf[0]; - (*(s16 *)&D_801980E6) = buf[1]; - (*(s16 *)&D_801980E8) = buf[2]; - D_801980D4 = D_80114F30 + buf[0]; - D_8019805C = 0; - D_801980D6 = D_80114F34 + buf[1]; - D_801980D8 = D_80114F38 + buf[2]; - D_801980CC = D_80114F24 + buf[0]; - D_801980CE = D_80114F28 + buf[1]; - D_801980D0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019807C; -extern SV4 D_80198084; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80198084) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019807C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80198084 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80198084)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019807C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80198084) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801980A4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801980A4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019805C; -extern s16 D_801981F8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019805C = D_8019805C + 1; - if (D_8019805C >= 0x1F) { - D_801981F8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019805C; -extern s16 D_801981F8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019805C = D_8019805C + 1; - if (0x18 < D_8019805C) { - func_8012A4BC(); - D_801981F8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019805C; -extern void (*D_801980A0)(void); -extern short D_801980E4; -extern short D_801980E6; -extern short D_801980E8; -extern s16 D_801981F8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019805C = D_8019805C + 1; - if (D_8019805C >= 0x19) { - if (D_801980A0 != 0) { - (*D_801980A0)(); - } else { - D_80114F30 = D_80114F30 + D_801980E4; - D_80114F34 = D_80114F34 + D_801980E6; - D_80114F38 = D_80114F38 + D_801980E8; - D_80114F24 = D_80114F24 + D_801980E4; - D_80114F28 = D_80114F28 + D_801980E6; - D_80114F2C = D_80114F2C + D_801980E8; - func_8012A4BC(); - } - D_801981F8 = 0; - } -} - - - -extern void (*D_801824D0[])(void); - -void func_8017BE60(void *a0) { - D_801824D0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017CD9C); - - -extern void (*D_80182550[])(void); - -void func_8017CE0C(void *a0) { - D_80182550[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017CE48); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE8C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80182558[])(void); - -void func_8017CEB0(void *a0) { - D_80182558[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017CEEC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF2C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017CFA8); - - -extern void (*D_80182564[])(void); - -void func_8017CFC8(void *a0) { - D_80182564[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D004); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D078); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D0A0); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D0C8); - - -extern void (*D_80182580[])(void); - -void func_8017D170(void *a0) { - D_80182580[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D1AC); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D288); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D420); - - -extern void (*D_8018260C[])(void); - -void func_8017D450(void *a0) { - D_8018260C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017D48C(void *a0) { - *(u16 *)((s32)a0 + 0x100) = 0; - *(u16 *)((s32)a0 + 0x104) = 0; - *(u16 *)((s32)a0 + 0x108) = 0; - *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0xE); - *(u16 *)((s32)a0 + 0x106) = *(u16 *)((s32)a0 + 0xA); - } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D4AC); - - -extern void (*D_8018278C[])(void); - -void func_8017D57C(void *a0) { - D_8018278C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8017D5E4(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017D5B8(void) { - func_8017D5E4(); - ((s32 (*)(s32, s32))func_8002D4C8)(0xC5F, 0); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D5E4); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D638); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D6A8); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D768); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D808); - -void func_8017D904(void) { -} - -extern s32 func_8017D90C(void); - -s32 func_8017D90C(void) { - return 0x55; -} - - - -extern void (*D_80182794[])(void); - -void func_8017D914(void *a0) { - D_80182794[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s16 a1); - extern s32 func_8012AD50(void *a0); - void func_8017D950(s32 *a0) { - func_8012BF4C(a0, 0); - ((void (*)(void *))func_8012AD50)((void *)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017D984); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DAD4); - - -extern void (*D_801827D0[])(void); - -void func_8017DBC0(void *a0) { - D_801827D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DBFC); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DCE0); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DD4C); - - -extern void (*D_80194ED0[])(void); - -void func_8017DE38(void *a0) { - D_80194ED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DE74); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DF48); - -void func_8017DF70(void) { -} - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017DF78); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E0C4); - -extern void func_8012C218(void *a0); - void func_8017E1E4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E210); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E220); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E230); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_8017E270(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E2A4); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E2C8); - - -extern void (*D_80194EF8[])(void); - -void func_8017E32C(void *a0) { - D_80194EF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E368); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E3F0); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E4B0); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E520); - - -extern void (*D_80195024[])(void); - -void func_8017E618(void *a0) { - D_80195024[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E654); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E72C); - -void func_8017E754(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80194FD4; - void func_8017E75C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80194FD4); - } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E788); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E7C8); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E888); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E8F4); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E904); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E914); - -extern void func_800296F8(void); - s32 func_8017E92C(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_801734BC", func_8017E950); - diff --git a/src/ov_SC04_009/ov_SC04_009_jr_80178D40.c b/src/ov_SC04_009/ov_SC04_009_jr_80178D40.c new file mode 100644 index 000000000..3bb02bf33 --- /dev/null +++ b/src/ov_SC04_009/ov_SC04_009_jr_80178D40.c @@ -0,0 +1,4468 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181CD8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801973C8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181CCC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181D10[]; +extern unsigned short D_80181D18[]; +extern unsigned short D_80181D20[]; +extern unsigned char D_801973D0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801973C8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181D28[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80197504; +extern M2C_UNK D_80197508; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80197490; +extern void (*D_80181D58[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019750C[]; +extern u8 D_80197514[]; +extern u8 D_801974C4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181D60[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181D7C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181D84[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DEC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181D90; +extern u8 D_80181D9C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181E20[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181E7C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181EB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181EA0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181ECC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181F44[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181F4C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181F54[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181F5C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181F64[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181F6C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181F78[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181F84[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181F90[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181FA0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181FB0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181FB8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181FC0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181FC8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181FD0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181FD8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181FE0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181FE8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181FF0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181FF8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182000[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182008[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182010[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182018[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182020[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182028[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182030[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182038[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182040[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182048[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182050[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182058[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182060[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801820A4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182068; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801820D4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182110[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182168[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182178[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182180[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801822E8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801822F4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80196AD8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801981F8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80197C48; +extern short D_8019826C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019826C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019826C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80197C48 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019826C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801981C8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801981C8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019826C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019826C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801980A4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80197C4C; + extern s32 D_80198060; + extern s16 D_80198064; + extern s16 D_80198068; + extern s16 D_8019806C; + extern s16 D_80198070; + extern s32 D_80198078; + extern s32 D_8019807C; + extern s32 D_8019808C; + extern s16 D_80198090; + extern s16 D_80198094; + extern s32 D_80198098; + extern s32 D_801980A0; + extern s32 D_801980A4[10]; + extern s32 D_80198110; + extern s16 D_801981C8; + extern s32 D_801981F4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801981C8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80198060); + D_80198060 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019806C, D_80198070 ? 0x48 : 0x40); + (*(s16*)&D_8019826C) = 2; + break; + case 0: + func_80179B28(D_80198060); + D_80198060 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80198064, D_80198068 ? 0x48 : 0x40); + (*(s16*)&D_8019826C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80198110 != 0) { + func_80179B28(D_80198060); + D_80198060 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80198064, D_80198068 ? 0x48 : 0x40); + (*(s16*)&D_8019826C) = 1; + } else { + (*(s16*)&D_8019826C) = 3; + } + break; + case 0x32: + func_80179B28(D_80198060); + D_80198060 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80198064, + D_80198068 ? 0x48 : 0x40); + (*(s16*)&D_8019826C) = 1; + break; + case 2: + func_80179B28(D_80198060); + if (D_80198078 != 0) { + D_80197C48 = D_80198078; + D_80198078 = 0; + (*(s16*)&D_8019826C) = 3; + return; + } + (*(s16*)&D_8019826C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019826C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019826C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019826C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019826C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019826C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019826C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019826C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019826C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019826C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019826C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019826C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x1B: + D_80198098 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019826C) = 4; + D_80197C4C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019826C) = 5; + D_8019808C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019808C = (s32)func_8017A3B0; + (*(s16*)&D_8019826C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x24: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019826C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019826C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019826C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019826C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019826C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019826C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019826C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019826C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019826C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019807C); + (*(s16*)&D_8019826C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019807C); + (*(s16*)&D_8019826C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019807C); + (*(s16*)&D_8019826C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019807C); + (*(s16*)&D_8019826C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + break; + case 0x4E: + D_801980A0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019826C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801981F4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019826C) = 3; + break; + case 0x34: + (*(s16*)&D_8019826C) = 3; + D_80197C48 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80198078 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019826C) = 3; + D_80197C48 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019826C) = 3; + D_80197C48 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80197C48 = *(s32 *)(D_80197C48 + 4); + return; + case 0x37: + (*(s16*)&D_8019826C) = 3; + D_80198064 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80198068 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019826C) = 3; + D_8019806C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80198070 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019826C) = 3; + D_80198064 = w1; + D_80198068 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019826C) = 3; + D_8019806C = w2; + D_80198070 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + case 0x43: + D_8019808C = (s32)func_8017A3D8; + D_80198094 = 0; + (*(s16*)&D_8019826C) = 5; + D_80198090 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019826C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019826C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019826C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801980A4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019826C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801980A4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019826C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801980A4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019826C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801980A4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019826C) = 3; + break; + default: + break; + } +Lend: + D_80197C48 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80198074; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80198074 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80198074; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80198074 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019809C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019809C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80198058; + +s32 func_8017A3B0(void) { + switch (D_80198058) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80198094; +extern short D_80198090; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80198094) { + case 0: + func_800D0CA0(1); + D_80198094 = D_80198094 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80198090; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80198094 = D_80198094 + 1; + if (D_80198094 < 0x1E) { + return 0; + } + D_80198094 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801980D4; + extern s16 D_801980D6; + extern s16 D_801980D8; + extern s16 D_801980CC; + extern s16 D_801980CE; + extern s16 D_801980D0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801980D4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801980D6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801980D8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801980CC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801980CE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801980D0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019805C; +extern u16 D_801980DC; +extern u16 D_801980DE; +extern u16 D_801980E0; +extern s16 D_801981F8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801981F8 = 0; + D_8019805C = 0; + D_801980DC = D_80126B5E; + D_801980DE = D_80126B62; + D_801980E0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182430[]; + extern s16 D_801980D4; + extern s16 D_801980CC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182430[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182430[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801980D4; + s16 *p78C = &D_801980CC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801981F8 = 1; + D_8019805C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019807C; + extern SV4_8017B368 D_80198084; + extern s16 D_801980D4; + extern s16 D_801980CC; + extern u16 D_80182430; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019807C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80198084; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182430)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182430)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801980D4) = loc0; + (*(SV4_8017B368 *)&D_801980CC) = loc1; + D_801981F8 = 1; + D_8019805C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182430[]; + extern s16 D_801980D4; + extern s16 D_801980D6; + extern s16 D_801980D8; + extern s16 D_801980CC; + extern s16 D_801980CE; + extern s16 D_801980D0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182430[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182430[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801980D4; + s16 *p78C = &D_801980CC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801980D6; + v798 = D_801980D8; + v78C = *p78C; + v78E = D_801980CE; + v790 = D_801980D0; + __asm__ __volatile__(""); + D_801981F8 = 1; + D_8019805C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019805C; +extern s16 D_801980D4; +extern s16 D_801980D6; +extern s16 D_801980D8; +extern s16 D_801980CC; +extern s16 D_801980CE; +extern s16 D_801980D0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019805C = 0; + D_801980D4 = (s16) D_80114F30; + D_801980D6 = (s16) D_80114F34; + D_801980D8 = (s16) D_80114F38; + D_801980CC = (s16) D_80114F24; + D_801980CE = (s16) D_80114F28; + D_801980D0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801980EC; +extern s16 D_801980EE; +extern s16 D_801980F0; +extern s16 D_801980F4; +extern s16 D_801980F6; +extern s16 D_801980F8; + +void func_8017B824(void) { + D_801980EC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801980EE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801980F0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801980F4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801980F6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801980F8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801980EC; +extern s16 D_801980EE; +extern s16 D_801980F0; +extern s16 D_801980F4; +extern s16 D_801980F6; +extern s16 D_801980F8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801980EC; + D_80114F34 = D_801980EE; + D_80114F38 = D_801980F0; + D_80114F24 = D_801980F4; + D_80114F28 = D_801980F6; + D_80114F2C = D_801980F8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801980D4), src[8..15] -> (*(S8_8017B8E8 *)&D_801980CC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801980D4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801980CC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801980DC; +extern u16 D_801980DE; +extern u16 D_801980E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019805C; +extern short D_801980E4; +extern short D_801980E6; +extern short D_801980E8; +extern s16 D_801980D4; +extern s16 D_801980D6; +extern s16 D_801980D8; +extern s16 D_801980CC; +extern s16 D_801980CE; +extern s16 D_801980D0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801980DC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801980DE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801980E0); + (*(s16 *)&D_801980E4) = buf[0]; + (*(s16 *)&D_801980E6) = buf[1]; + (*(s16 *)&D_801980E8) = buf[2]; + D_801980D4 = D_80114F30 + buf[0]; + D_8019805C = 0; + D_801980D6 = D_80114F34 + buf[1]; + D_801980D8 = D_80114F38 + buf[2]; + D_801980CC = D_80114F24 + buf[0]; + D_801980CE = D_80114F28 + buf[1]; + D_801980D0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019807C; +extern SV4 D_80198084; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80198084) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019807C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80198084 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80198084)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019807C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80198084) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801980A4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801980A4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019805C; +extern s16 D_801981F8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019805C = D_8019805C + 1; + if (D_8019805C >= 0x1F) { + D_801981F8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019805C; +extern s16 D_801981F8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019805C = D_8019805C + 1; + if (0x18 < D_8019805C) { + func_8012A4BC(); + D_801981F8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019805C; +extern void (*D_801980A0)(void); +extern short D_801980E4; +extern short D_801980E6; +extern short D_801980E8; +extern s16 D_801981F8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019805C = D_8019805C + 1; + if (D_8019805C >= 0x19) { + if (D_801980A0 != 0) { + (*D_801980A0)(); + } else { + D_80114F30 = D_80114F30 + D_801980E4; + D_80114F34 = D_80114F34 + D_801980E6; + D_80114F38 = D_80114F38 + D_801980E8; + D_80114F24 = D_80114F24 + D_801980E4; + D_80114F28 = D_80114F28 + D_801980E6; + D_80114F2C = D_80114F2C + D_801980E8; + func_8012A4BC(); + } + D_801981F8 = 0; + } +} + + + +extern void (*D_801824D0[])(void); + +void func_8017BE60(void *a0) { + D_801824D0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017CD9C); + + +extern void (*D_80182550[])(void); + +void func_8017CE0C(void *a0) { + D_80182550[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017CE48); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE8C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80182558[])(void); + +void func_8017CEB0(void *a0) { + D_80182558[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017CEEC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF2C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017CFA8); + + +extern void (*D_80182564[])(void); + +void func_8017CFC8(void *a0) { + D_80182564[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D004); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D078); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D0A0); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D0C8); + + +extern void (*D_80182580[])(void); + +void func_8017D170(void *a0) { + D_80182580[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D1AC); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D288); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D420); + + +extern void (*D_8018260C[])(void); + +void func_8017D450(void *a0) { + D_8018260C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017D48C(void *a0) { + *(u16 *)((s32)a0 + 0x100) = 0; + *(u16 *)((s32)a0 + 0x104) = 0; + *(u16 *)((s32)a0 + 0x108) = 0; + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0xE); + *(u16 *)((s32)a0 + 0x106) = *(u16 *)((s32)a0 + 0xA); + } + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D4AC); + + +extern void (*D_8018278C[])(void); + +void func_8017D57C(void *a0) { + D_8018278C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8017D5E4(void); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8017D5B8(void) { + func_8017D5E4(); + ((s32 (*)(s32, s32))func_8002D4C8)(0xC5F, 0); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D5E4); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D638); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D6A8); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D768); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D808); + +void func_8017D904(void) { +} + +extern s32 func_8017D90C(void); + +s32 func_8017D90C(void) { + return 0x55; +} + + + +extern void (*D_80182794[])(void); + +void func_8017D914(void *a0) { + D_80182794[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s16 a1); + extern s32 func_8012AD50(void *a0); + void func_8017D950(s32 *a0) { + func_8012BF4C(a0, 0); + ((void (*)(void *))func_8012AD50)((void *)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017D984); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DAD4); + + +extern void (*D_801827D0[])(void); + +void func_8017DBC0(void *a0) { + D_801827D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DBFC); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DCE0); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DD4C); + + +extern void (*D_80194ED0[])(void); + +void func_8017DE38(void *a0) { + D_80194ED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DE74); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DF48); + +void func_8017DF70(void) { +} + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017DF78); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E0C4); + +extern void func_8012C218(void *a0); + void func_8017E1E4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32))func_8012C218)(*(s32 *)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E210); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E220); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E230); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_8017E270(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E2A4); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E2C8); + + +extern void (*D_80194EF8[])(void); + +void func_8017E32C(void *a0) { + D_80194EF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E368); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E3F0); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E4B0); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E520); + + +extern void (*D_80195024[])(void); + +void func_8017E618(void *a0) { + D_80195024[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E654); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E72C); + +void func_8017E754(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80194FD4; + void func_8017E75C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80194FD4); + } + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E788); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E7C8); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E888); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E8F4); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E904); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E914); + +extern void func_800296F8(void); + s32 func_8017E92C(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_80178D40", func_8017E950); + + diff --git a/src/ov_SC04_010/ov_SC04_010_jr_801734BC.c b/src/ov_SC04_010/ov_SC04_010_jr_801734BC.c index b73b51a06..68cd969db 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_801734BC.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_801734BC.c @@ -3084,941 +3084,3 @@ void func_80178D18(void) { D_8018F744 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F50C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018F50C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F50C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018F50C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018F534; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018F534 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018F4F0; - -s32 func_8017A3B0(void) { - switch (D_8018F4F0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018F52C; -extern short D_8018F528; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018F52C) { - case 0: - func_800D0CA0(1); - D_8018F52C = D_8018F52C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018F528; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018F52C = D_8018F52C + 1; - if (D_8018F52C < 0x1E) { - return 0; - } - D_8018F52C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018F56C; - extern s16 D_8018F56E; - extern s16 D_8018F570; - extern s16 D_8018F564; - extern s16 D_8018F566; - extern s16 D_8018F568; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F56C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F56E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F570, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F564, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F566, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F568, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018F4F4; -extern u16 D_8018F574; -extern u16 D_8018F576; -extern u16 D_8018F578; -extern s16 D_8018F6D0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8018F6D0 = 0; - D_8018F4F4 = 0; - D_8018F574 = D_80126B5E; - D_8018F576 = D_80126B62; - D_8018F578 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181ADC[]; - extern s16 D_8018F56C; - extern s16 D_8018F564; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181ADC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181ADC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F56C; - s16 *p78C = &D_8018F564; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8018F6D0 = 1; - D_8018F4F4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018F514; - extern SV4_8017B368 D_8018F51C; - extern s16 D_8018F56C; - extern s16 D_8018F564; - extern u16 D_80181ADC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018F514; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018F51C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181ADC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181ADC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018F56C) = loc0; - (*(SV4_8017B368 *)&D_8018F564) = loc1; - D_8018F6D0 = 1; - D_8018F4F4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181ADC[]; - extern s16 D_8018F56C; - extern s16 D_8018F56E; - extern s16 D_8018F570; - extern s16 D_8018F564; - extern s16 D_8018F566; - extern s16 D_8018F568; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181ADC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181ADC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F56C; - s16 *p78C = &D_8018F564; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018F56E; - v798 = D_8018F570; - v78C = *p78C; - v78E = D_8018F566; - v790 = D_8018F568; - __asm__ __volatile__(""); - D_8018F6D0 = 1; - D_8018F4F4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F4F4; -extern s16 D_8018F56C; -extern s16 D_8018F56E; -extern s16 D_8018F570; -extern s16 D_8018F564; -extern s16 D_8018F566; -extern s16 D_8018F568; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018F4F4 = 0; - D_8018F56C = (s16) D_80114F30; - D_8018F56E = (s16) D_80114F34; - D_8018F570 = (s16) D_80114F38; - D_8018F564 = (s16) D_80114F24; - D_8018F566 = (s16) D_80114F28; - D_8018F568 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018F584; -extern s16 D_8018F586; -extern s16 D_8018F588; -extern s16 D_8018F58C; -extern s16 D_8018F58E; -extern s16 D_8018F590; - -void func_8017B824(void) { - D_8018F584 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018F586 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018F588 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018F58C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018F58E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018F590 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018F584; -extern s16 D_8018F586; -extern s16 D_8018F588; -extern s16 D_8018F58C; -extern s16 D_8018F58E; -extern s16 D_8018F590; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018F584; - D_80114F34 = D_8018F586; - D_80114F38 = D_8018F588; - D_80114F24 = D_8018F58C; - D_80114F28 = D_8018F58E; - D_80114F2C = D_8018F590; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018F56C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F564) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018F56C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018F564) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018F574; -extern u16 D_8018F576; -extern u16 D_8018F578; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F4F4; -extern short D_8018F57C; -extern short D_8018F57E; -extern short D_8018F580; -extern s16 D_8018F56C; -extern s16 D_8018F56E; -extern s16 D_8018F570; -extern s16 D_8018F564; -extern s16 D_8018F566; -extern s16 D_8018F568; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F574); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F576); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F578); - (*(s16 *)&D_8018F57C) = buf[0]; - (*(s16 *)&D_8018F57E) = buf[1]; - (*(s16 *)&D_8018F580) = buf[2]; - D_8018F56C = D_80114F30 + buf[0]; - D_8018F4F4 = 0; - D_8018F56E = D_80114F34 + buf[1]; - D_8018F570 = D_80114F38 + buf[2]; - D_8018F564 = D_80114F24 + buf[0]; - D_8018F566 = D_80114F28 + buf[1]; - D_8018F568 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018F514; -extern SV4 D_8018F51C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F51C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018F514 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018F51C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F51C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018F514) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018F51C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018F53C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018F53C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018F4F4; -extern s16 D_8018F6D0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018F4F4 = D_8018F4F4 + 1; - if (D_8018F4F4 >= 0x1F) { - D_8018F6D0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018F4F4; -extern s16 D_8018F6D0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F4F4 = D_8018F4F4 + 1; - if (0x18 < D_8018F4F4) { - func_8012A4BC(); - D_8018F6D0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018F4F4; -extern void (*D_8018F538)(void); -extern short D_8018F57C; -extern short D_8018F57E; -extern short D_8018F580; -extern s16 D_8018F6D0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F4F4 = D_8018F4F4 + 1; - if (D_8018F4F4 >= 0x19) { - if (D_8018F538 != 0) { - (*D_8018F538)(); - } else { - D_80114F30 = D_80114F30 + D_8018F57C; - D_80114F34 = D_80114F34 + D_8018F57E; - D_80114F38 = D_80114F38 + D_8018F580; - D_80114F24 = D_80114F24 + D_8018F57C; - D_80114F28 = D_80114F28 + D_8018F57E; - D_80114F2C = D_80114F2C + D_8018F580; - func_8012A4BC(); - } - D_8018F6D0 = 0; - } -} - - - -extern void (*D_80181B7C[])(void); - -void func_8017BE60(void *a0) { - D_80181B7C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017CD9C); - - -extern void (*D_80181BD8[])(void); - -void func_8017CE0C(void *a0) { - D_80181BD8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017CE48); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE8C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181BE0[])(void); - -void func_8017CEB0(void *a0) { - D_80181BE0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017CEEC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF2C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CFA8(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017CFC8); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D03C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D064); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D08C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D0C0); - - -extern s32 D_8018B798; -extern s32 D_80126950; -extern void func_80174E9C(s32); - -void func_8017D15C(void) { - D_80126950 = 0x1A5; - func_80174E9C((s32)&D_8018B798); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D190); - - -extern void (*D_80181C8C[])(void); - -void func_8017D1D4(void *a0) { - D_80181C8C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D210); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D2D4); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D478); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D4A8); - -extern s32 func_8013CB84(void); - void func_8017D4C8(void) { - func_8013CB84(); - } - - - -extern void (*D_80181C94[])(void); - -void func_8017D4E8(void *a0) { - D_80181C94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80181D60[])(void); - -void func_8017D524(void *a0) { - D_80181D60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D560); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D5DC); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D6C4); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D6CC); - -extern s32 func_8012C588(s32 a0, s32 a1); - void func_8017D7A0(u8 *a0) { - ((void (*)(s32, s32))func_8012C588)(0x2D6, (s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D7C4); - - -extern void (*D_80181D6C[])(void); - -void func_8017D808(void *a0) { - D_80181D6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D844); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017D904); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DA58); - -extern void func_8017D6CC(void); - void func_8017DB20(void) { - func_8017D6CC(); - } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DB40); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DB9C); - -void func_8017DC1C(void) { -} - -s32 func_8017DC24(void) { - return 0x5C; - } - - - -extern void (*D_80181D74[])(void); - -void func_8017DC2C(void *a0) { - D_80181D74[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 a0, s32 a1); - extern s32 func_8012AD50(void *a0); - void func_8017DC68(s32 arg0) { - func_8012BF4C(arg0, 0); - ((void (*)(void *))func_8012AD50)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DC9C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DDEC); - - -extern void (*D_80181DB0[])(void); - -void func_8017DED8(void *a0) { - D_80181DB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DF14); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017DFF8); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_801734BC", func_8017E064); - diff --git a/src/ov_SC04_010/ov_SC04_010_jr_80178D40.c b/src/ov_SC04_010/ov_SC04_010_jr_80178D40.c new file mode 100644 index 000000000..8a4075f7c --- /dev/null +++ b/src/ov_SC04_010/ov_SC04_010_jr_80178D40.c @@ -0,0 +1,4387 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181384[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018E860; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181378[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801813BC[]; +extern unsigned short D_801813C4[]; +extern unsigned short D_801813CC[]; +extern unsigned char D_8018E868[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018E860; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801813D4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018E99C; +extern M2C_UNK D_8018E9A0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018E928; +extern void (*D_80181404[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018E9A4[]; +extern u8 D_8018E9AC[]; +extern u8 D_8018E95C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018140C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181428[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181430[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181498[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018143C; +extern u8 D_80181448; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801814CC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801814D4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181528[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018155C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018154C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181578; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801815F0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801815F8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181600[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181608[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181610[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181618[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181624[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181630[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018163C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018164C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018165C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181664[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018166C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181674[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018167C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181684[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018168C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181694[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018169C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801816A4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801816AC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801816B4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801816BC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801816C4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801816CC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801816D4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801816DC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801816E4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801816EC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801816F4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801816FC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181704[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018170C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181750[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181714; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181780[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801817BC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181814[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80181824[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018182C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181994[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801819A0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018DF64; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8018F6D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F0E0; +extern short D_8018F744; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8018F744) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8018F744)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F0E0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8018F744) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8018F6A0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8018F6A0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8018F744) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8018F744) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018F53C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F0E4; + extern s32 D_8018F4F8; + extern s16 D_8018F4FC; + extern s16 D_8018F500; + extern s16 D_8018F504; + extern s16 D_8018F508; + extern s32 D_8018F510; + extern s32 D_8018F514; + extern s32 D_8018F524; + extern s16 D_8018F528; + extern s16 D_8018F52C; + extern s32 D_8018F530; + extern s32 D_8018F538; + extern s32 D_8018F53C[10]; + extern s32 D_8018F5E8; + extern s16 D_8018F6A0; + extern s32 D_8018F6CC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8018F6A0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018F4F8); + D_8018F4F8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F504, D_8018F508 ? 0x48 : 0x40); + (*(s16*)&D_8018F744) = 2; + break; + case 0: + func_80179B28(D_8018F4F8); + D_8018F4F8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F4FC, D_8018F500 ? 0x48 : 0x40); + (*(s16*)&D_8018F744) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8018F5E8 != 0) { + func_80179B28(D_8018F4F8); + D_8018F4F8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018F4FC, D_8018F500 ? 0x48 : 0x40); + (*(s16*)&D_8018F744) = 1; + } else { + (*(s16*)&D_8018F744) = 3; + } + break; + case 0x32: + func_80179B28(D_8018F4F8); + D_8018F4F8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018F4FC, + D_8018F500 ? 0x48 : 0x40); + (*(s16*)&D_8018F744) = 1; + break; + case 2: + func_80179B28(D_8018F4F8); + if (D_8018F510 != 0) { + D_8018F0E0 = D_8018F510; + D_8018F510 = 0; + (*(s16*)&D_8018F744) = 3; + return; + } + (*(s16*)&D_8018F744) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8018F744) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8018F744) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018F744) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8018F744) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018F744) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8018F744) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018F744) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018F744) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8018F744) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8018F744) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8018F744) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x1B: + D_8018F530 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8018F744) = 4; + D_8018F0E4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8018F744) = 5; + D_8018F524 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018F524 = (s32)func_8017A3B0; + (*(s16*)&D_8018F744) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x24: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018F744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018F744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8018F744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018F744) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018F744) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018F744) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018F744) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018F744) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8018F744) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F514); + (*(s16*)&D_8018F744) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F514); + (*(s16*)&D_8018F744) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F514); + (*(s16*)&D_8018F744) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F514); + (*(s16*)&D_8018F744) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + break; + case 0x4E: + D_8018F538 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x2B: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8018F744) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8018F6CC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8018F744) = 3; + break; + case 0x34: + (*(s16*)&D_8018F744) = 3; + D_8018F0E0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018F510 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8018F744) = 3; + D_8018F0E0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8018F744) = 3; + D_8018F0E0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F0E0 = *(s32 *)(D_8018F0E0 + 4); + return; + case 0x37: + (*(s16*)&D_8018F744) = 3; + D_8018F4FC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8018F744) = 3; + D_8018F504 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F508 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8018F744) = 3; + D_8018F4FC = w1; + D_8018F500 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8018F744) = 3; + D_8018F504 = w2; + D_8018F508 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + case 0x43: + D_8018F524 = (s32)func_8017A3D8; + D_8018F52C = 0; + (*(s16*)&D_8018F744) = 5; + D_8018F528 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018F744) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018F744) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018F744) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018F53C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8018F744) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018F53C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8018F744) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018F53C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8018F744) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018F53C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8018F744) = 3; + break; + default: + break; + } +Lend: + D_8018F0E0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F50C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018F50C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F50C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018F50C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018F534; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018F534 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018F4F0; + +s32 func_8017A3B0(void) { + switch (D_8018F4F0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018F52C; +extern short D_8018F528; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018F52C) { + case 0: + func_800D0CA0(1); + D_8018F52C = D_8018F52C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018F528; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018F52C = D_8018F52C + 1; + if (D_8018F52C < 0x1E) { + return 0; + } + D_8018F52C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018F56C; + extern s16 D_8018F56E; + extern s16 D_8018F570; + extern s16 D_8018F564; + extern s16 D_8018F566; + extern s16 D_8018F568; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F56C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F56E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F570, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F564, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F566, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F568, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018F4F4; +extern u16 D_8018F574; +extern u16 D_8018F576; +extern u16 D_8018F578; +extern s16 D_8018F6D0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8018F6D0 = 0; + D_8018F4F4 = 0; + D_8018F574 = D_80126B5E; + D_8018F576 = D_80126B62; + D_8018F578 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181ADC[]; + extern s16 D_8018F56C; + extern s16 D_8018F564; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181ADC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181ADC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F56C; + s16 *p78C = &D_8018F564; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8018F6D0 = 1; + D_8018F4F4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018F514; + extern SV4_8017B368 D_8018F51C; + extern s16 D_8018F56C; + extern s16 D_8018F564; + extern u16 D_80181ADC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018F514; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018F51C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181ADC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181ADC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018F56C) = loc0; + (*(SV4_8017B368 *)&D_8018F564) = loc1; + D_8018F6D0 = 1; + D_8018F4F4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181ADC[]; + extern s16 D_8018F56C; + extern s16 D_8018F56E; + extern s16 D_8018F570; + extern s16 D_8018F564; + extern s16 D_8018F566; + extern s16 D_8018F568; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181ADC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181ADC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F56C; + s16 *p78C = &D_8018F564; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018F56E; + v798 = D_8018F570; + v78C = *p78C; + v78E = D_8018F566; + v790 = D_8018F568; + __asm__ __volatile__(""); + D_8018F6D0 = 1; + D_8018F4F4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F4F4; +extern s16 D_8018F56C; +extern s16 D_8018F56E; +extern s16 D_8018F570; +extern s16 D_8018F564; +extern s16 D_8018F566; +extern s16 D_8018F568; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018F4F4 = 0; + D_8018F56C = (s16) D_80114F30; + D_8018F56E = (s16) D_80114F34; + D_8018F570 = (s16) D_80114F38; + D_8018F564 = (s16) D_80114F24; + D_8018F566 = (s16) D_80114F28; + D_8018F568 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018F584; +extern s16 D_8018F586; +extern s16 D_8018F588; +extern s16 D_8018F58C; +extern s16 D_8018F58E; +extern s16 D_8018F590; + +void func_8017B824(void) { + D_8018F584 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018F586 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018F588 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018F58C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018F58E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018F590 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018F584; +extern s16 D_8018F586; +extern s16 D_8018F588; +extern s16 D_8018F58C; +extern s16 D_8018F58E; +extern s16 D_8018F590; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018F584; + D_80114F34 = D_8018F586; + D_80114F38 = D_8018F588; + D_80114F24 = D_8018F58C; + D_80114F28 = D_8018F58E; + D_80114F2C = D_8018F590; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018F56C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F564) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018F56C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018F564) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018F574; +extern u16 D_8018F576; +extern u16 D_8018F578; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F4F4; +extern short D_8018F57C; +extern short D_8018F57E; +extern short D_8018F580; +extern s16 D_8018F56C; +extern s16 D_8018F56E; +extern s16 D_8018F570; +extern s16 D_8018F564; +extern s16 D_8018F566; +extern s16 D_8018F568; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F574); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F576); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F578); + (*(s16 *)&D_8018F57C) = buf[0]; + (*(s16 *)&D_8018F57E) = buf[1]; + (*(s16 *)&D_8018F580) = buf[2]; + D_8018F56C = D_80114F30 + buf[0]; + D_8018F4F4 = 0; + D_8018F56E = D_80114F34 + buf[1]; + D_8018F570 = D_80114F38 + buf[2]; + D_8018F564 = D_80114F24 + buf[0]; + D_8018F566 = D_80114F28 + buf[1]; + D_8018F568 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018F514; +extern SV4 D_8018F51C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F51C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018F514 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018F51C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F51C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018F514) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018F51C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018F53C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018F53C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018F4F4; +extern s16 D_8018F6D0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018F4F4 = D_8018F4F4 + 1; + if (D_8018F4F4 >= 0x1F) { + D_8018F6D0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018F4F4; +extern s16 D_8018F6D0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F4F4 = D_8018F4F4 + 1; + if (0x18 < D_8018F4F4) { + func_8012A4BC(); + D_8018F6D0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018F4F4; +extern void (*D_8018F538)(void); +extern short D_8018F57C; +extern short D_8018F57E; +extern short D_8018F580; +extern s16 D_8018F6D0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F4F4 = D_8018F4F4 + 1; + if (D_8018F4F4 >= 0x19) { + if (D_8018F538 != 0) { + (*D_8018F538)(); + } else { + D_80114F30 = D_80114F30 + D_8018F57C; + D_80114F34 = D_80114F34 + D_8018F57E; + D_80114F38 = D_80114F38 + D_8018F580; + D_80114F24 = D_80114F24 + D_8018F57C; + D_80114F28 = D_80114F28 + D_8018F57E; + D_80114F2C = D_80114F2C + D_8018F580; + func_8012A4BC(); + } + D_8018F6D0 = 0; + } +} + + + +extern void (*D_80181B7C[])(void); + +void func_8017BE60(void *a0) { + D_80181B7C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017CD9C); + + +extern void (*D_80181BD8[])(void); + +void func_8017CE0C(void *a0) { + D_80181BD8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017CE48); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE8C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181BE0[])(void); + +void func_8017CEB0(void *a0) { + D_80181BE0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017CEEC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF2C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CFA8(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017CFC8); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D03C); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D064); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D08C); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D0C0); + + +extern s32 D_8018B798; +extern s32 D_80126950; +extern void func_80174E9C(s32); + +void func_8017D15C(void) { + D_80126950 = 0x1A5; + func_80174E9C((s32)&D_8018B798); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D190); + + +extern void (*D_80181C8C[])(void); + +void func_8017D1D4(void *a0) { + D_80181C8C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D210); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D2D4); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D478); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D4A8); + +extern s32 func_8013CB84(void); + void func_8017D4C8(void) { + func_8013CB84(); + } + + + +extern void (*D_80181C94[])(void); + +void func_8017D4E8(void *a0) { + D_80181C94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80181D60[])(void); + +void func_8017D524(void *a0) { + D_80181D60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D560); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D5DC); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D6C4); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D6CC); + +extern s32 func_8012C588(s32 a0, s32 a1); + void func_8017D7A0(u8 *a0) { + ((void (*)(s32, s32))func_8012C588)(0x2D6, (s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D7C4); + + +extern void (*D_80181D6C[])(void); + +void func_8017D808(void *a0) { + D_80181D6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D844); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017D904); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DA58); + +extern void func_8017D6CC(void); + void func_8017DB20(void) { + func_8017D6CC(); + } + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DB40); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DB9C); + +void func_8017DC1C(void) { +} + +s32 func_8017DC24(void) { + return 0x5C; + } + + + +extern void (*D_80181D74[])(void); + +void func_8017DC2C(void *a0) { + D_80181D74[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 a0, s32 a1); + extern s32 func_8012AD50(void *a0); + void func_8017DC68(s32 arg0) { + func_8012BF4C(arg0, 0); + ((void (*)(void *))func_8012AD50)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DC9C); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DDEC); + + +extern void (*D_80181DB0[])(void); + +void func_8017DED8(void *a0) { + D_80181DB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DF14); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017DFF8); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_80178D40", func_8017E064); + + diff --git a/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c b/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c index 244d069dd..76b96b422 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_801734BC.c @@ -3084,1995 +3084,3 @@ void func_80178D18(void) { D_801F16AC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EEC74; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801EEC74 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801EEC74; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801EEC74 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801EEC9C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801EEC9C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801EEC58; - -s32 func_8017A3B0(void) { - switch (D_801EEC58) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801EEC94; -extern short D_801EEC90; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801EEC94) { - case 0: - func_800D0CA0(1); - D_801EEC94 = D_801EEC94 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801EEC90; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801EEC94 = D_801EEC94 + 1; - if (D_801EEC94 < 0x1E) { - return 0; - } - D_801EEC94 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EECD4; - extern s16 D_801EECD6; - extern s16 D_801EECD8; - extern s16 D_801EECCC; - extern s16 D_801EECCE; - extern s16 D_801EECD0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EECD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EECD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EECD8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EECCC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EECCE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EECD0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801EEC5C; -extern u16 D_801EECDC; -extern u16 D_801EECDE; -extern u16 D_801EECE0; -extern s16 D_801F1638; - -void func_8017B1D8(void) { - func_8012A418(); - D_801F1638 = 0; - D_801EEC5C = 0; - D_801EECDC = D_80126B5E; - D_801EECDE = D_80126B62; - D_801EECE0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80193D6C[]; - extern s16 D_801EECD4; - extern s16 D_801EECCC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80193D6C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80193D6C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EECD4; - s16 *p78C = &D_801EECCC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801F1638 = 1; - D_801EEC5C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EEC7C; - extern SV4_8017B368 D_801EEC84; - extern s16 D_801EECD4; - extern s16 D_801EECCC; - extern u16 D_80193D6C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EEC7C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EEC84; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80193D6C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80193D6C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EECD4) = loc0; - (*(SV4_8017B368 *)&D_801EECCC) = loc1; - D_801F1638 = 1; - D_801EEC5C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80193D6C[]; - extern s16 D_801EECD4; - extern s16 D_801EECD6; - extern s16 D_801EECD8; - extern s16 D_801EECCC; - extern s16 D_801EECCE; - extern s16 D_801EECD0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80193D6C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80193D6C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EECD4; - s16 *p78C = &D_801EECCC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EECD6; - v798 = D_801EECD8; - v78C = *p78C; - v78E = D_801EECCE; - v790 = D_801EECD0; - __asm__ __volatile__(""); - D_801F1638 = 1; - D_801EEC5C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EEC5C; -extern s16 D_801EECD4; -extern s16 D_801EECD6; -extern s16 D_801EECD8; -extern s16 D_801EECCC; -extern s16 D_801EECCE; -extern s16 D_801EECD0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EEC5C = 0; - D_801EECD4 = (s16) D_80114F30; - D_801EECD6 = (s16) D_80114F34; - D_801EECD8 = (s16) D_80114F38; - D_801EECCC = (s16) D_80114F24; - D_801EECCE = (s16) D_80114F28; - D_801EECD0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EECEC; -extern s16 D_801EECEE; -extern s16 D_801EECF0; -extern s16 D_801EECF4; -extern s16 D_801EECF6; -extern s16 D_801EECF8; - -void func_8017B824(void) { - D_801EECEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EECEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EECF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EECF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EECF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EECF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EECEC; -extern s16 D_801EECEE; -extern s16 D_801EECF0; -extern s16 D_801EECF4; -extern s16 D_801EECF6; -extern s16 D_801EECF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EECEC; - D_80114F34 = D_801EECEE; - D_80114F38 = D_801EECF0; - D_80114F24 = D_801EECF4; - D_80114F28 = D_801EECF6; - D_80114F2C = D_801EECF8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EECD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801EECCC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EECD4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EECCC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801EECDC; -extern u16 D_801EECDE; -extern u16 D_801EECE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EEC5C; -extern short D_801EECE4; -extern short D_801EECE6; -extern short D_801EECE8; -extern s16 D_801EECD4; -extern s16 D_801EECD6; -extern s16 D_801EECD8; -extern s16 D_801EECCC; -extern s16 D_801EECCE; -extern s16 D_801EECD0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EECDC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EECDE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EECE0); - (*(s16 *)&D_801EECE4) = buf[0]; - (*(s16 *)&D_801EECE6) = buf[1]; - (*(s16 *)&D_801EECE8) = buf[2]; - D_801EECD4 = D_80114F30 + buf[0]; - D_801EEC5C = 0; - D_801EECD6 = D_80114F34 + buf[1]; - D_801EECD8 = D_80114F38 + buf[2]; - D_801EECCC = D_80114F24 + buf[0]; - D_801EECCE = D_80114F28 + buf[1]; - D_801EECD0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EEC7C; -extern SV4 D_801EEC84; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EEC84) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EEC7C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EEC84 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EEC84)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EEC7C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EEC84) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EECA4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EECA4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EEC5C; -extern s16 D_801F1638; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EEC5C = D_801EEC5C + 1; - if (D_801EEC5C >= 0x1F) { - D_801F1638 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EEC5C; -extern s16 D_801F1638; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EEC5C = D_801EEC5C + 1; - if (0x18 < D_801EEC5C) { - func_8012A4BC(); - D_801F1638 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EEC5C; -extern void (*D_801EECA0)(void); -extern short D_801EECE4; -extern short D_801EECE6; -extern short D_801EECE8; -extern s16 D_801F1638; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EEC5C = D_801EEC5C + 1; - if (D_801EEC5C >= 0x19) { - if (D_801EECA0 != 0) { - (*D_801EECA0)(); - } else { - D_80114F30 = D_80114F30 + D_801EECE4; - D_80114F34 = D_80114F34 + D_801EECE6; - D_80114F38 = D_80114F38 + D_801EECE8; - D_80114F24 = D_80114F24 + D_801EECE4; - D_80114F28 = D_80114F28 + D_801EECE6; - D_80114F2C = D_80114F2C + D_801EECE8; - func_8012A4BC(); - } - D_801F1638 = 0; - } -} - - - -extern void (*D_80193E0C[])(void); - -void func_8017BE60(void *a0) { - D_80193E0C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017BEBC); - - -extern void (*D_80193E44[])(void); - -void func_8017BEF8(void *a0) { - D_80193E44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C218); - - -extern void (*D_80193E58[])(void); - -void func_8017C524(void *a0) { - D_80193E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C770); - - -extern void (*D_80193E6C[])(void); - -void func_8017C7C4(void *a0) { - D_80193E6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CA80); - -extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017CAA4(s32 arg0, s32 arg1, s16 arg2) { - func_8017CAF8(arg0, arg1, arg2, 0); - } - - - - -extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017CACC(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017CAF8)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CAF8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CB80); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CBD4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CC2C); - - -extern void (*D_80193EC8[])(void); - -void func_8017CCD8(void *a0) { - D_80193EC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017CD14); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017D000); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017D494); - - -extern void (*D_80193ED0[])(void); - -void func_8017E374(void *a0) { - D_80193ED0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017E3B0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017E9A4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017E9FC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EA44); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EB10); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EBE8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EC38); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EC90); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017ECD8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017ED60); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EDC4); - - -extern void (*D_80193F84[])(void); - -void func_8017EE14(void *a0) { - D_80193F84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EE50); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017EF0C); - -void func_8017F2A8(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); - *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F2C4); - -extern void (*D_80193FBC[])(void); - -void func_8017F304(void *a0) { - D_80193FBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F340); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F614); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F690); - -extern void func_8017F700(s32 arg0, s32 arg1); -extern s32 D_80193F64; - -void func_8017F6D8(s32 arg0) { - func_8017F700(arg0, &D_80193F64); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F700); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F85C); - -void func_8017F8D0(s32 *a0) { - *(s32 *)((s32)a0 + 0x0) = 0x80404080; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F8E0); - - -extern void (*D_8019429C[])(void); - -void func_8017F96C(void *a0) { - D_8019429C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017F9A8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017FA08(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801942A4[])(void); - -void func_8017FA2C(void *a0) { - D_801942A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FA68); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017FAA8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017FB24(void) { - func_800D1EBC(); - } - - - -extern void (*D_801942B0[])(void); - -void func_8017FB44(void *a0) { - D_801942B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FB80); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FBBC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FBC4); - -extern void func_800D1EBC(void); - void func_8017FC2C(void) { - func_800D1EBC(); - } - - - -extern void (*D_801942C8[])(void); - -void func_8017FC4C(void *a0) { - D_801942C8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FC88); - -extern void func_80171928(void *a0); - s32 func_8017FCA8(s32 arg0) { - if (*(s16 *)(arg0 + 0xa) >= -0x7a2) { - ((void (*)(void))func_80171928)(); - } - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern char D_801942C0[]; - -void func_8017FCDC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801942C0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FD04); - - -extern void (*D_801942E4[])(void); - -void func_8017FD2C(void *a0) { - D_801942E4[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FD68); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FDF0); - -extern s32 D_801942DC; -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - -void func_8017FE44(void) { - ((void (*)(s32, s32))func_8016EE40)((s32)&D_801942DC, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FE6C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FF04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8017FF80); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180030); - - -extern void (*D_8019433C[])(void); - -void func_80180050(void *a0) { - D_8019433C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018008C); - -extern s32 D_801151D4; - void func_80180200(void) { - *(s32 *)(D_801151D4 + 0x14) = 0x2EE; - } - - - -extern s32 D_801151D4; - void func_80180214(void) { - *(s32 *)(D_801151D4 + 0x14) = 0x4B0; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180228); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180320); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801803D8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180570); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801805D8); - -extern void func_8018637C(s32 arg0, s32 arg1); - extern void func_8012AD44(s32 *a0, s16 a1); - extern s32 D_801DEC6C; - void func_801805F8(s32 param_1) { - func_8018637C(param_1, &D_801DEC6C); - ((void (*)(s32, s32))func_8012AD44)(param_1, 2); - } - - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80180634(void *arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - func_8002D4C8(0x7F2, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180660); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801806B8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180714); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180750); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180790); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801807CC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801808EC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180930); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180970); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801809D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801809E0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180A20); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180AB4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180B24); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180E80); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80180F30); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801811D0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181220); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181390); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801813FC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181868); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181948); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181B30); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181BA0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181EA0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80181F0C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018214C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801821E4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801823C0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182420); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182630); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801826E4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801827DC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182AF8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182B5C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182BBC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182D34); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80182DCC); - -s32 func_80183008(void) { - return 0; - } - - -s32 func_80183010(s32 *a0) { - return *(s16 *)((s32)a0 + 0x10A); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018301C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183058); - - -void func_8018314C(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 16; - *(s16 *)((s32)a0 + 0x84) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018315C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183258); - -extern void func_800D1724(s32 a0); -extern s32 D_80194270; - -void func_801832B4(void) { - ((void (*)(void *))func_800D1724)(&D_80194270); -} - - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_8019466C[]; - -extern s32 func_80183E20(s32 a0); - -void func_801832DC(int param_1) -{ - D_8019466C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80183E20)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018332C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801833D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183564); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801835B0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801836D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801837C4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183880); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183A28); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183BAC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183BD0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183BF0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183C74); - -void func_80183CF4(void *a0) { - *(s16 *)((s32)a0 + 0x108) = 0; - *(s16 *)((s32)a0 + 0xE2) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183D00); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183DF8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183E20); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183EA8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80183F10); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801840B8); - -extern void func_80175414(s32); - void func_801840D8(void) { - ((void (*)(void))func_80175414)(); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801840F8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184414); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018445C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184504); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801845A8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801846C0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184728); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184840); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018489C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184978); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184ABC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184B3C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184BAC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184CCC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184DB8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184F4C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80184FC4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185020); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185214); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801852BC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801853D0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185648); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801858DC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185960); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801859E4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185A18); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185A30); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185B04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185B5C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185C04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185C5C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185D04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185D9C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185DDC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185F1C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185FAC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80185FF4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186020); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186110); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018615C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801861D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801862A4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186300); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018637C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801863B4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801863D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186470); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186518); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801866C4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186710); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186798); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018681C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801868A0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186908); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186940); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186A20); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186A68); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186AB8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186B08); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186BD8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186BF8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186C1C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186C40); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186CD8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186D58); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186DCC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186E54); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186EBC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186EFC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80186F44); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187008); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187068); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187178); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801872D0); - -void func_801873D0(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801873D8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801873F8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187574); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801875D8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187618); - -void func_80187698(void *a0) { - *(s16 *)((s32)a0 + 0xFE) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801876A0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018778C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187940); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187A04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187B40); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80187D68); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188054); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188094); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801882F8); - - -extern void (*D_801947F4[])(void); - -void func_80188524(void *a0) { - D_801947F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188560); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801885C0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188650); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801886C4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188764); - - -extern void (*D_80194840[])(void); - -void func_80188794(void *a0) { - D_80194840[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801887D0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188818); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801888B8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188A30); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188AC4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188B78); - - -extern void (*D_801948D0[])(void); - -void func_80188D18(void *a0) { - D_801948D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80181868(void); - s32 func_80188D54(s32 arg0) { - return ((s32 (*)(s32))func_80181868)(*(s32 *)(arg0 + 0x64)); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188D78); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188E00); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80188E88); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189108); - - -extern void (*D_80194904[])(void); - -void func_8018914C(void *a0) { - D_80194904[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189188); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189270); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801893D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189410); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189478); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189578); - - -extern void (*D_801949B0[])(void); - -void func_801896BC(void *a0) { - D_801949B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_801896F8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189764); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018985C); - - -extern void (*D_801949B8[])(void); - -void func_80189A24(void *a0) { - D_801949B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189A60); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189A98); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189AEC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189D38); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189DFC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189EAC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189EFC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80189F6C); - - -extern void (*D_80194A60[])(void); - -void func_80189FDC(void *a0) { - D_80194A60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A018); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A074); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A0E0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A1B4); - - -extern void (*D_80194A88[])(void); - -void func_8018A3F0(void *a0) { - D_80194A88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A42C); - -void func_8018A47C(void *a0) { - *(short *)((char *)a0 + 0xfc) = 1; - } - - - -extern void (*D_80194A90[])(void); - -void func_8018A488(void *a0) { - D_80194A90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A4C4); - - -extern void (*D_80194B18[])(void); - -void func_8018A748(void *a0) { - D_80194B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A784); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A7E8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018A8EC); - - -extern void (*D_80194B24[])(void); - -void func_8018AA34(void *a0) { - D_80194B24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AA70); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AAE4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AC00); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AC50); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AD3C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018AEA8); - - -extern void (*D_80194B5C[])(void); - -void func_8018B024(void *a0) { - D_80194B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B060); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B0B0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B1B4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B2F8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B4E0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B5E4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B744); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B830); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B8C0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B948); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018B9D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BA44); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BA9C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BAC4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BB44); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BC08); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BD18); - - -extern void (*D_80194C0C[])(void); - -void func_8018BDCC(void *a0) { - D_80194C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BE08); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018BEEC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C024); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C07C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C14C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C260); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C310); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C378); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C440); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C4BC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C58C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C64C); - -extern void func_8018985C(void *a0, void *a1); - extern unsigned char D_80194950; - void func_8018C72C(void *a0) { - if (*(unsigned char *)((char *)a0 + 0x74)) { - func_8018985C(a0, &D_80194950); - } - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C764); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C838); - -void func_8018C8CC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C8D4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018C94C); - -void func_8018C9FC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CA04); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CA98); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CAF0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CB68); - -void func_8018CC1C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CC24); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CCB8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CD8C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CE0C); - -extern s32 func_8018CF10(void); - s32 func_8018CF10(void) { - return 0x5D; - } - - -void func_8018CF18(void *a0) { - *(s16 *)((s32)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018CF2C); - - -extern void (*D_80194CDC[])(void); - -void func_8018CFF4(void *a0) { - D_80194CDC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80194CE4[])(void); - -void func_8018D030(void *a0) { - D_80194CE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s32 a1); - extern s32 func_8012AD50(void *a0); - void func_8018D06C(s32 *a0) { - func_8012BF4C(a0, 0); - ((void (*)(void *))func_8012AD50)((void *)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D0A0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D1F0); - - -extern void (*D_80194D20[])(void); - -void func_8018D2DC(void *a0) { - D_80194D20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D318); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D3FC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D468); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D554); - -void func_8018D5D0(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D5D8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D66C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D6C4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D7C8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018D988); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DA18); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DA64); - -void func_8018DBE8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DBF0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DC9C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DD24); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DD84); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DE0C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DEB0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DEF4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DF6C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018DFDC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E010); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E034); - - -extern s16 D_801F1414; - extern s16 D_801F1416; - extern s16 D_801F1418; - extern s16 D_801F141A; - void func_8018E0D4(s32 arg0, s32 arg1, s32 arg2) { - D_801F1414 = *(u16 *)((s32)arg0 + 0x0); - D_801F1416 = *(u16 *)((s32)arg0 + 0x2); - D_801F1418 = arg1; - D_801F141A = arg2; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E104); - - -extern s16 D_801F141A; - void func_8018E17C(s32 arg0) { - *(s16 *)((s32)&D_801F141A + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E198); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E1F0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E2C4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E300); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E34C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E428); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E6EC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E710); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E738); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E7C0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E82C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E89C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E914); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018E960); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018EA7C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018EAB8); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018EBCC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018EEB0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018EFB0); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F02C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F4CC); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F658); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F68C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F734); - -extern void (*D_801EBE38[])(void); - -void func_8018F984(void *a0) { - D_801EBE38[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018F9C0); - -extern void func_8018FC00(); - void func_8018FBC0(void) { - func_8018FC00(); - } - - -extern void func_80146C3C(void); - void func_8018FBE0(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018FC00); - -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); - void func_8018FC58(void *a0) { - ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, a0, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018FC84); - - -extern void (*D_801EBE74[])(void); - -void func_8018FCC8(void *a0) { - D_801EBE74[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8018FD04(s32 arg0) { - *(s16 *)(arg0 + 0x100) = 0x7D; - *(s16 *)(arg0 + 0xFC) = 0; - *(s16 *)(arg0 + 0xFE) = 0; - *(s16 *)(arg0 + 0x102) = 0x533; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018FD38); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_8018FE20); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80190174); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_801734BC", func_80190264); - diff --git a/src/ov_SC04_011/ov_SC04_011_jr_80178D40.c b/src/ov_SC04_011/ov_SC04_011_jr_80178D40.c new file mode 100644 index 000000000..d5f8c9364 --- /dev/null +++ b/src/ov_SC04_011/ov_SC04_011_jr_80178D40.c @@ -0,0 +1,5441 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80193614[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EDFC8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80193608[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8019364C[]; +extern unsigned short D_80193654[]; +extern unsigned short D_8019365C[]; +extern unsigned char D_801EDFD0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EDFC8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80193664[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EE104; +extern M2C_UNK D_801EE108; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EE090; +extern void (*D_80193694[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EE10C[]; +extern u8 D_801EE114[]; +extern u8 D_801EE0C4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8019369C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801936B8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801936C0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80193728[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801936CC; +extern u8 D_801936D8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8019375C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80193764[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801937B8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801937EC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801937DC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80193808; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80193880[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80193888[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80193890[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80193898[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801938A0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801938A8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801938B4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801938C0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801938CC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801938DC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801938EC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801938F4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801938FC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80193904[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8019390C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80193914[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8019391C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80193924[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8019392C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80193934[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8019393C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80193944[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8019394C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80193954[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8019395C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80193964[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8019396C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80193974[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8019397C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80193984[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8019398C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80193994[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8019399C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801939E0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801939A4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80193A10[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80193A4C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80193AA4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80193AB4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80193ABC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80193C24[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80193C30[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801ED500; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801F1638; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EE848; +extern short D_801F16AC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801F16AC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801F16AC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EE848 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801F16AC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801F1608 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801F1608 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801F16AC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801F16AC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801EECA4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EE84C; + extern s32 D_801EEC60; + extern s16 D_801EEC64; + extern s16 D_801EEC68; + extern s16 D_801EEC6C; + extern s16 D_801EEC70; + extern s32 D_801EEC78; + extern s32 D_801EEC7C; + extern s32 D_801EEC8C; + extern s16 D_801EEC90; + extern s16 D_801EEC94; + extern s32 D_801EEC98; + extern s32 D_801EECA0; + extern s32 D_801EECA4[10]; + extern s32 D_801F1550; + extern s16 D_801F1608; + extern s32 D_801F1634; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801F1608; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801EEC60); + D_801EEC60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EEC6C, D_801EEC70 ? 0x48 : 0x40); + (*(s16*)&D_801F16AC) = 2; + break; + case 0: + func_80179B28(D_801EEC60); + D_801EEC60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801EEC64, D_801EEC68 ? 0x48 : 0x40); + (*(s16*)&D_801F16AC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801F1550 != 0) { + func_80179B28(D_801EEC60); + D_801EEC60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801EEC64, D_801EEC68 ? 0x48 : 0x40); + (*(s16*)&D_801F16AC) = 1; + } else { + (*(s16*)&D_801F16AC) = 3; + } + break; + case 0x32: + func_80179B28(D_801EEC60); + D_801EEC60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801EEC64, + D_801EEC68 ? 0x48 : 0x40); + (*(s16*)&D_801F16AC) = 1; + break; + case 2: + func_80179B28(D_801EEC60); + if (D_801EEC78 != 0) { + D_801EE848 = D_801EEC78; + D_801EEC78 = 0; + (*(s16*)&D_801F16AC) = 3; + return; + } + (*(s16*)&D_801F16AC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801F16AC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801F16AC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F16AC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801F16AC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F16AC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x1B: + D_801EEC98 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801F16AC) = 4; + D_801EE84C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801F16AC) = 5; + D_801EEC8C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801EEC8C = (s32)func_8017A3B0; + (*(s16*)&D_801F16AC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x24: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F16AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F16AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801F16AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F16AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F16AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F16AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F16AC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F16AC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801F16AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EEC7C); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801EEC7C); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EEC7C); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801EEC7C); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x4E: + D_801EECA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x2B: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801F16AC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801F1634 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x34: + (*(s16*)&D_801F16AC) = 3; + D_801EE848 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801EEC78 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801F16AC) = 3; + D_801EE848 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801F16AC) = 3; + D_801EE848 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EE848 = *(s32 *)(D_801EE848 + 4); + return; + case 0x37: + (*(s16*)&D_801F16AC) = 3; + D_801EEC64 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EEC68 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801F16AC) = 3; + D_801EEC6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801EEC70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801F16AC) = 3; + D_801EEC64 = w1; + D_801EEC68 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801F16AC) = 3; + D_801EEC6C = w2; + D_801EEC70 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x43: + D_801EEC8C = (s32)func_8017A3D8; + D_801EEC94 = 0; + (*(s16*)&D_801F16AC) = 5; + D_801EEC90 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F16AC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F16AC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801EECA4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801F16AC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801EECA4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801F16AC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801EECA4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801F16AC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801EECA4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801F16AC) = 3; + break; + default: + break; + } +Lend: + D_801EE848 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EEC74; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801EEC74 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801EEC74; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801EEC74 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801EEC9C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801EEC9C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801EEC58; + +s32 func_8017A3B0(void) { + switch (D_801EEC58) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801EEC94; +extern short D_801EEC90; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801EEC94) { + case 0: + func_800D0CA0(1); + D_801EEC94 = D_801EEC94 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801EEC90; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801EEC94 = D_801EEC94 + 1; + if (D_801EEC94 < 0x1E) { + return 0; + } + D_801EEC94 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801EECD4; + extern s16 D_801EECD6; + extern s16 D_801EECD8; + extern s16 D_801EECCC; + extern s16 D_801EECCE; + extern s16 D_801EECD0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EECD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EECD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EECD8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EECCC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EECCE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EECD0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801EEC5C; +extern u16 D_801EECDC; +extern u16 D_801EECDE; +extern u16 D_801EECE0; +extern s16 D_801F1638; + +void func_8017B1D8(void) { + func_8012A418(); + D_801F1638 = 0; + D_801EEC5C = 0; + D_801EECDC = D_80126B5E; + D_801EECDE = D_80126B62; + D_801EECE0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80193D6C[]; + extern s16 D_801EECD4; + extern s16 D_801EECCC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80193D6C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80193D6C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EECD4; + s16 *p78C = &D_801EECCC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801F1638 = 1; + D_801EEC5C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801EEC7C; + extern SV4_8017B368 D_801EEC84; + extern s16 D_801EECD4; + extern s16 D_801EECCC; + extern u16 D_80193D6C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801EEC7C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801EEC84; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80193D6C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80193D6C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801EECD4) = loc0; + (*(SV4_8017B368 *)&D_801EECCC) = loc1; + D_801F1638 = 1; + D_801EEC5C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80193D6C[]; + extern s16 D_801EECD4; + extern s16 D_801EECD6; + extern s16 D_801EECD8; + extern s16 D_801EECCC; + extern s16 D_801EECCE; + extern s16 D_801EECD0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80193D6C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80193D6C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801EECD4; + s16 *p78C = &D_801EECCC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801EECD6; + v798 = D_801EECD8; + v78C = *p78C; + v78E = D_801EECCE; + v790 = D_801EECD0; + __asm__ __volatile__(""); + D_801F1638 = 1; + D_801EEC5C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EEC5C; +extern s16 D_801EECD4; +extern s16 D_801EECD6; +extern s16 D_801EECD8; +extern s16 D_801EECCC; +extern s16 D_801EECCE; +extern s16 D_801EECD0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801EEC5C = 0; + D_801EECD4 = (s16) D_80114F30; + D_801EECD6 = (s16) D_80114F34; + D_801EECD8 = (s16) D_80114F38; + D_801EECCC = (s16) D_80114F24; + D_801EECCE = (s16) D_80114F28; + D_801EECD0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801EECEC; +extern s16 D_801EECEE; +extern s16 D_801EECF0; +extern s16 D_801EECF4; +extern s16 D_801EECF6; +extern s16 D_801EECF8; + +void func_8017B824(void) { + D_801EECEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801EECEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801EECF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801EECF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801EECF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801EECF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801EECEC; +extern s16 D_801EECEE; +extern s16 D_801EECF0; +extern s16 D_801EECF4; +extern s16 D_801EECF6; +extern s16 D_801EECF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801EECEC; + D_80114F34 = D_801EECEE; + D_80114F38 = D_801EECF0; + D_80114F24 = D_801EECF4; + D_80114F28 = D_801EECF6; + D_80114F2C = D_801EECF8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801EECD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801EECCC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801EECD4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801EECCC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801EECDC; +extern u16 D_801EECDE; +extern u16 D_801EECE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801EEC5C; +extern short D_801EECE4; +extern short D_801EECE6; +extern short D_801EECE8; +extern s16 D_801EECD4; +extern s16 D_801EECD6; +extern s16 D_801EECD8; +extern s16 D_801EECCC; +extern s16 D_801EECCE; +extern s16 D_801EECD0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EECDC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EECDE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EECE0); + (*(s16 *)&D_801EECE4) = buf[0]; + (*(s16 *)&D_801EECE6) = buf[1]; + (*(s16 *)&D_801EECE8) = buf[2]; + D_801EECD4 = D_80114F30 + buf[0]; + D_801EEC5C = 0; + D_801EECD6 = D_80114F34 + buf[1]; + D_801EECD8 = D_80114F38 + buf[2]; + D_801EECCC = D_80114F24 + buf[0]; + D_801EECCE = D_80114F28 + buf[1]; + D_801EECD0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801EEC7C; +extern SV4 D_801EEC84; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EEC84) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801EEC7C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801EEC84 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EEC84)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801EEC7C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801EEC84) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801EECA4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801EECA4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801EEC5C; +extern s16 D_801F1638; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801EEC5C = D_801EEC5C + 1; + if (D_801EEC5C >= 0x1F) { + D_801F1638 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801EEC5C; +extern s16 D_801F1638; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EEC5C = D_801EEC5C + 1; + if (0x18 < D_801EEC5C) { + func_8012A4BC(); + D_801F1638 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801EEC5C; +extern void (*D_801EECA0)(void); +extern short D_801EECE4; +extern short D_801EECE6; +extern short D_801EECE8; +extern s16 D_801F1638; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801EEC5C = D_801EEC5C + 1; + if (D_801EEC5C >= 0x19) { + if (D_801EECA0 != 0) { + (*D_801EECA0)(); + } else { + D_80114F30 = D_80114F30 + D_801EECE4; + D_80114F34 = D_80114F34 + D_801EECE6; + D_80114F38 = D_80114F38 + D_801EECE8; + D_80114F24 = D_80114F24 + D_801EECE4; + D_80114F28 = D_80114F28 + D_801EECE6; + D_80114F2C = D_80114F2C + D_801EECE8; + func_8012A4BC(); + } + D_801F1638 = 0; + } +} + + + +extern void (*D_80193E0C[])(void); + +void func_8017BE60(void *a0) { + D_80193E0C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017BEBC); + + +extern void (*D_80193E44[])(void); + +void func_8017BEF8(void *a0) { + D_80193E44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C218); + + +extern void (*D_80193E58[])(void); + +void func_8017C524(void *a0) { + D_80193E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C770); + + +extern void (*D_80193E6C[])(void); + +void func_8017C7C4(void *a0) { + D_80193E6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CA80); + +extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017CAA4(s32 arg0, s32 arg1, s16 arg2) { + func_8017CAF8(arg0, arg1, arg2, 0); + } + + + + +extern void func_8017CAF8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017CACC(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017CAF8)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CAF8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CB80); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CBD4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CC2C); + + +extern void (*D_80193EC8[])(void); + +void func_8017CCD8(void *a0) { + D_80193EC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017CD14); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017D000); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017D494); + + +extern void (*D_80193ED0[])(void); + +void func_8017E374(void *a0) { + D_80193ED0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017E3B0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017E9A4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017E9FC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EA44); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EB10); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EBE8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EC38); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EC90); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017ECD8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017ED60); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EDC4); + + +extern void (*D_80193F84[])(void); + +void func_8017EE14(void *a0) { + D_80193F84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EE50); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017EF0C); + +void func_8017F2A8(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x4); + *(s32 *)((s32)a0 + 0x14) = *(s32 *)((s32)a0 + 0x8); + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0xC); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F2C4); + +extern void (*D_80193FBC[])(void); + +void func_8017F304(void *a0) { + D_80193FBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F340); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F614); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F690); + +extern void func_8017F700(s32 arg0, s32 arg1); +extern s32 D_80193F64; + +void func_8017F6D8(s32 arg0) { + func_8017F700(arg0, &D_80193F64); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F700); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F85C); + +void func_8017F8D0(s32 *a0) { + *(s32 *)((s32)a0 + 0x0) = 0x80404080; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F8E0); + + +extern void (*D_8019429C[])(void); + +void func_8017F96C(void *a0) { + D_8019429C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017F9A8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017FA08(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801942A4[])(void); + +void func_8017FA2C(void *a0) { + D_801942A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FA68); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017FAA8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017FB24(void) { + func_800D1EBC(); + } + + + +extern void (*D_801942B0[])(void); + +void func_8017FB44(void *a0) { + D_801942B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FB80); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FBBC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FBC4); + +extern void func_800D1EBC(void); + void func_8017FC2C(void) { + func_800D1EBC(); + } + + + +extern void (*D_801942C8[])(void); + +void func_8017FC4C(void *a0) { + D_801942C8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FC88); + +extern void func_80171928(void *a0); + s32 func_8017FCA8(s32 arg0) { + if (*(s16 *)(arg0 + 0xa) >= -0x7a2) { + ((void (*)(void))func_80171928)(); + } + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern char D_801942C0[]; + +void func_8017FCDC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801942C0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FD04); + + +extern void (*D_801942E4[])(void); + +void func_8017FD2C(void *a0) { + D_801942E4[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FD68); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FDF0); + +extern s32 D_801942DC; +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + +void func_8017FE44(void) { + ((void (*)(s32, s32))func_8016EE40)((s32)&D_801942DC, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FE6C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FF04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8017FF80); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180030); + + +extern void (*D_8019433C[])(void); + +void func_80180050(void *a0) { + D_8019433C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018008C); + +extern s32 D_801151D4; + void func_80180200(void) { + *(s32 *)(D_801151D4 + 0x14) = 0x2EE; + } + + + +extern s32 D_801151D4; + void func_80180214(void) { + *(s32 *)(D_801151D4 + 0x14) = 0x4B0; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180228); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180320); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801803D8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180570); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801805D8); + +extern void func_8018637C(s32 arg0, s32 arg1); + extern void func_8012AD44(s32 *a0, s16 a1); + extern s32 D_801DEC6C; + void func_801805F8(s32 param_1) { + func_8018637C(param_1, &D_801DEC6C); + ((void (*)(s32, s32))func_8012AD44)(param_1, 2); + } + + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80180634(void *arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + func_8002D4C8(0x7F2, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180660); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801806B8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180714); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180750); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180790); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801807CC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801808EC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180930); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180970); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801809D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801809E0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180A20); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180AB4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180B24); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180E80); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80180F30); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801811D0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181220); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181390); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801813FC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181868); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181948); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181B30); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181BA0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181EA0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80181F0C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018214C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801821E4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801823C0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182420); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182630); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801826E4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801827DC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182AF8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182B5C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182BBC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182D34); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80182DCC); + +s32 func_80183008(void) { + return 0; + } + + +s32 func_80183010(s32 *a0) { + return *(s16 *)((s32)a0 + 0x10A); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018301C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183058); + + +void func_8018314C(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 16; + *(s16 *)((s32)a0 + 0x84) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018315C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183258); + +extern void func_800D1724(s32 a0); +extern s32 D_80194270; + +void func_801832B4(void) { + ((void (*)(void *))func_800D1724)(&D_80194270); +} + + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_8019466C[]; + +extern s32 func_80183E20(s32 a0); + +void func_801832DC(int param_1) +{ + D_8019466C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80183E20)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018332C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801833D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183564); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801835B0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801836D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801837C4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183880); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183A28); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183BAC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183BD0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183BF0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183C74); + +void func_80183CF4(void *a0) { + *(s16 *)((s32)a0 + 0x108) = 0; + *(s16 *)((s32)a0 + 0xE2) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183D00); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183DF8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183E20); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183EA8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80183F10); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801840B8); + +extern void func_80175414(s32); + void func_801840D8(void) { + ((void (*)(void))func_80175414)(); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801840F8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184414); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018445C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184504); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801845A8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801846C0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184728); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184840); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018489C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184978); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184ABC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184B3C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184BAC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184CCC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184DB8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184F4C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80184FC4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185020); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185214); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801852BC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801853D0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185648); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801858DC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185960); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801859E4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185A18); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185A30); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185B04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185B5C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185C04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185C5C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185D04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185D9C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185DDC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185F1C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185FAC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80185FF4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186020); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186110); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018615C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801861D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801862A4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186300); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018637C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801863B4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801863D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186470); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186518); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801866C4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186710); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186798); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018681C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801868A0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186908); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186940); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186A20); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186A68); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186AB8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186B08); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186BD8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186BF8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186C1C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186C40); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186CD8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186D58); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186DCC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186E54); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186EBC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186EFC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80186F44); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187008); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187068); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187178); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801872D0); + +void func_801873D0(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801873D8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801873F8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187574); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801875D8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187618); + +void func_80187698(void *a0) { + *(s16 *)((s32)a0 + 0xFE) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801876A0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018778C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187940); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187A04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187B40); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80187D68); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188054); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188094); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801882F8); + + +extern void (*D_801947F4[])(void); + +void func_80188524(void *a0) { + D_801947F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188560); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801885C0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188650); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801886C4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188764); + + +extern void (*D_80194840[])(void); + +void func_80188794(void *a0) { + D_80194840[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801887D0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188818); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801888B8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188A30); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188AC4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188B78); + + +extern void (*D_801948D0[])(void); + +void func_80188D18(void *a0) { + D_801948D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80181868(void); + s32 func_80188D54(s32 arg0) { + return ((s32 (*)(s32))func_80181868)(*(s32 *)(arg0 + 0x64)); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188D78); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188E00); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80188E88); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189108); + + +extern void (*D_80194904[])(void); + +void func_8018914C(void *a0) { + D_80194904[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189188); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189270); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801893D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189410); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189478); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189578); + + +extern void (*D_801949B0[])(void); + +void func_801896BC(void *a0) { + D_801949B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_801896F8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189764); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018985C); + + +extern void (*D_801949B8[])(void); + +void func_80189A24(void *a0) { + D_801949B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189A60); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189A98); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189AEC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189D38); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189DFC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189EAC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189EFC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80189F6C); + + +extern void (*D_80194A60[])(void); + +void func_80189FDC(void *a0) { + D_80194A60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A018); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A074); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A0E0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A1B4); + + +extern void (*D_80194A88[])(void); + +void func_8018A3F0(void *a0) { + D_80194A88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A42C); + +void func_8018A47C(void *a0) { + *(short *)((char *)a0 + 0xfc) = 1; + } + + + +extern void (*D_80194A90[])(void); + +void func_8018A488(void *a0) { + D_80194A90[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A4C4); + + +extern void (*D_80194B18[])(void); + +void func_8018A748(void *a0) { + D_80194B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A784); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A7E8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018A8EC); + + +extern void (*D_80194B24[])(void); + +void func_8018AA34(void *a0) { + D_80194B24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AA70); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AAE4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AC00); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AC50); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AD3C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018AEA8); + + +extern void (*D_80194B5C[])(void); + +void func_8018B024(void *a0) { + D_80194B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B060); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B0B0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B1B4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B2F8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B4E0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B5E4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B744); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B830); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B8C0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B948); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018B9D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BA44); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BA9C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BAC4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BB44); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BC08); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BD18); + + +extern void (*D_80194C0C[])(void); + +void func_8018BDCC(void *a0) { + D_80194C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BE08); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018BEEC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C024); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C07C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C14C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C260); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C310); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C378); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C440); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C4BC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C58C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C64C); + +extern void func_8018985C(void *a0, void *a1); + extern unsigned char D_80194950; + void func_8018C72C(void *a0) { + if (*(unsigned char *)((char *)a0 + 0x74)) { + func_8018985C(a0, &D_80194950); + } + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C764); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C838); + +void func_8018C8CC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C8D4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018C94C); + +void func_8018C9FC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CA04); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CA98); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CAF0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CB68); + +void func_8018CC1C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CC24); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CCB8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CD8C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CE0C); + +extern s32 func_8018CF10(void); + s32 func_8018CF10(void) { + return 0x5D; + } + + +void func_8018CF18(void *a0) { + *(s16 *)((s32)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018CF2C); + + +extern void (*D_80194CDC[])(void); + +void func_8018CFF4(void *a0) { + D_80194CDC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80194CE4[])(void); + +void func_8018D030(void *a0) { + D_80194CE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s32 a1); + extern s32 func_8012AD50(void *a0); + void func_8018D06C(s32 *a0) { + func_8012BF4C(a0, 0); + ((void (*)(void *))func_8012AD50)((void *)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D0A0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D1F0); + + +extern void (*D_80194D20[])(void); + +void func_8018D2DC(void *a0) { + D_80194D20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D318); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D3FC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D468); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D554); + +void func_8018D5D0(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D5D8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D66C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D6C4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D7C8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018D988); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DA18); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DA64); + +void func_8018DBE8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DBF0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DC9C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DD24); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DD84); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DE0C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DEB0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DEF4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DF6C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018DFDC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E010); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E034); + + +extern s16 D_801F1414; + extern s16 D_801F1416; + extern s16 D_801F1418; + extern s16 D_801F141A; + void func_8018E0D4(s32 arg0, s32 arg1, s32 arg2) { + D_801F1414 = *(u16 *)((s32)arg0 + 0x0); + D_801F1416 = *(u16 *)((s32)arg0 + 0x2); + D_801F1418 = arg1; + D_801F141A = arg2; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E104); + + +extern s16 D_801F141A; + void func_8018E17C(s32 arg0) { + *(s16 *)((s32)&D_801F141A + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E198); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E1F0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E2C4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E300); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E34C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E428); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E6EC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E710); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E738); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E7C0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E82C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E89C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E914); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018E960); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018EA7C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018EAB8); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018EBCC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018EEB0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018EFB0); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F02C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F4CC); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F658); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F68C); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F734); + +extern void (*D_801EBE38[])(void); + +void func_8018F984(void *a0) { + D_801EBE38[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018F9C0); + +extern void func_8018FC00(); + void func_8018FBC0(void) { + func_8018FC00(); + } + + +extern void func_80146C3C(void); + void func_8018FBE0(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018FC00); + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_8018FC58(void *a0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, a0, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018FC84); + + +extern void (*D_801EBE74[])(void); + +void func_8018FCC8(void *a0) { + D_801EBE74[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8018FD04(s32 arg0) { + *(s16 *)(arg0 + 0x100) = 0x7D; + *(s16 *)(arg0 + 0xFC) = 0; + *(s16 *)(arg0 + 0xFE) = 0; + *(s16 *)(arg0 + 0x102) = 0x533; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018FD38); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_8018FE20); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80190174); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_80178D40", func_80190264); + + diff --git a/src/ov_SC04_012/ov_SC04_012_jr_801734BC.c b/src/ov_SC04_012/ov_SC04_012_jr_801734BC.c index d8a0a37e6..cc7781271 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_801734BC.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_801734BC.c @@ -3084,936 +3084,3 @@ void func_80178D18(void) { D_8019323C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80191BE4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80191BE4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80191BE4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80191BE4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80191C0C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80191C0C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80191BC8; - -s32 func_8017A3B0(void) { - switch (D_80191BC8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80191C04; -extern short D_80191C00; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80191C04) { - case 0: - func_800D0CA0(1); - D_80191C04 = D_80191C04 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80191C00; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80191C04 = D_80191C04 + 1; - if (D_80191C04 < 0x1E) { - return 0; - } - D_80191C04 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80191C44; - extern s16 D_80191C46; - extern s16 D_80191C48; - extern s16 D_80191C3C; - extern s16 D_80191C3E; - extern s16 D_80191C40; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80191C44, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80191C46, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80191C48, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80191C3C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80191C3E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80191C40, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80191BCC; -extern u16 D_80191C4C; -extern u16 D_80191C4E; -extern u16 D_80191C50; -extern s16 D_801931C8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801931C8 = 0; - D_80191BCC = 0; - D_80191C4C = D_80126B5E; - D_80191C4E = D_80126B62; - D_80191C50 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181F40[]; - extern s16 D_80191C44; - extern s16 D_80191C3C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181F40[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181F40[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80191C44; - s16 *p78C = &D_80191C3C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801931C8 = 1; - D_80191BCC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80191BEC; - extern SV4_8017B368 D_80191BF4; - extern s16 D_80191C44; - extern s16 D_80191C3C; - extern u16 D_80181F40; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80191BEC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80191BF4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181F40)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181F40)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80191C44) = loc0; - (*(SV4_8017B368 *)&D_80191C3C) = loc1; - D_801931C8 = 1; - D_80191BCC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181F40[]; - extern s16 D_80191C44; - extern s16 D_80191C46; - extern s16 D_80191C48; - extern s16 D_80191C3C; - extern s16 D_80191C3E; - extern s16 D_80191C40; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181F40[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181F40[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80191C44; - s16 *p78C = &D_80191C3C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80191C46; - v798 = D_80191C48; - v78C = *p78C; - v78E = D_80191C3E; - v790 = D_80191C40; - __asm__ __volatile__(""); - D_801931C8 = 1; - D_80191BCC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80191BCC; -extern s16 D_80191C44; -extern s16 D_80191C46; -extern s16 D_80191C48; -extern s16 D_80191C3C; -extern s16 D_80191C3E; -extern s16 D_80191C40; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80191BCC = 0; - D_80191C44 = (s16) D_80114F30; - D_80191C46 = (s16) D_80114F34; - D_80191C48 = (s16) D_80114F38; - D_80191C3C = (s16) D_80114F24; - D_80191C3E = (s16) D_80114F28; - D_80191C40 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80191C5C; -extern s16 D_80191C5E; -extern s16 D_80191C60; -extern s16 D_80191C64; -extern s16 D_80191C66; -extern s16 D_80191C68; - -void func_8017B824(void) { - D_80191C5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80191C5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80191C60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80191C64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80191C66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80191C68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80191C5C; -extern s16 D_80191C5E; -extern s16 D_80191C60; -extern s16 D_80191C64; -extern s16 D_80191C66; -extern s16 D_80191C68; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80191C5C; - D_80114F34 = D_80191C5E; - D_80114F38 = D_80191C60; - D_80114F24 = D_80191C64; - D_80114F28 = D_80191C66; - D_80114F2C = D_80191C68; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80191C44), src[8..15] -> (*(S8_8017B8E8 *)&D_80191C3C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80191C44) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80191C3C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80191C4C; -extern u16 D_80191C4E; -extern u16 D_80191C50; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80191BCC; -extern short D_80191C54; -extern short D_80191C56; -extern short D_80191C58; -extern s16 D_80191C44; -extern s16 D_80191C46; -extern s16 D_80191C48; -extern s16 D_80191C3C; -extern s16 D_80191C3E; -extern s16 D_80191C40; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80191C4C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80191C4E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80191C50); - (*(s16 *)&D_80191C54) = buf[0]; - (*(s16 *)&D_80191C56) = buf[1]; - (*(s16 *)&D_80191C58) = buf[2]; - D_80191C44 = D_80114F30 + buf[0]; - D_80191BCC = 0; - D_80191C46 = D_80114F34 + buf[1]; - D_80191C48 = D_80114F38 + buf[2]; - D_80191C3C = D_80114F24 + buf[0]; - D_80191C3E = D_80114F28 + buf[1]; - D_80191C40 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80191BEC; -extern SV4 D_80191BF4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80191BF4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80191BEC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80191BF4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80191BF4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80191BEC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80191BF4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80191C14[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80191C14; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80191BCC; -extern s16 D_801931C8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80191BCC = D_80191BCC + 1; - if (D_80191BCC >= 0x1F) { - D_801931C8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80191BCC; -extern s16 D_801931C8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80191BCC = D_80191BCC + 1; - if (0x18 < D_80191BCC) { - func_8012A4BC(); - D_801931C8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80191BCC; -extern void (*D_80191C10)(void); -extern short D_80191C54; -extern short D_80191C56; -extern short D_80191C58; -extern s16 D_801931C8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80191BCC = D_80191BCC + 1; - if (D_80191BCC >= 0x19) { - if (D_80191C10 != 0) { - (*D_80191C10)(); - } else { - D_80114F30 = D_80114F30 + D_80191C54; - D_80114F34 = D_80114F34 + D_80191C56; - D_80114F38 = D_80114F38 + D_80191C58; - D_80114F24 = D_80114F24 + D_80191C54; - D_80114F28 = D_80114F28 + D_80191C56; - D_80114F2C = D_80114F2C + D_80191C58; - func_8012A4BC(); - } - D_801931C8 = 0; - } -} - - - -extern void (*D_80181FE0[])(void); - -void func_8017BE60(void *a0) { - D_80181FE0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017BEBC); - - -extern void (*D_80182064[])(void); - -void func_8017CD9C(void *a0) { - D_80182064[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE44(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018206C[])(void); - -void func_8017CE68(void *a0) { - D_8018206C[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017CEA4(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEC0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017CF3C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017CF5C); - - -extern void (*D_80182084[])(void); - -void func_8017CFEC(void *a0) { - D_80182084[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D028); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D06C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D094); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D0BC); - - -extern void (*D_801820A4[])(void); - -void func_8017D154(void *a0) { - D_801820A4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D190); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D248); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D3E0); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D4CC); - - -extern void (*D_80182280[])(void); - -void func_8017D698(void *a0) { - D_80182280[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 D_801930E4; - s32 func_8017D6D4(void) { - return 0x2 - D_801930E4; - } - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D6E8); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D720); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D770); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D798); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D7C0); - -void func_8017D7E8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D7F0); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D894); - -extern s32 func_8013CB84(void); - void func_8017D910(void) { - func_8013CB84(); - } - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D930); - - -extern void (*D_801822B0[])(void); - -void func_8017D960(void *a0) { - D_801822B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017D99C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017DAE4); - - -extern void (*D_801822B8[])(void); - -void func_8017DBB0(void *a0) { - D_801822B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017DBEC); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017DD84); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017DE74); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017DED4); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E060); - - -extern void (*D_801822C4[])(void); - -void func_8017E090(void *a0) { - D_801822C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s16 a1); - extern s32 func_8012AD50(void *a0); - void func_8017E0CC(s32 *a0) { - func_8012BF4C(a0, 0); - ((void (*)(void *))func_8012AD50)((void *)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E100); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E250); - - -extern void (*D_80182300[])(void); - -void func_8017E33C(void *a0) { - D_80182300[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E378); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E45C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_801734BC", func_8017E4C8); - diff --git a/src/ov_SC04_012/ov_SC04_012_jr_80178D40.c b/src/ov_SC04_012/ov_SC04_012_jr_80178D40.c new file mode 100644 index 000000000..fec485069 --- /dev/null +++ b/src/ov_SC04_012/ov_SC04_012_jr_80178D40.c @@ -0,0 +1,4382 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801817E8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80190F38; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801817DC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181820[]; +extern unsigned short D_80181828[]; +extern unsigned short D_80181830[]; +extern unsigned char D_80190F40[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80190F38; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181838[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80191074; +extern M2C_UNK D_80191078; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80191000; +extern void (*D_80181868[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019107C[]; +extern u8 D_80191084[]; +extern u8 D_80191034[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181870[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018188C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181894[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801818FC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801818A0; +extern u8 D_801818AC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181930[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181938[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018198C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801819C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801819B0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801819DC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181A54[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181A5C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181A64[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181A6C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181A74[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181A7C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181A88[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181A94[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181AA0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181AB0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181AC0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181AC8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181AD0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181AD8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181AE0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181AE8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181AF0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181AF8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181B00[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181B08[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181B10[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181B18[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181B20[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181B28[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181B30[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181B38[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181B40[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181B48[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181B50[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181B58[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181B60[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181B68[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181B70[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181BB4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181B78; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181BE4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80181C20[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181C78[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80181C88[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80181C90[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181DF8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80181E04[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80190644; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801931C8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801917B8; +extern short D_8019323C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019323C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019323C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801917B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019323C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80193198 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80193198 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019323C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019323C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80191C14[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801917BC; + extern s32 D_80191BD0; + extern s16 D_80191BD4; + extern s16 D_80191BD8; + extern s16 D_80191BDC; + extern s16 D_80191BE0; + extern s32 D_80191BE8; + extern s32 D_80191BEC; + extern s32 D_80191BFC; + extern s16 D_80191C00; + extern s16 D_80191C04; + extern s32 D_80191C08; + extern s32 D_80191C10; + extern s32 D_80191C14[10]; + extern s32 D_801930E0; + extern s16 D_80193198; + extern s32 D_801931C4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80193198; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80191BD0); + D_80191BD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80191BDC, D_80191BE0 ? 0x48 : 0x40); + (*(s16*)&D_8019323C) = 2; + break; + case 0: + func_80179B28(D_80191BD0); + D_80191BD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80191BD4, D_80191BD8 ? 0x48 : 0x40); + (*(s16*)&D_8019323C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801930E0 != 0) { + func_80179B28(D_80191BD0); + D_80191BD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_80191BD4, D_80191BD8 ? 0x48 : 0x40); + (*(s16*)&D_8019323C) = 1; + } else { + (*(s16*)&D_8019323C) = 3; + } + break; + case 0x32: + func_80179B28(D_80191BD0); + D_80191BD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_80191BD4, + D_80191BD8 ? 0x48 : 0x40); + (*(s16*)&D_8019323C) = 1; + break; + case 2: + func_80179B28(D_80191BD0); + if (D_80191BE8 != 0) { + D_801917B8 = D_80191BE8; + D_80191BE8 = 0; + (*(s16*)&D_8019323C) = 3; + return; + } + (*(s16*)&D_8019323C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019323C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019323C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019323C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019323C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019323C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019323C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019323C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019323C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019323C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019323C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019323C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x1B: + D_80191C08 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019323C) = 4; + D_801917BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019323C) = 5; + D_80191BFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80191BFC = (s32)func_8017A3B0; + (*(s16*)&D_8019323C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x24: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019323C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019323C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019323C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019323C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019323C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019323C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019323C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019323C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019323C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80191BEC); + (*(s16*)&D_8019323C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80191BEC); + (*(s16*)&D_8019323C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80191BEC); + (*(s16*)&D_8019323C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80191BEC); + (*(s16*)&D_8019323C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + break; + case 0x4E: + D_80191C10 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019323C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801931C4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019323C) = 3; + break; + case 0x34: + (*(s16*)&D_8019323C) = 3; + D_801917B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80191BE8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019323C) = 3; + D_801917B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019323C) = 3; + D_801917B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801917B8 = *(s32 *)(D_801917B8 + 4); + return; + case 0x37: + (*(s16*)&D_8019323C) = 3; + D_80191BD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80191BD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019323C) = 3; + D_80191BDC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80191BE0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019323C) = 3; + D_80191BD4 = w1; + D_80191BD8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019323C) = 3; + D_80191BDC = w2; + D_80191BE0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + case 0x43: + D_80191BFC = (s32)func_8017A3D8; + D_80191C04 = 0; + (*(s16*)&D_8019323C) = 5; + D_80191C00 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019323C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019323C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019323C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80191C14; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019323C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80191C14; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019323C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80191C14[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019323C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80191C14; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019323C) = 3; + break; + default: + break; + } +Lend: + D_801917B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80191BE4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80191BE4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80191BE4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80191BE4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80191C0C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80191C0C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80191BC8; + +s32 func_8017A3B0(void) { + switch (D_80191BC8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80191C04; +extern short D_80191C00; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80191C04) { + case 0: + func_800D0CA0(1); + D_80191C04 = D_80191C04 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80191C00; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80191C04 = D_80191C04 + 1; + if (D_80191C04 < 0x1E) { + return 0; + } + D_80191C04 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80191C44; + extern s16 D_80191C46; + extern s16 D_80191C48; + extern s16 D_80191C3C; + extern s16 D_80191C3E; + extern s16 D_80191C40; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80191C44, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80191C46, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80191C48, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80191C3C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80191C3E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80191C40, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80191BCC; +extern u16 D_80191C4C; +extern u16 D_80191C4E; +extern u16 D_80191C50; +extern s16 D_801931C8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801931C8 = 0; + D_80191BCC = 0; + D_80191C4C = D_80126B5E; + D_80191C4E = D_80126B62; + D_80191C50 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181F40[]; + extern s16 D_80191C44; + extern s16 D_80191C3C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181F40[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181F40[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80191C44; + s16 *p78C = &D_80191C3C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801931C8 = 1; + D_80191BCC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80191BEC; + extern SV4_8017B368 D_80191BF4; + extern s16 D_80191C44; + extern s16 D_80191C3C; + extern u16 D_80181F40; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80191BEC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80191BF4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181F40)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181F40)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80191C44) = loc0; + (*(SV4_8017B368 *)&D_80191C3C) = loc1; + D_801931C8 = 1; + D_80191BCC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181F40[]; + extern s16 D_80191C44; + extern s16 D_80191C46; + extern s16 D_80191C48; + extern s16 D_80191C3C; + extern s16 D_80191C3E; + extern s16 D_80191C40; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181F40[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181F40[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80191C44; + s16 *p78C = &D_80191C3C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80191C46; + v798 = D_80191C48; + v78C = *p78C; + v78E = D_80191C3E; + v790 = D_80191C40; + __asm__ __volatile__(""); + D_801931C8 = 1; + D_80191BCC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80191BCC; +extern s16 D_80191C44; +extern s16 D_80191C46; +extern s16 D_80191C48; +extern s16 D_80191C3C; +extern s16 D_80191C3E; +extern s16 D_80191C40; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80191BCC = 0; + D_80191C44 = (s16) D_80114F30; + D_80191C46 = (s16) D_80114F34; + D_80191C48 = (s16) D_80114F38; + D_80191C3C = (s16) D_80114F24; + D_80191C3E = (s16) D_80114F28; + D_80191C40 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80191C5C; +extern s16 D_80191C5E; +extern s16 D_80191C60; +extern s16 D_80191C64; +extern s16 D_80191C66; +extern s16 D_80191C68; + +void func_8017B824(void) { + D_80191C5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80191C5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80191C60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80191C64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80191C66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80191C68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80191C5C; +extern s16 D_80191C5E; +extern s16 D_80191C60; +extern s16 D_80191C64; +extern s16 D_80191C66; +extern s16 D_80191C68; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80191C5C; + D_80114F34 = D_80191C5E; + D_80114F38 = D_80191C60; + D_80114F24 = D_80191C64; + D_80114F28 = D_80191C66; + D_80114F2C = D_80191C68; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80191C44), src[8..15] -> (*(S8_8017B8E8 *)&D_80191C3C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80191C44) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80191C3C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80191C4C; +extern u16 D_80191C4E; +extern u16 D_80191C50; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80191BCC; +extern short D_80191C54; +extern short D_80191C56; +extern short D_80191C58; +extern s16 D_80191C44; +extern s16 D_80191C46; +extern s16 D_80191C48; +extern s16 D_80191C3C; +extern s16 D_80191C3E; +extern s16 D_80191C40; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80191C4C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80191C4E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80191C50); + (*(s16 *)&D_80191C54) = buf[0]; + (*(s16 *)&D_80191C56) = buf[1]; + (*(s16 *)&D_80191C58) = buf[2]; + D_80191C44 = D_80114F30 + buf[0]; + D_80191BCC = 0; + D_80191C46 = D_80114F34 + buf[1]; + D_80191C48 = D_80114F38 + buf[2]; + D_80191C3C = D_80114F24 + buf[0]; + D_80191C3E = D_80114F28 + buf[1]; + D_80191C40 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80191BEC; +extern SV4 D_80191BF4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80191BF4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80191BEC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80191BF4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80191BF4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80191BEC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80191BF4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80191C14[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80191C14; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80191BCC; +extern s16 D_801931C8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80191BCC = D_80191BCC + 1; + if (D_80191BCC >= 0x1F) { + D_801931C8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80191BCC; +extern s16 D_801931C8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80191BCC = D_80191BCC + 1; + if (0x18 < D_80191BCC) { + func_8012A4BC(); + D_801931C8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80191BCC; +extern void (*D_80191C10)(void); +extern short D_80191C54; +extern short D_80191C56; +extern short D_80191C58; +extern s16 D_801931C8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80191BCC = D_80191BCC + 1; + if (D_80191BCC >= 0x19) { + if (D_80191C10 != 0) { + (*D_80191C10)(); + } else { + D_80114F30 = D_80114F30 + D_80191C54; + D_80114F34 = D_80114F34 + D_80191C56; + D_80114F38 = D_80114F38 + D_80191C58; + D_80114F24 = D_80114F24 + D_80191C54; + D_80114F28 = D_80114F28 + D_80191C56; + D_80114F2C = D_80114F2C + D_80191C58; + func_8012A4BC(); + } + D_801931C8 = 0; + } +} + + + +extern void (*D_80181FE0[])(void); + +void func_8017BE60(void *a0) { + D_80181FE0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017BEBC); + + +extern void (*D_80182064[])(void); + +void func_8017CD9C(void *a0) { + D_80182064[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE44(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018206C[])(void); + +void func_8017CE68(void *a0) { + D_8018206C[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017CEA4(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEC0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017CF3C); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017CF5C); + + +extern void (*D_80182084[])(void); + +void func_8017CFEC(void *a0) { + D_80182084[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D028); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D06C); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D094); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D0BC); + + +extern void (*D_801820A4[])(void); + +void func_8017D154(void *a0) { + D_801820A4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D190); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D248); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D3E0); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D4CC); + + +extern void (*D_80182280[])(void); + +void func_8017D698(void *a0) { + D_80182280[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +extern s32 D_801930E4; + s32 func_8017D6D4(void) { + return 0x2 - D_801930E4; + } + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D6E8); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D720); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D770); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D798); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D7C0); + +void func_8017D7E8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D7F0); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D894); + +extern s32 func_8013CB84(void); + void func_8017D910(void) { + func_8013CB84(); + } + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D930); + + +extern void (*D_801822B0[])(void); + +void func_8017D960(void *a0) { + D_801822B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017D99C); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017DAE4); + + +extern void (*D_801822B8[])(void); + +void func_8017DBB0(void *a0) { + D_801822B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017DBEC); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017DD84); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017DE74); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017DED4); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E060); + + +extern void (*D_801822C4[])(void); + +void func_8017E090(void *a0) { + D_801822C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s16 a1); + extern s32 func_8012AD50(void *a0); + void func_8017E0CC(s32 *a0) { + func_8012BF4C(a0, 0); + ((void (*)(void *))func_8012AD50)((void *)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E100); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E250); + + +extern void (*D_80182300[])(void); + +void func_8017E33C(void *a0) { + D_80182300[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E378); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E45C); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_80178D40", func_8017E4C8); + + diff --git a/src/ov_SC04_015/ov_SC04_015_jr_801734BC.c b/src/ov_SC04_015/ov_SC04_015_jr_801734BC.c index 14ce23a9e..f8ebcc6da 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_801734BC.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_801734BC.c @@ -3084,1800 +3084,3 @@ void func_80178D18(void) { D_801C93DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C88CC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C88CC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C88CC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C88CC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C88F4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C88F4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C88B0; - -s32 func_8017A3B0(void) { - switch (D_801C88B0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C88EC; -extern short D_801C88E8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C88EC) { - case 0: - func_800D0CA0(1); - D_801C88EC = D_801C88EC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C88E8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C88EC = D_801C88EC + 1; - if (D_801C88EC < 0x1E) { - return 0; - } - D_801C88EC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C892C; - extern s16 D_801C892E; - extern s16 D_801C8930; - extern s16 D_801C8924; - extern s16 D_801C8926; - extern s16 D_801C8928; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C892C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C892E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C8930, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C8924, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C8926, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C8928, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C88B4; -extern u16 D_801C8934; -extern u16 D_801C8936; -extern u16 D_801C8938; -extern s16 D_801C9368; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C9368 = 0; - D_801C88B4 = 0; - D_801C8934 = D_80126B5E; - D_801C8936 = D_80126B62; - D_801C8938 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187E78[]; - extern s16 D_801C892C; - extern s16 D_801C8924; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187E78[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187E78[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C892C; - s16 *p78C = &D_801C8924; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C9368 = 1; - D_801C88B4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C88D4; - extern SV4_8017B368 D_801C88DC; - extern s16 D_801C892C; - extern s16 D_801C8924; - extern u16 D_80187E78; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C88D4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C88DC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80187E78)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80187E78)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C892C) = loc0; - (*(SV4_8017B368 *)&D_801C8924) = loc1; - D_801C9368 = 1; - D_801C88B4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80187E78[]; - extern s16 D_801C892C; - extern s16 D_801C892E; - extern s16 D_801C8930; - extern s16 D_801C8924; - extern s16 D_801C8926; - extern s16 D_801C8928; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80187E78[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80187E78[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C892C; - s16 *p78C = &D_801C8924; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C892E; - v798 = D_801C8930; - v78C = *p78C; - v78E = D_801C8926; - v790 = D_801C8928; - __asm__ __volatile__(""); - D_801C9368 = 1; - D_801C88B4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C88B4; -extern s16 D_801C892C; -extern s16 D_801C892E; -extern s16 D_801C8930; -extern s16 D_801C8924; -extern s16 D_801C8926; -extern s16 D_801C8928; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C88B4 = 0; - D_801C892C = (s16) D_80114F30; - D_801C892E = (s16) D_80114F34; - D_801C8930 = (s16) D_80114F38; - D_801C8924 = (s16) D_80114F24; - D_801C8926 = (s16) D_80114F28; - D_801C8928 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C8944; -extern s16 D_801C8946; -extern s16 D_801C8948; -extern s16 D_801C894C; -extern s16 D_801C894E; -extern s16 D_801C8950; - -void func_8017B824(void) { - D_801C8944 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C8946 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C8948 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C894C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C894E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C8950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C8944; -extern s16 D_801C8946; -extern s16 D_801C8948; -extern s16 D_801C894C; -extern s16 D_801C894E; -extern s16 D_801C8950; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C8944; - D_80114F34 = D_801C8946; - D_80114F38 = D_801C8948; - D_80114F24 = D_801C894C; - D_80114F28 = D_801C894E; - D_80114F2C = D_801C8950; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C892C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C8924) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C892C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C8924) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C8934; -extern u16 D_801C8936; -extern u16 D_801C8938; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C88B4; -extern short D_801C893C; -extern short D_801C893E; -extern short D_801C8940; -extern s16 D_801C892C; -extern s16 D_801C892E; -extern s16 D_801C8930; -extern s16 D_801C8924; -extern s16 D_801C8926; -extern s16 D_801C8928; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C8934); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C8936); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C8938); - (*(s16 *)&D_801C893C) = buf[0]; - (*(s16 *)&D_801C893E) = buf[1]; - (*(s16 *)&D_801C8940) = buf[2]; - D_801C892C = D_80114F30 + buf[0]; - D_801C88B4 = 0; - D_801C892E = D_80114F34 + buf[1]; - D_801C8930 = D_80114F38 + buf[2]; - D_801C8924 = D_80114F24 + buf[0]; - D_801C8926 = D_80114F28 + buf[1]; - D_801C8928 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C88D4; -extern SV4 D_801C88DC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C88DC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C88D4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C88DC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C88DC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C88D4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C88DC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C88FC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C88FC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C88B4; -extern s16 D_801C9368; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C88B4 = D_801C88B4 + 1; - if (D_801C88B4 >= 0x1F) { - D_801C9368 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C88B4; -extern s16 D_801C9368; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C88B4 = D_801C88B4 + 1; - if (0x18 < D_801C88B4) { - func_8012A4BC(); - D_801C9368 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C88B4; -extern void (*D_801C88F8)(void); -extern short D_801C893C; -extern short D_801C893E; -extern short D_801C8940; -extern s16 D_801C9368; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C88B4 = D_801C88B4 + 1; - if (D_801C88B4 >= 0x19) { - if (D_801C88F8 != 0) { - (*D_801C88F8)(); - } else { - D_80114F30 = D_80114F30 + D_801C893C; - D_80114F34 = D_80114F34 + D_801C893E; - D_80114F38 = D_80114F38 + D_801C8940; - D_80114F24 = D_80114F24 + D_801C893C; - D_80114F28 = D_80114F28 + D_801C893E; - D_80114F2C = D_80114F2C + D_801C8940; - func_8012A4BC(); - } - D_801C9368 = 0; - } -} - - - -extern void (*D_80187F18[])(void); - -void func_8017BE60(void *a0) { - D_80187F18[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80187FB8[])(void); - -void func_8017BEBC(void *a0) { - D_80187FB8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80187FC0[])(void); - -void func_8017BEF8(void *a0) { - D_80187FC0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80187FC8[])(void); - -void func_8017BF34(void *a0) { - D_80187FC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017BF70); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C0B4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C20C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C2D0); - - -extern void (*D_80187FE8[])(void); - -void func_8017C358(void *a0) { - D_80187FE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C394); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C558); - - -extern void (*D_80187FF0[])(void); - -void func_8017C5EC(void *a0) { - D_80187FF0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80187FDC; - -void func_8017C628(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80187FDC, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C6CC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017C730); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D610); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D674(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D698); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D6FC); - -extern void func_800D1EBC(void); - void func_8017D7AC(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D7CC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D83C); - -s32 func_8017D878(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D880); - - -extern void (*D_80187FF8[])(void); - -void func_8017D8C8(void *a0) { - D_80187FF8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80188000[])(void); - -void func_8017D904(void *a0) { - D_80188000[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80188018[])(void); - -void func_8017D940(void *a0) { - D_80188018[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_801882F0[])(void); - -void func_8017D97C(void *a0) { - D_801882F0[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D9B8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D9CC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017D9FC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DA24); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DA5C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DA90); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DAB8); - - -extern void (*D_80188320[])(void); - -void func_8017DB70(void *a0) { - D_80188320[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DBAC); - -void func_8017DBE0(u8 *a0) { - *(s8 *)(a0 + 0xA0) = 0x6; - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DBEC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DD2C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DF20); - - -extern void (*D_80188584[])(void); - -void func_8017DF90(void *a0) { - D_80188584[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017DFCC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E004); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E014); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E038); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E0CC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E16C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E230); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E2CC); - - -extern void (*D_801885C0[])(void); - -void func_8017E4E4(void *a0) { - D_801885C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E520); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E830); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017E9B0); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017EA2C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017EB14); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017EB78); - -extern void func_80016714(void *a0, s32 a1); -extern s32 D_801C8C64; - -void func_8017ED00(void) { - func_80016714(&D_801C8C64, 0x380); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017ED28); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017EE80); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F018); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F0EC); - - -extern void (*D_801888F4[])(void); - -void func_8017F408(void *a0) { - D_801888F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F444); - -extern s16 D_801C8B70; - -s32 func_8017F53C(void) { - return D_801C8B70; -} - - - -extern void (*D_80188948[])(void); - -void func_8017F54C(void *a0) { - D_80188948[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F588); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F600); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F708); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F748); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F7E4); - - -extern void (*D_801889E0[])(void); - -void func_8017F90C(void *a0) { - D_801889E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F948); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017F990(void) { - func_80029124(0x13A, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017F9B4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FA78); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FB40); - - -extern void (*D_80188A78[])(void); - -void func_8017FBD4(void *a0) { - D_80188A78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FC10); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017FC58(void) { - func_80029124(0x139, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FC7C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FD40); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FE08); - - -extern void (*D_80188B10[])(void); - -void func_8017FE9C(void *a0) { - D_80188B10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FED8); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017FF20(void) { - func_80029124(0x13B, 1); - func_80029124(0x116, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8017FF50); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180014); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801800DC); - - -extern void (*D_80188B74[])(void); - -void func_80180170(void *a0) { - D_80188B74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801801AC); - -DEFINE_func_80180210() /* dedup: shared engine-core @0x80180210 (src/shared) */ - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_80188B5C; - -void func_80180218(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80188B5C); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180250); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180290); - -extern s32 func_8018030C(void); - void func_801802EC(void) { - func_8018030C(); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018030C); - - -extern void (*D_80188C10[])(void); - -void func_80180398(void *a0) { - D_80188C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801803D4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180440); - -extern s32 func_80180514(void); - -s32 func_80180514(void) { - return 0x5B; -} - - - -extern void (*D_80189330[])(void); - -void func_8018051C(void *a0) { - D_80189330[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_80189320; - -void func_80180558(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80189320 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_801805D4(void) { -} - - -extern void (*D_80189368[])(void); - -void func_801805DC(void *a0) { - D_80189368[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180618); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801806A8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801808E4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180934); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801809F0); - -void func_80180B08(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -void func_80180B18(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180B28); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180BC4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180BF0); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180C1C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180C48); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180CCC); - - -extern s32 func_80180CCC(s32 arg); -extern void func_80180E30(void *a0); - -void func_80180DFC(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_80180CCC((s32)a0); - func_80180E30(a0); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180E30); - - -extern short D_800BA2BA; - s32 func_80180E70(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801B2954[])(void); - -void func_80180E98(void *a0) { - D_801B2954[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80180ED4(void) { -} - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180EDC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180F18); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180F3C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180F94); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80180FFC); - -void func_8018101C(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181024); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018106C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801810C8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018113C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801811B0); - -extern s32 func_80029504(void); -extern void func_80029514(s32 arg0); - -void func_8018120C(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181240); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181310); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801814D8); - - -extern void (*D_801B2974[])(void); - -void func_80181520(void *a0) { - D_801B2974[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018155C(void) { -} - -void func_80181564(void) { -} - -void func_8018156C(void) { -} - -void func_80181574(void) { -} - -void func_8018157C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181584); - -void func_801815C8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801815D0); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181658); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181830); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801819D0); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181A4C); - -extern s32 func_80182258(void); - void func_80181B18(void) { - func_80182258(); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181B38); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181C08); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181C70); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181CE4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181D44); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181DC4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181E1C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181E7C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181EC4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181F14); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181F4C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80181FD8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018207C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801820DC); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182258); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018228C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801822C0); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182324); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182398); - - -extern void (*D_801B2C70[])(void); - -void func_801823F0(void *a0) { - D_801B2C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018242C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801824A8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801825C8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182614); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182720); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018277C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801827BC); - - -extern void func_8012B2CC(s32 arg); - void func_80182820(void *arg0) { - s32 *p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } - - -extern void func_8012B2CC(s32 a0); - void func_80182850(void * arg0) { - s32 temp_v1; - temp_v1 = *(s32 *)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 0x4; - *(s16 *)(temp_v1 + 0x12) = 0x600; - func_8012B2CC((s32)arg0); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182880); - - -extern void (*D_801C402C[])(void); - -void func_801829F0(void *a0) { - D_801C402C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182A2C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182AA8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182B18); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80182B30(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182B54); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182C88); - -void func_80182CF0(void) { -} - -void func_80182CF8(void) { -} - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182D00); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182DB4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182E1C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182E70); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80182F2C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183314); - - -extern void (*D_801C4480[])(void); - -void func_8018338C(void *a0) { - D_801C4480[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801833C8); - - -extern void (*D_801C44AC[])(void); - -void func_801834E4(void *a0) { - D_801C44AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801C44B4[])(void); - -void func_80183520(void *a0) { - D_801C44B4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801C44C4[])(void); - -void func_8018355C(void *a0) { - D_801C44C4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801C44D4[])(void); - -void func_80183598(void *a0) { - D_801C44D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801835D4(void) { -} - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801835DC); - - -extern void (*D_801C44E4[])(void); - -void func_80183788(void *a0) { - D_801C44E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_801837C4); - - -extern s32 D_801C4180; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183920(void) { - D_801C9238 = &D_801C4180; - func_80182DB4(0x474, 0x4B0); -} - - - -extern s32 D_801C41B8; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183954(void) { - D_801C9238 = &D_801C41B8; - func_80182DB4(0x474, 0x4EC); -} - - - -extern s32 D_801C41F0; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183988(void) { - D_801C9238 = &D_801C41F0; - func_80182DB4(0x474, 0x4B0); -} - - - -extern s32 D_801C4218; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_801839BC(void) { - D_801C9238 = &D_801C4218; - func_80182DB4(0x474, 0x4B0); -} - - -extern s32 D_801C4250; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_801839F0(void) { - D_801C9238 = &D_801C4250; - func_80182DB4(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183A24); - -extern s32 D_801C42C8; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183A98(void) { - D_801C9238 = &D_801C42C8; - func_80182DB4(0x474, 0x1A4); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183ACC); - -extern void func_80182DB4(s32 arg0, s32 arg1); -extern s32 D_801C4320; -extern s32 D_801C9238; - -void func_80183B18(void) { - D_801C9238 = &D_801C4320; - func_80182DB4(0x12C, 0x1A4); -} - - - -extern s32 D_801C4370; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183B4C(void) { - D_801C9238 = &D_801C4370; - func_80182DB4(0x474, 0x4B0); -} - - - -extern s32 D_801C43D0; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183B80(void) { - D_801C9238 = &D_801C43D0; - func_80182DB4(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183BB4); - -extern s32 D_801C4418; -extern s32 D_801C9238; -extern void func_80182DB4(s32 arg0, s32 arg1); - -void func_80183C00(void) { - D_801C9238 = &D_801C4418; - func_80182DB4(0x564, 0x1A4); -} - - -extern s32 func_80183C34(void); - -s32 func_80183C34(void) { - return -1; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183C3C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183CF8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183DA4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183DE8); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183F04); - - -extern void func_8012B414(int a0); - void func_80183FA0(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80183FD4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_8018404C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80184094); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801734BC", func_80184138); - - -extern void (*D_801C5F0C[])(void); - -void func_801841B0(void *a0) { - D_801C5F0C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801C5EEC[]; - -void func_801841EC(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801C5EEC[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801C5EEC)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801C5EEC[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801C5F20[])(void); - -void func_801842B0(void *a0) { - D_801C5F20[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_801841EC(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_801842EC(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_801841EC(param_1, -0x80); - func_801841EC(param_1, -0x30); - func_801841EC(param_1, 0x20); - func_801841EC(param_1, 0x70); - func_801841EC(param_1, 0xc0); - } - if (1 < uVar1) { - func_801841EC(param_1, -0x58); - func_801841EC(param_1, -0x8); - func_801841EC(param_1, 0x48); - func_801841EC(param_1, 0x98); - func_801841EC(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_801841EC(s32, s32); - -void func_801843D4(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_801841EC(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801C5F14; - -void func_80184414(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801C5F14, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018449C(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - diff --git a/src/ov_SC04_015/ov_SC04_015_jr_80178D40.c b/src/ov_SC04_015/ov_SC04_015_jr_80178D40.c new file mode 100644 index 000000000..1c4faa211 --- /dev/null +++ b/src/ov_SC04_015/ov_SC04_015_jr_80178D40.c @@ -0,0 +1,5246 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187720[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C7C20; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187714[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187758[]; +extern unsigned short D_80187760[]; +extern unsigned short D_80187768[]; +extern unsigned char D_801C7C28[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C7C20; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187770[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C7D5C; +extern M2C_UNK D_801C7D60; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C7CE8; +extern void (*D_801877A0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C7D64[]; +extern u8 D_801C7D6C[]; +extern u8 D_801C7D1C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801877A8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801877C4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801877CC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187834[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801877D8; +extern u8 D_801877E4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187868[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187870[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801878C4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801878F8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801878E8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187914; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018798C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187994[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018799C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801879A4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801879AC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801879B4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801879C0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801879CC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801879D8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801879E8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801879F8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187A00[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187A08[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187A10[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187A18[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187A20[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187A28[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187A30[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187A38[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187A40[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187A48[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187A50[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187A58[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187A60[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187A68[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187A70[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187A78[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187A80[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187A88[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187A90[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187A98[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187AA0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187AA8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187AEC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187AB0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187B1C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187B58[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187BB0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187BC0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187BC8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80187D30[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187D3C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C72DC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C9368; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C84A0; +extern short D_801C93DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C93DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C93DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C84A0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C93DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C9320 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C9320 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C93DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C93DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C88FC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C84A4; + extern s32 D_801C88B8; + extern s16 D_801C88BC; + extern s16 D_801C88C0; + extern s16 D_801C88C4; + extern s16 D_801C88C8; + extern s32 D_801C88D0; + extern s32 D_801C88D4; + extern s32 D_801C88E4; + extern s16 D_801C88E8; + extern s16 D_801C88EC; + extern s32 D_801C88F0; + extern s32 D_801C88F8; + extern s32 D_801C88FC[10]; + extern s32 D_801C9250; + extern s16 D_801C9320; + extern s32 D_801C9364; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C9320; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C88B8); + D_801C88B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C88C4, D_801C88C8 ? 0x48 : 0x40); + (*(s16*)&D_801C93DC) = 2; + break; + case 0: + func_80179B28(D_801C88B8); + D_801C88B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C88BC, D_801C88C0 ? 0x48 : 0x40); + (*(s16*)&D_801C93DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C9250 != 0) { + func_80179B28(D_801C88B8); + D_801C88B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C88BC, D_801C88C0 ? 0x48 : 0x40); + (*(s16*)&D_801C93DC) = 1; + } else { + (*(s16*)&D_801C93DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801C88B8); + D_801C88B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C88BC, + D_801C88C0 ? 0x48 : 0x40); + (*(s16*)&D_801C93DC) = 1; + break; + case 2: + func_80179B28(D_801C88B8); + if (D_801C88D0 != 0) { + D_801C84A0 = D_801C88D0; + D_801C88D0 = 0; + (*(s16*)&D_801C93DC) = 3; + return; + } + (*(s16*)&D_801C93DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C93DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C93DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C93DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C93DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C93DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x1B: + D_801C88F0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C93DC) = 4; + D_801C84A4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C93DC) = 5; + D_801C88E4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C88E4 = (s32)func_8017A3B0; + (*(s16*)&D_801C93DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x24: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C93DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C93DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C93DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C93DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C93DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C93DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C93DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C93DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C93DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C88D4); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C88D4); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C88D4); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C88D4); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x4E: + D_801C88F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C93DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C9364 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x34: + (*(s16*)&D_801C93DC) = 3; + D_801C84A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C88D0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C93DC) = 3; + D_801C84A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C93DC) = 3; + D_801C84A0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C84A0 = *(s32 *)(D_801C84A0 + 4); + return; + case 0x37: + (*(s16*)&D_801C93DC) = 3; + D_801C88BC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C88C0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C93DC) = 3; + D_801C88C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C88C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C93DC) = 3; + D_801C88BC = w1; + D_801C88C0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C93DC) = 3; + D_801C88C4 = w2; + D_801C88C8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x43: + D_801C88E4 = (s32)func_8017A3D8; + D_801C88EC = 0; + (*(s16*)&D_801C93DC) = 5; + D_801C88E8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C93DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C93DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C88FC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C93DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C88FC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C93DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C88FC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C93DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C88FC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C93DC) = 3; + break; + default: + break; + } +Lend: + D_801C84A0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C88CC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C88CC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C88CC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C88CC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C88F4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C88F4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C88B0; + +s32 func_8017A3B0(void) { + switch (D_801C88B0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C88EC; +extern short D_801C88E8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C88EC) { + case 0: + func_800D0CA0(1); + D_801C88EC = D_801C88EC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C88E8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C88EC = D_801C88EC + 1; + if (D_801C88EC < 0x1E) { + return 0; + } + D_801C88EC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C892C; + extern s16 D_801C892E; + extern s16 D_801C8930; + extern s16 D_801C8924; + extern s16 D_801C8926; + extern s16 D_801C8928; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C892C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C892E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C8930, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C8924, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C8926, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C8928, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C88B4; +extern u16 D_801C8934; +extern u16 D_801C8936; +extern u16 D_801C8938; +extern s16 D_801C9368; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C9368 = 0; + D_801C88B4 = 0; + D_801C8934 = D_80126B5E; + D_801C8936 = D_80126B62; + D_801C8938 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187E78[]; + extern s16 D_801C892C; + extern s16 D_801C8924; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187E78[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187E78[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C892C; + s16 *p78C = &D_801C8924; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C9368 = 1; + D_801C88B4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C88D4; + extern SV4_8017B368 D_801C88DC; + extern s16 D_801C892C; + extern s16 D_801C8924; + extern u16 D_80187E78; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C88D4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C88DC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80187E78)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80187E78)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C892C) = loc0; + (*(SV4_8017B368 *)&D_801C8924) = loc1; + D_801C9368 = 1; + D_801C88B4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80187E78[]; + extern s16 D_801C892C; + extern s16 D_801C892E; + extern s16 D_801C8930; + extern s16 D_801C8924; + extern s16 D_801C8926; + extern s16 D_801C8928; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80187E78[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80187E78[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C892C; + s16 *p78C = &D_801C8924; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C892E; + v798 = D_801C8930; + v78C = *p78C; + v78E = D_801C8926; + v790 = D_801C8928; + __asm__ __volatile__(""); + D_801C9368 = 1; + D_801C88B4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C88B4; +extern s16 D_801C892C; +extern s16 D_801C892E; +extern s16 D_801C8930; +extern s16 D_801C8924; +extern s16 D_801C8926; +extern s16 D_801C8928; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C88B4 = 0; + D_801C892C = (s16) D_80114F30; + D_801C892E = (s16) D_80114F34; + D_801C8930 = (s16) D_80114F38; + D_801C8924 = (s16) D_80114F24; + D_801C8926 = (s16) D_80114F28; + D_801C8928 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C8944; +extern s16 D_801C8946; +extern s16 D_801C8948; +extern s16 D_801C894C; +extern s16 D_801C894E; +extern s16 D_801C8950; + +void func_8017B824(void) { + D_801C8944 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C8946 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C8948 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C894C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C894E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C8950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C8944; +extern s16 D_801C8946; +extern s16 D_801C8948; +extern s16 D_801C894C; +extern s16 D_801C894E; +extern s16 D_801C8950; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C8944; + D_80114F34 = D_801C8946; + D_80114F38 = D_801C8948; + D_80114F24 = D_801C894C; + D_80114F28 = D_801C894E; + D_80114F2C = D_801C8950; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C892C), src[8..15] -> (*(S8_8017B8E8 *)&D_801C8924) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C892C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C8924) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C8934; +extern u16 D_801C8936; +extern u16 D_801C8938; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C88B4; +extern short D_801C893C; +extern short D_801C893E; +extern short D_801C8940; +extern s16 D_801C892C; +extern s16 D_801C892E; +extern s16 D_801C8930; +extern s16 D_801C8924; +extern s16 D_801C8926; +extern s16 D_801C8928; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C8934); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C8936); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C8938); + (*(s16 *)&D_801C893C) = buf[0]; + (*(s16 *)&D_801C893E) = buf[1]; + (*(s16 *)&D_801C8940) = buf[2]; + D_801C892C = D_80114F30 + buf[0]; + D_801C88B4 = 0; + D_801C892E = D_80114F34 + buf[1]; + D_801C8930 = D_80114F38 + buf[2]; + D_801C8924 = D_80114F24 + buf[0]; + D_801C8926 = D_80114F28 + buf[1]; + D_801C8928 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C88D4; +extern SV4 D_801C88DC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C88DC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C88D4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C88DC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C88DC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C88D4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C88DC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C88FC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C88FC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C88B4; +extern s16 D_801C9368; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C88B4 = D_801C88B4 + 1; + if (D_801C88B4 >= 0x1F) { + D_801C9368 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C88B4; +extern s16 D_801C9368; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C88B4 = D_801C88B4 + 1; + if (0x18 < D_801C88B4) { + func_8012A4BC(); + D_801C9368 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C88B4; +extern void (*D_801C88F8)(void); +extern short D_801C893C; +extern short D_801C893E; +extern short D_801C8940; +extern s16 D_801C9368; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C88B4 = D_801C88B4 + 1; + if (D_801C88B4 >= 0x19) { + if (D_801C88F8 != 0) { + (*D_801C88F8)(); + } else { + D_80114F30 = D_80114F30 + D_801C893C; + D_80114F34 = D_80114F34 + D_801C893E; + D_80114F38 = D_80114F38 + D_801C8940; + D_80114F24 = D_80114F24 + D_801C893C; + D_80114F28 = D_80114F28 + D_801C893E; + D_80114F2C = D_80114F2C + D_801C8940; + func_8012A4BC(); + } + D_801C9368 = 0; + } +} + + + +extern void (*D_80187F18[])(void); + +void func_8017BE60(void *a0) { + D_80187F18[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80187FB8[])(void); + +void func_8017BEBC(void *a0) { + D_80187FB8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80187FC0[])(void); + +void func_8017BEF8(void *a0) { + D_80187FC0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80187FC8[])(void); + +void func_8017BF34(void *a0) { + D_80187FC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017BF70); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C0B4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C20C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C2D0); + + +extern void (*D_80187FE8[])(void); + +void func_8017C358(void *a0) { + D_80187FE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C394); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C558); + + +extern void (*D_80187FF0[])(void); + +void func_8017C5EC(void *a0) { + D_80187FF0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80187FDC; + +void func_8017C628(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80187FDC, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C6CC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017C730); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D610); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D674(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D698); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D6FC); + +extern void func_800D1EBC(void); + void func_8017D7AC(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D7CC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D83C); + +s32 func_8017D878(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D880); + + +extern void (*D_80187FF8[])(void); + +void func_8017D8C8(void *a0) { + D_80187FF8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80188000[])(void); + +void func_8017D904(void *a0) { + D_80188000[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80188018[])(void); + +void func_8017D940(void *a0) { + D_80188018[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_801882F0[])(void); + +void func_8017D97C(void *a0) { + D_801882F0[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D9B8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D9CC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017D9FC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DA24); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DA5C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DA90); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DAB8); + + +extern void (*D_80188320[])(void); + +void func_8017DB70(void *a0) { + D_80188320[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DBAC); + +void func_8017DBE0(u8 *a0) { + *(s8 *)(a0 + 0xA0) = 0x6; + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DBEC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DD2C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DF20); + + +extern void (*D_80188584[])(void); + +void func_8017DF90(void *a0) { + D_80188584[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017DFCC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E004); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E014); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E038); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E0CC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E16C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E230); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E2CC); + + +extern void (*D_801885C0[])(void); + +void func_8017E4E4(void *a0) { + D_801885C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E520); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E830); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017E9B0); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017EA2C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017EB14); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017EB78); + +extern void func_80016714(void *a0, s32 a1); +extern s32 D_801C8C64; + +void func_8017ED00(void) { + func_80016714(&D_801C8C64, 0x380); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017ED28); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017EE80); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F018); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F0EC); + + +extern void (*D_801888F4[])(void); + +void func_8017F408(void *a0) { + D_801888F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F444); + +extern s16 D_801C8B70; + +s32 func_8017F53C(void) { + return D_801C8B70; +} + + + +extern void (*D_80188948[])(void); + +void func_8017F54C(void *a0) { + D_80188948[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F588); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F600); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F708); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F748); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F7E4); + + +extern void (*D_801889E0[])(void); + +void func_8017F90C(void *a0) { + D_801889E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F948); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017F990(void) { + func_80029124(0x13A, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017F9B4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FA78); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FB40); + + +extern void (*D_80188A78[])(void); + +void func_8017FBD4(void *a0) { + D_80188A78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FC10); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017FC58(void) { + func_80029124(0x139, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FC7C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FD40); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FE08); + + +extern void (*D_80188B10[])(void); + +void func_8017FE9C(void *a0) { + D_80188B10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FED8); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017FF20(void) { + func_80029124(0x13B, 1); + func_80029124(0x116, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8017FF50); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180014); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801800DC); + + +extern void (*D_80188B74[])(void); + +void func_80180170(void *a0) { + D_80188B74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801801AC); + +DEFINE_func_80180210() /* dedup: shared engine-core @0x80180210 (src/shared) */ + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_80188B5C; + +void func_80180218(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80188B5C); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180250); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180290); + +extern s32 func_8018030C(void); + void func_801802EC(void) { + func_8018030C(); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018030C); + + +extern void (*D_80188C10[])(void); + +void func_80180398(void *a0) { + D_80188C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801803D4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180440); + +extern s32 func_80180514(void); + +s32 func_80180514(void) { + return 0x5B; +} + + + +extern void (*D_80189330[])(void); + +void func_8018051C(void *a0) { + D_80189330[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80189320; + +void func_80180558(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80189320 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_801805D4(void) { +} + + +extern void (*D_80189368[])(void); + +void func_801805DC(void *a0) { + D_80189368[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180618); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801806A8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801808E4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180934); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801809F0); + +void func_80180B08(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +void func_80180B18(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180B28); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180BC4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180BF0); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180C1C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180C48); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180CCC); + + +extern s32 func_80180CCC(s32 arg); +extern void func_80180E30(void *a0); + +void func_80180DFC(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_80180CCC((s32)a0); + func_80180E30(a0); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180E30); + + +extern short D_800BA2BA; + s32 func_80180E70(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801B2954[])(void); + +void func_80180E98(void *a0) { + D_801B2954[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80180ED4(void) { +} + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180EDC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180F18); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180F3C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180F94); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80180FFC); + +void func_8018101C(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181024); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018106C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801810C8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018113C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801811B0); + +extern s32 func_80029504(void); +extern void func_80029514(s32 arg0); + +void func_8018120C(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181240); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181310); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801814D8); + + +extern void (*D_801B2974[])(void); + +void func_80181520(void *a0) { + D_801B2974[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018155C(void) { +} + +void func_80181564(void) { +} + +void func_8018156C(void) { +} + +void func_80181574(void) { +} + +void func_8018157C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181584); + +void func_801815C8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801815D0); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181658); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181830); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801819D0); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181A4C); + +extern s32 func_80182258(void); + void func_80181B18(void) { + func_80182258(); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181B38); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181C08); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181C70); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181CE4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181D44); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181DC4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181E1C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181E7C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181EC4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181F14); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181F4C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80181FD8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018207C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801820DC); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182258); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018228C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801822C0); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182324); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182398); + + +extern void (*D_801B2C70[])(void); + +void func_801823F0(void *a0) { + D_801B2C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018242C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801824A8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801825C8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182614); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182720); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018277C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801827BC); + + +extern void func_8012B2CC(s32 arg); + void func_80182820(void *arg0) { + s32 *p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } + + +extern void func_8012B2CC(s32 a0); + void func_80182850(void * arg0) { + s32 temp_v1; + temp_v1 = *(s32 *)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 0x4; + *(s16 *)(temp_v1 + 0x12) = 0x600; + func_8012B2CC((s32)arg0); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182880); + + +extern void (*D_801C402C[])(void); + +void func_801829F0(void *a0) { + D_801C402C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182A2C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182AA8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182B18); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80182B30(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182B54); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182C88); + +void func_80182CF0(void) { +} + +void func_80182CF8(void) { +} + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182D00); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182DB4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182E1C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182E70); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80182F2C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183314); + + +extern void (*D_801C4480[])(void); + +void func_8018338C(void *a0) { + D_801C4480[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801833C8); + + +extern void (*D_801C44AC[])(void); + +void func_801834E4(void *a0) { + D_801C44AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801C44B4[])(void); + +void func_80183520(void *a0) { + D_801C44B4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801C44C4[])(void); + +void func_8018355C(void *a0) { + D_801C44C4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801C44D4[])(void); + +void func_80183598(void *a0) { + D_801C44D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801835D4(void) { +} + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801835DC); + + +extern void (*D_801C44E4[])(void); + +void func_80183788(void *a0) { + D_801C44E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_801837C4); + + +extern s32 D_801C4180; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183920(void) { + D_801C9238 = &D_801C4180; + func_80182DB4(0x474, 0x4B0); +} + + + +extern s32 D_801C41B8; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183954(void) { + D_801C9238 = &D_801C41B8; + func_80182DB4(0x474, 0x4EC); +} + + + +extern s32 D_801C41F0; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183988(void) { + D_801C9238 = &D_801C41F0; + func_80182DB4(0x474, 0x4B0); +} + + + +extern s32 D_801C4218; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_801839BC(void) { + D_801C9238 = &D_801C4218; + func_80182DB4(0x474, 0x4B0); +} + + +extern s32 D_801C4250; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_801839F0(void) { + D_801C9238 = &D_801C4250; + func_80182DB4(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183A24); + +extern s32 D_801C42C8; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183A98(void) { + D_801C9238 = &D_801C42C8; + func_80182DB4(0x474, 0x1A4); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183ACC); + +extern void func_80182DB4(s32 arg0, s32 arg1); +extern s32 D_801C4320; +extern s32 D_801C9238; + +void func_80183B18(void) { + D_801C9238 = &D_801C4320; + func_80182DB4(0x12C, 0x1A4); +} + + + +extern s32 D_801C4370; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183B4C(void) { + D_801C9238 = &D_801C4370; + func_80182DB4(0x474, 0x4B0); +} + + + +extern s32 D_801C43D0; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183B80(void) { + D_801C9238 = &D_801C43D0; + func_80182DB4(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183BB4); + +extern s32 D_801C4418; +extern s32 D_801C9238; +extern void func_80182DB4(s32 arg0, s32 arg1); + +void func_80183C00(void) { + D_801C9238 = &D_801C4418; + func_80182DB4(0x564, 0x1A4); +} + + +extern s32 func_80183C34(void); + +s32 func_80183C34(void) { + return -1; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183C3C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183CF8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183DA4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183DE8); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183F04); + + +extern void func_8012B414(int a0); + void func_80183FA0(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80183FD4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_8018404C); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80184094); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_80178D40", func_80184138); + + +extern void (*D_801C5F0C[])(void); + +void func_801841B0(void *a0) { + D_801C5F0C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801C5EEC[]; + +void func_801841EC(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801C5EEC[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801C5EEC)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801C5EEC[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801C5F20[])(void); + +void func_801842B0(void *a0) { + D_801C5F20[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_801841EC(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_801842EC(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_801841EC(param_1, -0x80); + func_801841EC(param_1, -0x30); + func_801841EC(param_1, 0x20); + func_801841EC(param_1, 0x70); + func_801841EC(param_1, 0xc0); + } + if (1 < uVar1) { + func_801841EC(param_1, -0x58); + func_801841EC(param_1, -0x8); + func_801841EC(param_1, 0x48); + func_801841EC(param_1, 0x98); + func_801841EC(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_801841EC(s32, s32); + +void func_801843D4(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_801841EC(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801C5F14; + +void func_80184414(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801C5F14, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018449C(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + + diff --git a/src/ov_SC04_016/ov_SC04_016_jr_801734BC.c b/src/ov_SC04_016/ov_SC04_016_jr_801734BC.c index 44d5a333e..181b9e62d 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_801734BC.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_801734BC.c @@ -3084,974 +3084,3 @@ void func_80178D18(void) { D_801AC2DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A6A74; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A6A74 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A6A74; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A6A74 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A6A9C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A6A9C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A6A58; - -s32 func_8017A3B0(void) { - switch (D_801A6A58) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A6A94; -extern short D_801A6A90; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A6A94) { - case 0: - func_800D0CA0(1); - D_801A6A94 = D_801A6A94 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A6A90; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A6A94 = D_801A6A94 + 1; - if (D_801A6A94 < 0x1E) { - return 0; - } - D_801A6A94 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A6AD4; - extern s16 D_801A6AD6; - extern s16 D_801A6AD8; - extern s16 D_801A6ACC; - extern s16 D_801A6ACE; - extern s16 D_801A6AD0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A6AD4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A6AD6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A6AD8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A6ACC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A6ACE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A6AD0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A6A5C; -extern u16 D_801A6ADC; -extern u16 D_801A6ADE; -extern u16 D_801A6AE0; -extern s16 D_801AC268; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AC268 = 0; - D_801A6A5C = 0; - D_801A6ADC = D_80126B5E; - D_801A6ADE = D_80126B62; - D_801A6AE0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018393C[]; - extern s16 D_801A6AD4; - extern s16 D_801A6ACC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018393C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018393C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A6AD4; - s16 *p78C = &D_801A6ACC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AC268 = 1; - D_801A6A5C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A6A7C; - extern SV4_8017B368 D_801A6A84; - extern s16 D_801A6AD4; - extern s16 D_801A6ACC; - extern u16 D_8018393C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A6A7C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A6A84; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018393C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018393C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A6AD4) = loc0; - (*(SV4_8017B368 *)&D_801A6ACC) = loc1; - D_801AC268 = 1; - D_801A6A5C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018393C[]; - extern s16 D_801A6AD4; - extern s16 D_801A6AD6; - extern s16 D_801A6AD8; - extern s16 D_801A6ACC; - extern s16 D_801A6ACE; - extern s16 D_801A6AD0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018393C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018393C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A6AD4; - s16 *p78C = &D_801A6ACC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A6AD6; - v798 = D_801A6AD8; - v78C = *p78C; - v78E = D_801A6ACE; - v790 = D_801A6AD0; - __asm__ __volatile__(""); - D_801AC268 = 1; - D_801A6A5C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A6A5C; -extern s16 D_801A6AD4; -extern s16 D_801A6AD6; -extern s16 D_801A6AD8; -extern s16 D_801A6ACC; -extern s16 D_801A6ACE; -extern s16 D_801A6AD0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A6A5C = 0; - D_801A6AD4 = (s16) D_80114F30; - D_801A6AD6 = (s16) D_80114F34; - D_801A6AD8 = (s16) D_80114F38; - D_801A6ACC = (s16) D_80114F24; - D_801A6ACE = (s16) D_80114F28; - D_801A6AD0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A6AEC; -extern s16 D_801A6AEE; -extern s16 D_801A6AF0; -extern s16 D_801A6AF4; -extern s16 D_801A6AF6; -extern s16 D_801A6AF8; - -void func_8017B824(void) { - D_801A6AEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A6AEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A6AF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A6AF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A6AF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A6AF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A6AEC; -extern s16 D_801A6AEE; -extern s16 D_801A6AF0; -extern s16 D_801A6AF4; -extern s16 D_801A6AF6; -extern s16 D_801A6AF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A6AEC; - D_80114F34 = D_801A6AEE; - D_80114F38 = D_801A6AF0; - D_80114F24 = D_801A6AF4; - D_80114F28 = D_801A6AF6; - D_80114F2C = D_801A6AF8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A6AD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A6ACC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A6AD4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A6ACC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A6ADC; -extern u16 D_801A6ADE; -extern u16 D_801A6AE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A6A5C; -extern short D_801A6AE4; -extern short D_801A6AE6; -extern short D_801A6AE8; -extern s16 D_801A6AD4; -extern s16 D_801A6AD6; -extern s16 D_801A6AD8; -extern s16 D_801A6ACC; -extern s16 D_801A6ACE; -extern s16 D_801A6AD0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A6ADC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A6ADE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A6AE0); - (*(s16 *)&D_801A6AE4) = buf[0]; - (*(s16 *)&D_801A6AE6) = buf[1]; - (*(s16 *)&D_801A6AE8) = buf[2]; - D_801A6AD4 = D_80114F30 + buf[0]; - D_801A6A5C = 0; - D_801A6AD6 = D_80114F34 + buf[1]; - D_801A6AD8 = D_80114F38 + buf[2]; - D_801A6ACC = D_80114F24 + buf[0]; - D_801A6ACE = D_80114F28 + buf[1]; - D_801A6AD0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A6A7C; -extern SV4 D_801A6A84; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A6A84) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A6A7C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A6A84 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A6A84)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A6A7C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A6A84) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A6AA4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A6AA4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A6A5C; -extern s16 D_801AC268; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A6A5C = D_801A6A5C + 1; - if (D_801A6A5C >= 0x1F) { - D_801AC268 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A6A5C; -extern s16 D_801AC268; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A6A5C = D_801A6A5C + 1; - if (0x18 < D_801A6A5C) { - func_8012A4BC(); - D_801AC268 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A6A5C; -extern void (*D_801A6AA0)(void); -extern short D_801A6AE4; -extern short D_801A6AE6; -extern short D_801A6AE8; -extern s16 D_801AC268; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A6A5C = D_801A6A5C + 1; - if (D_801A6A5C >= 0x19) { - if (D_801A6AA0 != 0) { - (*D_801A6AA0)(); - } else { - D_80114F30 = D_80114F30 + D_801A6AE4; - D_80114F34 = D_80114F34 + D_801A6AE6; - D_80114F38 = D_80114F38 + D_801A6AE8; - D_80114F24 = D_80114F24 + D_801A6AE4; - D_80114F28 = D_80114F28 + D_801A6AE6; - D_80114F2C = D_80114F2C + D_801A6AE8; - func_8012A4BC(); - } - D_801AC268 = 0; - } -} - - - -extern void (*D_801839DC[])(void); - -void func_8017BE60(void *a0) { - D_801839DC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017BEBC); - - -extern void (*D_80183A38[])(void); - -void func_8017CD9C(void *a0) { - D_80183A38[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80183A40[])(void); - -void func_8017CE40(void *a0) { - D_80183A40[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CEBC); - - -extern s32 func_800167F0(s32 arg); -extern void func_800CFBCC(s32 arg); - -s32 func_8017CF38(void) { - if ((func_800167F0(0x4) & 0xFFFF) == 0) { - return 0; - } else { - func_800CFBCC(0x3); - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CF70); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CF98); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017CFC0); - - -extern void (*D_80183A5C[])(void); - -void func_8017D010(void *a0) { - D_80183A5C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017D04C); - -void func_8017D0EC(s32 *a0) { - *(s32 *)((s32)a0 + 0x3C) = 0x18C; - *(s32 *)((s32)a0 + 0x40) = -0x610; - *(s32 *)((s32)a0 + 0x48) = -0xCD; - *(s32 *)((s32)a0 + 0x44) = 0; - *(s32 *)((s32)a0 + 0x4C) = -0x202; - *(s32 *)((s32)a0 + 0x50) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017D588); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017D6D8); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017D924); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017DA50); - - -extern void (*D_80184C34[])(void); - -void func_8017DCDC(void *a0) { - D_80184C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017DD18); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017DDA0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017DE80); - - -extern s32 D_801A6B40; - void func_8017DF68(void) { - s32 i = 0x4FB0; - do { - *(s32 *)((s32)&D_801A6B40 + i) = 0; - i -= 0x50; - } while (i >= 0); - } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017DF8C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017E26C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017E6A0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017E6E0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017E960); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EA74); - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80183A64; - void func_8017EB30(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183A64); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80183FF4; - void func_8017EB5C(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183FF4); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80183DFC; - void func_8017EB88(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183DFC); - } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EBB4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EBC4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EBD4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EBE4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EBF4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EC48); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EC90); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017ECE0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017ED48); - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801840EC; - void func_8017ED98(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801840EC); - } - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EDC4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EE20); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EE78); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EF58); - -void func_8017EF9C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017EFA4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F03C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F140); - -void func_8017F1BC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F1C4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F2AC); - - -extern void (*D_801A35AC[])(void); - -void func_8017F320(void *a0) { - D_801A35AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F35C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F3EC); - - -extern void (*D_801A35BC[])(void); - -void func_8017F464(void *a0) { - D_801A35BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F4A0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F544); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F5D0); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F72C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F82C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017F8A8); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017FD48); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017FED4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_801734BC", func_8017FF08); - diff --git a/src/ov_SC04_016/ov_SC04_016_jr_80178D40.c b/src/ov_SC04_016/ov_SC04_016_jr_80178D40.c new file mode 100644 index 000000000..c8eaf98ee --- /dev/null +++ b/src/ov_SC04_016/ov_SC04_016_jr_80178D40.c @@ -0,0 +1,4420 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801831E4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A5DC8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801831D8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018321C[]; +extern unsigned short D_80183224[]; +extern unsigned short D_8018322C[]; +extern unsigned char D_801A5DD0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A5DC8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183234[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A5F04; +extern M2C_UNK D_801A5F08; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A5E90; +extern void (*D_80183264[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A5F0C[]; +extern u8 D_801A5F14[]; +extern u8 D_801A5EC4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018326C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183288[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80183290[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801832F8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018329C; +extern u8 D_801832A8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018332C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183334[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80183388[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801833BC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801833AC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801833D8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183450[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183458[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183460[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183468[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80183470[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183478[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80183484[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80183490[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018349C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801834AC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801834BC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801834C4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801834CC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801834D4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801834DC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801834E4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801834EC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801834F4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801834FC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183504[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018350C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183514[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018351C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183524[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018352C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183534[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018353C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183544[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018354C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183554[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018355C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183564[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018356C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801835B0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183574; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801835E0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018361C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183674[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183684[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018368C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801837F4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80183800[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A5494; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AC268; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A6648; +extern short D_801AC2DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AC2DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AC2DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A6648 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AC2DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AC238 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AC238 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AC2DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AC2DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A6AA4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A664C; + extern s32 D_801A6A60; + extern s16 D_801A6A64; + extern s16 D_801A6A68; + extern s16 D_801A6A6C; + extern s16 D_801A6A70; + extern s32 D_801A6A78; + extern s32 D_801A6A7C; + extern s32 D_801A6A8C; + extern s16 D_801A6A90; + extern s16 D_801A6A94; + extern s32 D_801A6A98; + extern s32 D_801A6AA0; + extern s32 D_801A6AA4[10]; + extern s32 D_801AC180; + extern s16 D_801AC238; + extern s32 D_801AC264; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AC238; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A6A60); + D_801A6A60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A6A6C, D_801A6A70 ? 0x48 : 0x40); + (*(s16*)&D_801AC2DC) = 2; + break; + case 0: + func_80179B28(D_801A6A60); + D_801A6A60 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A6A64, D_801A6A68 ? 0x48 : 0x40); + (*(s16*)&D_801AC2DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AC180 != 0) { + func_80179B28(D_801A6A60); + D_801A6A60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A6A64, D_801A6A68 ? 0x48 : 0x40); + (*(s16*)&D_801AC2DC) = 1; + } else { + (*(s16*)&D_801AC2DC) = 3; + } + break; + case 0x32: + func_80179B28(D_801A6A60); + D_801A6A60 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A6A64, + D_801A6A68 ? 0x48 : 0x40); + (*(s16*)&D_801AC2DC) = 1; + break; + case 2: + func_80179B28(D_801A6A60); + if (D_801A6A78 != 0) { + D_801A6648 = D_801A6A78; + D_801A6A78 = 0; + (*(s16*)&D_801AC2DC) = 3; + return; + } + (*(s16*)&D_801AC2DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AC2DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AC2DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AC2DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x1B: + D_801A6A98 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AC2DC) = 4; + D_801A664C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AC2DC) = 5; + D_801A6A8C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A6A8C = (s32)func_8017A3B0; + (*(s16*)&D_801AC2DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x24: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AC2DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AC2DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AC2DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AC2DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AC2DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AC2DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AC2DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A6A7C); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A6A7C); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A6A7C); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A6A7C); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x4E: + D_801A6AA0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x2B: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AC2DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AC264 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x34: + (*(s16*)&D_801AC2DC) = 3; + D_801A6648 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A6A78 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AC2DC) = 3; + D_801A6648 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AC2DC) = 3; + D_801A6648 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A6648 = *(s32 *)(D_801A6648 + 4); + return; + case 0x37: + (*(s16*)&D_801AC2DC) = 3; + D_801A6A64 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A6A68 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AC2DC) = 3; + D_801A6A6C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A6A70 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AC2DC) = 3; + D_801A6A64 = w1; + D_801A6A68 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AC2DC) = 3; + D_801A6A6C = w2; + D_801A6A70 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x43: + D_801A6A8C = (s32)func_8017A3D8; + D_801A6A94 = 0; + (*(s16*)&D_801AC2DC) = 5; + D_801A6A90 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AC2DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AC2DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A6AA4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AC2DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A6AA4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AC2DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A6AA4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AC2DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A6AA4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AC2DC) = 3; + break; + default: + break; + } +Lend: + D_801A6648 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A6A74; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A6A74 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A6A74; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A6A74 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A6A9C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A6A9C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A6A58; + +s32 func_8017A3B0(void) { + switch (D_801A6A58) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A6A94; +extern short D_801A6A90; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A6A94) { + case 0: + func_800D0CA0(1); + D_801A6A94 = D_801A6A94 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A6A90; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A6A94 = D_801A6A94 + 1; + if (D_801A6A94 < 0x1E) { + return 0; + } + D_801A6A94 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A6AD4; + extern s16 D_801A6AD6; + extern s16 D_801A6AD8; + extern s16 D_801A6ACC; + extern s16 D_801A6ACE; + extern s16 D_801A6AD0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A6AD4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A6AD6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A6AD8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A6ACC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A6ACE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A6AD0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A6A5C; +extern u16 D_801A6ADC; +extern u16 D_801A6ADE; +extern u16 D_801A6AE0; +extern s16 D_801AC268; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AC268 = 0; + D_801A6A5C = 0; + D_801A6ADC = D_80126B5E; + D_801A6ADE = D_80126B62; + D_801A6AE0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018393C[]; + extern s16 D_801A6AD4; + extern s16 D_801A6ACC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018393C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018393C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A6AD4; + s16 *p78C = &D_801A6ACC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AC268 = 1; + D_801A6A5C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A6A7C; + extern SV4_8017B368 D_801A6A84; + extern s16 D_801A6AD4; + extern s16 D_801A6ACC; + extern u16 D_8018393C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A6A7C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A6A84; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018393C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018393C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A6AD4) = loc0; + (*(SV4_8017B368 *)&D_801A6ACC) = loc1; + D_801AC268 = 1; + D_801A6A5C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018393C[]; + extern s16 D_801A6AD4; + extern s16 D_801A6AD6; + extern s16 D_801A6AD8; + extern s16 D_801A6ACC; + extern s16 D_801A6ACE; + extern s16 D_801A6AD0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018393C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018393C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A6AD4; + s16 *p78C = &D_801A6ACC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A6AD6; + v798 = D_801A6AD8; + v78C = *p78C; + v78E = D_801A6ACE; + v790 = D_801A6AD0; + __asm__ __volatile__(""); + D_801AC268 = 1; + D_801A6A5C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A6A5C; +extern s16 D_801A6AD4; +extern s16 D_801A6AD6; +extern s16 D_801A6AD8; +extern s16 D_801A6ACC; +extern s16 D_801A6ACE; +extern s16 D_801A6AD0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A6A5C = 0; + D_801A6AD4 = (s16) D_80114F30; + D_801A6AD6 = (s16) D_80114F34; + D_801A6AD8 = (s16) D_80114F38; + D_801A6ACC = (s16) D_80114F24; + D_801A6ACE = (s16) D_80114F28; + D_801A6AD0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A6AEC; +extern s16 D_801A6AEE; +extern s16 D_801A6AF0; +extern s16 D_801A6AF4; +extern s16 D_801A6AF6; +extern s16 D_801A6AF8; + +void func_8017B824(void) { + D_801A6AEC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A6AEE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A6AF0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A6AF4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A6AF6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A6AF8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A6AEC; +extern s16 D_801A6AEE; +extern s16 D_801A6AF0; +extern s16 D_801A6AF4; +extern s16 D_801A6AF6; +extern s16 D_801A6AF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A6AEC; + D_80114F34 = D_801A6AEE; + D_80114F38 = D_801A6AF0; + D_80114F24 = D_801A6AF4; + D_80114F28 = D_801A6AF6; + D_80114F2C = D_801A6AF8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A6AD4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A6ACC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A6AD4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A6ACC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A6ADC; +extern u16 D_801A6ADE; +extern u16 D_801A6AE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A6A5C; +extern short D_801A6AE4; +extern short D_801A6AE6; +extern short D_801A6AE8; +extern s16 D_801A6AD4; +extern s16 D_801A6AD6; +extern s16 D_801A6AD8; +extern s16 D_801A6ACC; +extern s16 D_801A6ACE; +extern s16 D_801A6AD0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A6ADC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A6ADE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A6AE0); + (*(s16 *)&D_801A6AE4) = buf[0]; + (*(s16 *)&D_801A6AE6) = buf[1]; + (*(s16 *)&D_801A6AE8) = buf[2]; + D_801A6AD4 = D_80114F30 + buf[0]; + D_801A6A5C = 0; + D_801A6AD6 = D_80114F34 + buf[1]; + D_801A6AD8 = D_80114F38 + buf[2]; + D_801A6ACC = D_80114F24 + buf[0]; + D_801A6ACE = D_80114F28 + buf[1]; + D_801A6AD0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A6A7C; +extern SV4 D_801A6A84; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A6A84) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A6A7C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A6A84 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A6A84)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A6A7C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A6A84) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A6AA4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A6AA4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A6A5C; +extern s16 D_801AC268; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A6A5C = D_801A6A5C + 1; + if (D_801A6A5C >= 0x1F) { + D_801AC268 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A6A5C; +extern s16 D_801AC268; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A6A5C = D_801A6A5C + 1; + if (0x18 < D_801A6A5C) { + func_8012A4BC(); + D_801AC268 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A6A5C; +extern void (*D_801A6AA0)(void); +extern short D_801A6AE4; +extern short D_801A6AE6; +extern short D_801A6AE8; +extern s16 D_801AC268; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A6A5C = D_801A6A5C + 1; + if (D_801A6A5C >= 0x19) { + if (D_801A6AA0 != 0) { + (*D_801A6AA0)(); + } else { + D_80114F30 = D_80114F30 + D_801A6AE4; + D_80114F34 = D_80114F34 + D_801A6AE6; + D_80114F38 = D_80114F38 + D_801A6AE8; + D_80114F24 = D_80114F24 + D_801A6AE4; + D_80114F28 = D_80114F28 + D_801A6AE6; + D_80114F2C = D_80114F2C + D_801A6AE8; + func_8012A4BC(); + } + D_801AC268 = 0; + } +} + + + +extern void (*D_801839DC[])(void); + +void func_8017BE60(void *a0) { + D_801839DC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017BEBC); + + +extern void (*D_80183A38[])(void); + +void func_8017CD9C(void *a0) { + D_80183A38[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80183A40[])(void); + +void func_8017CE40(void *a0) { + D_80183A40[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CEBC); + + +extern s32 func_800167F0(s32 arg); +extern void func_800CFBCC(s32 arg); + +s32 func_8017CF38(void) { + if ((func_800167F0(0x4) & 0xFFFF) == 0) { + return 0; + } else { + func_800CFBCC(0x3); + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CF70); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CF98); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017CFC0); + + +extern void (*D_80183A5C[])(void); + +void func_8017D010(void *a0) { + D_80183A5C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017D04C); + +void func_8017D0EC(s32 *a0) { + *(s32 *)((s32)a0 + 0x3C) = 0x18C; + *(s32 *)((s32)a0 + 0x40) = -0x610; + *(s32 *)((s32)a0 + 0x48) = -0xCD; + *(s32 *)((s32)a0 + 0x44) = 0; + *(s32 *)((s32)a0 + 0x4C) = -0x202; + *(s32 *)((s32)a0 + 0x50) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017D588); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017D6D8); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017D924); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017DA50); + + +extern void (*D_80184C34[])(void); + +void func_8017DCDC(void *a0) { + D_80184C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017DD18); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017DDA0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017DE80); + + +extern s32 D_801A6B40; + void func_8017DF68(void) { + s32 i = 0x4FB0; + do { + *(s32 *)((s32)&D_801A6B40 + i) = 0; + i -= 0x50; + } while (i >= 0); + } + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017DF8C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017E26C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017E6A0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017E6E0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017E960); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EA74); + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80183A64; + void func_8017EB30(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183A64); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80183FF4; + void func_8017EB5C(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183FF4); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80183DFC; + void func_8017EB88(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80183DFC); + } + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EBB4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EBC4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EBD4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EBE4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EBF4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EC48); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EC90); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017ECE0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017ED48); + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801840EC; + void func_8017ED98(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801840EC); + } + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EDC4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EE20); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EE78); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EF58); + +void func_8017EF9C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017EFA4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F03C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F140); + +void func_8017F1BC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F1C4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F2AC); + + +extern void (*D_801A35AC[])(void); + +void func_8017F320(void *a0) { + D_801A35AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F35C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F3EC); + + +extern void (*D_801A35BC[])(void); + +void func_8017F464(void *a0) { + D_801A35BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F4A0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F544); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F5D0); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F72C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F82C); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017F8A8); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017FD48); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017FED4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_80178D40", func_8017FF08); + + diff --git a/src/ov_SC04_018/ov_SC04_018_jr_801734BC.c b/src/ov_SC04_018/ov_SC04_018_jr_801734BC.c index 164262e9a..72f904ad6 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_801734BC.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_801734BC.c @@ -3075,2354 +3075,3 @@ void func_80178D18(void) { D_801E7B24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E6CC4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E6CC4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E6CC4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E6CC4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E6CEC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E6CEC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E6CA8; - -s32 func_8017A3B0(void) { - switch (D_801E6CA8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E6CE4; -extern short D_801E6CE0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E6CE4) { - case 0: - func_800D0CA0(1); - D_801E6CE4 = D_801E6CE4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E6CE0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E6CE4 = D_801E6CE4 + 1; - if (D_801E6CE4 < 0x1E) { - return 0; - } - D_801E6CE4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E6D24; - extern s16 D_801E6D26; - extern s16 D_801E6D28; - extern s16 D_801E6D1C; - extern s16 D_801E6D1E; - extern s16 D_801E6D20; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E6D24, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E6D26, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E6D28, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E6D1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E6D1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E6D20, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E6CAC; -extern u16 D_801E6D2C; -extern u16 D_801E6D2E; -extern u16 D_801E6D30; -extern s16 D_801E7AB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E7AB0 = 0; - D_801E6CAC = 0; - D_801E6D2C = D_80126B5E; - D_801E6D2E = D_80126B62; - D_801E6D30 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B54[]; - extern s16 D_801E6D24; - extern s16 D_801E6D1C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E6D24; - s16 *p78C = &D_801E6D1C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E7AB0 = 1; - D_801E6CAC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E6CCC; - extern SV4_8017B368 D_801E6CD4; - extern s16 D_801E6D24; - extern s16 D_801E6D1C; - extern u16 D_80190B54; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E6CCC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E6CD4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E6D24) = loc0; - (*(SV4_8017B368 *)&D_801E6D1C) = loc1; - D_801E7AB0 = 1; - D_801E6CAC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B54[]; - extern s16 D_801E6D24; - extern s16 D_801E6D26; - extern s16 D_801E6D28; - extern s16 D_801E6D1C; - extern s16 D_801E6D1E; - extern s16 D_801E6D20; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E6D24; - s16 *p78C = &D_801E6D1C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E6D26; - v798 = D_801E6D28; - v78C = *p78C; - v78E = D_801E6D1E; - v790 = D_801E6D20; - __asm__ __volatile__(""); - D_801E7AB0 = 1; - D_801E6CAC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6CAC; -extern s16 D_801E6D24; -extern s16 D_801E6D26; -extern s16 D_801E6D28; -extern s16 D_801E6D1C; -extern s16 D_801E6D1E; -extern s16 D_801E6D20; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E6CAC = 0; - D_801E6D24 = (s16) D_80114F30; - D_801E6D26 = (s16) D_80114F34; - D_801E6D28 = (s16) D_80114F38; - D_801E6D1C = (s16) D_80114F24; - D_801E6D1E = (s16) D_80114F28; - D_801E6D20 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E6D3C; -extern s16 D_801E6D3E; -extern s16 D_801E6D40; -extern s16 D_801E6D44; -extern s16 D_801E6D46; -extern s16 D_801E6D48; - -void func_8017B824(void) { - D_801E6D3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E6D3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E6D40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E6D44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E6D46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E6D48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E6D3C; -extern s16 D_801E6D3E; -extern s16 D_801E6D40; -extern s16 D_801E6D44; -extern s16 D_801E6D46; -extern s16 D_801E6D48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E6D3C; - D_80114F34 = D_801E6D3E; - D_80114F38 = D_801E6D40; - D_80114F24 = D_801E6D44; - D_80114F28 = D_801E6D46; - D_80114F2C = D_801E6D48; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E6D24), src[8..15] -> (*(S8_8017B8E8 *)&D_801E6D1C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E6D24) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E6D1C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E6D2C; -extern u16 D_801E6D2E; -extern u16 D_801E6D30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6CAC; -extern short D_801E6D34; -extern short D_801E6D36; -extern short D_801E6D38; -extern s16 D_801E6D24; -extern s16 D_801E6D26; -extern s16 D_801E6D28; -extern s16 D_801E6D1C; -extern s16 D_801E6D1E; -extern s16 D_801E6D20; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E6D2C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E6D2E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E6D30); - (*(s16 *)&D_801E6D34) = buf[0]; - (*(s16 *)&D_801E6D36) = buf[1]; - (*(s16 *)&D_801E6D38) = buf[2]; - D_801E6D24 = D_80114F30 + buf[0]; - D_801E6CAC = 0; - D_801E6D26 = D_80114F34 + buf[1]; - D_801E6D28 = D_80114F38 + buf[2]; - D_801E6D1C = D_80114F24 + buf[0]; - D_801E6D1E = D_80114F28 + buf[1]; - D_801E6D20 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E6CCC; -extern SV4 D_801E6CD4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E6CD4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E6CCC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E6CD4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E6CD4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E6CCC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E6CD4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E6CF4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E6CF4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E6CAC; -extern s16 D_801E7AB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E6CAC = D_801E6CAC + 1; - if (D_801E6CAC >= 0x1F) { - D_801E7AB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E6CAC; -extern s16 D_801E7AB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6CAC = D_801E6CAC + 1; - if (0x18 < D_801E6CAC) { - func_8012A4BC(); - D_801E7AB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E6CAC; -extern void (*D_801E6CF0)(void); -extern short D_801E6D34; -extern short D_801E6D36; -extern short D_801E6D38; -extern s16 D_801E7AB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6CAC = D_801E6CAC + 1; - if (D_801E6CAC >= 0x19) { - if (D_801E6CF0 != 0) { - (*D_801E6CF0)(); - } else { - D_80114F30 = D_80114F30 + D_801E6D34; - D_80114F34 = D_80114F34 + D_801E6D36; - D_80114F38 = D_80114F38 + D_801E6D38; - D_80114F24 = D_80114F24 + D_801E6D34; - D_80114F28 = D_80114F28 + D_801E6D36; - D_80114F2C = D_80114F2C + D_801E6D38; - func_8012A4BC(); - } - D_801E7AB0 = 0; - } -} - - - -extern void (*D_80190BF4[])(void); - -void func_8017BE60(void *a0) { - D_80190BF4[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_80190C94[])(void); - -void func_8017BE9C(void *a0) { - D_80190C94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190C9C[])(void); - -void func_8017BED8(void *a0) { - D_80190C9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190CA4[])(void); - -void func_8017BF14(void *a0) { - D_80190CA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017BF50); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C094); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C100); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C1AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C1EC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C2B0); - - -extern void (*D_80190CC4[])(void); - -void func_8017C338(void *a0) { - D_80190CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C374); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C538); - -DEFINE_func_8017C5CC() /* dedup: shared engine-core @0x8017C5CC (src/shared) */ - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80190CB8; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80190CB8, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C6AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017C710); - - -extern void (*D_80190CE4[])(void); - -void func_8017D5F0(void *a0) { - D_80190CE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_80190CD4; - -void func_8017D62C(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190CD4 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ - -DEFINE_func_8017D6B0() /* dedup: shared engine-core @0x8017D6B0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017D6EC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017D77C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017D9B8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DA08); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DAC4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DBDC); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801E6FE8; -extern u16 D_80190D24[]; -extern u16 D_801E6FEC[]; -extern s32 D_80190D44; - -extern void func_800183E0(s32 a0); - -void func_8017DC0C(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80190D24; - base = D_801E6FE8 >> 8; - p = D_801E6FEC; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80190D44); - D_801E6FE8 = D_801E6FE8 + 0x100; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DC98); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DCE8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DD0C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DE2C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DE4C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017DEA0); - - -extern void (*D_80190D64[])(void); - -void func_8017DF34(void *a0) { - D_80190D64[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D6C[])(void); - -void func_8017DF70(void *a0) { - D_80190D6C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D78[])(void); - -void func_8017DFAC(void *a0) { - D_80190D78[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D84[])(void); - -void func_8017DFE8(void *a0) { - D_80190D84[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern s32 D_80127050; - -void func_8017E024(void) { - D_80127050 = 1; -} - - - -extern void (*D_80191060[])(void); - -void func_8017E038(void *a0) { - D_80191060[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_8017E074() /* dedup: shared engine-core @0x8017E074 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E088); - - -extern void (*D_80191068[])(void); - -void func_8017E0C0(void *a0) { - D_80191068[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_8017E0FC() /* dedup: shared engine-core @0x8017E0FC (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E110); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E130); - - -extern void (*D_80191070[])(void); - -void func_8017E1F4(void *a0) { - D_80191070[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E230); - -DEFINE_func_8017E264() /* dedup: shared engine-core @0x8017E264 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E26C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E3AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E5A0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E628); - - -extern void (*D_801912A8[])(void); - -void func_8017E760(void *a0) { - D_801912A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801B9B50; - void func_8017E79C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801B9B50); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E7CC); - - -extern void (*D_801912C8[])(void); - -void func_8017E810(void *a0) { - D_801912C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E84C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E878); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E8A4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E8FC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E950); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E99C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017E9C0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EA0C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EAAC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EAFC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EBA0); - - -extern void func_8017E7CC(void); - void func_8017EBE0(u8 *a0) { - if (*(u16 *)((s32)a0 + 0x34) == 1) { - func_8017E7CC(); - } - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EC10); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017ECF4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EDA4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017EE6C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F02C); - -DEFINE_func_8017F058() /* dedup: shared engine-core @0x8017F058 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F094); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F0C0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F0D8); - - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017F108(void) { - func_80029124(0x10C, 0); - func_80029124(0x10D, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F138); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F174); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F1A8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F224); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F28C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F2DC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F35C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F418); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F500); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F564); - - -extern void (*D_801916E4[])(void); - -void func_8017F5BC(void *a0) { - D_801916E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F5F8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F6D8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F7B8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F898); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017F978); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017FA34(void) { - func_80029124(0x107, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FA58); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FAAC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FB0C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FBB0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FC58); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FCD8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FD28); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FD88); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FDE4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FE54); - - -extern void (*D_80191814[])(void); - -void func_8017FF34(void *a0) { - D_80191814[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8017FF70); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018001C); - -DEFINE_func_801800E0() /* dedup: shared engine-core @0x801800E0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018011C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180134); - -DEFINE_func_8018015C() /* dedup: shared engine-core @0x8018015C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180164); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180190); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801801E0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180284); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018034C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018042C); - - -extern void (*D_801919C4[])(void); - -void func_8018048C(void *a0) { - D_801919C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801804C8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180504); - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80180544(void) { - if ((func_80029178(0x110) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180580); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801805C0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180618); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018067C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801806CC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180740); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180814); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180888); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801808FC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180954); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801809DC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180A08); - - -extern void (*D_80191A80[])(void); - -void func_80180B6C(void *a0) { - D_80191A80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180BA8); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191A20; - void func_80180C0C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_80191A20); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180C38); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180CC0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180D38); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180E28); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180EE8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80180F7C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181020); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181090); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181124); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801811F4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181244); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181270); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801812D0); - - -extern void (*D_80191B20[])(void); - -void func_801812FC(void *a0) { - D_80191B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181338); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181364); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801813A4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181400); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181474); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801814C4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181564); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801815DC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181648); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801816A8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018170C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181738); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018178C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801817B8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181804); - - -extern void (*D_80191BDC[])(void); - -void func_80181924(void *a0) { - D_80191BDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181960); - -DEFINE_func_80181998() /* dedup: shared engine-core @0x80181998 (src/shared) */ - - -DEFINE_func_801819B0() /* dedup: shared engine-core @0x801819B0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801819C8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181A28); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181A68); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181AA8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181B34); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181B74); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181BEC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181C78); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181CB8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181DC4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181E04); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181EFC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181F70); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80181FE4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018203C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182120); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_80191C08; - void func_801821A8(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80184CB8((s32 *)a0, (s32)&D_80191C08); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801821D4); - -DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182378); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191C48; - void func_80182490(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC((s32 *)a0, (s32)&D_80191C48); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801824BC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182544); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801825BC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801826AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018276C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182800); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801828B0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182920); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801829AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182A7C); - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191EB0; - void func_80182ACC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0xB; - func_80178CBC(a0, &D_80191EB0); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182AF8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182B58); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182BCC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182C24); - - -extern void (*D_80192014[])(void); - -void func_80182C98(void *a0) { - D_80192014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182CD4); - - -extern s32 D_801D7E84; -extern s32 D_801D6C98; - -void func_80182D0C(void) { - D_801D6C98 = D_801D7E84; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182D24); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182D84); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80182DC4(void) { - if ((func_80029178(0x113) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182E00); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182E40); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182ED8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182F18); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80182F88); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183024); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801830F4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801831AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801831D8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183248); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801832A8); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_80192030; - void func_8018330C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x8; - func_80184CB8((s32 *)a0, (s32)&D_80192030); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183338); - - -extern void (*D_8019211C[])(void); - -void func_80183438(void *a0) { - D_8019211C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183474); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801834A0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801834CC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801834F8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183538); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183578); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183604); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183674); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801836C0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018370C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018375C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801837A8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801837EC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183838); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183890); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801838E0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183938); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801839A8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183A08); - - -extern void (*D_80192230[])(void); - -void func_80183A68(void *a0) { - D_80192230[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801921B8; - void func_80183AA4(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_801921B8); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183AD0); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80183B10(void) { - if ((func_80029178(0x115) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183B4C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183B8C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183BC4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183C28); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183C78); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183CBC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183D80); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_8019224C; - void func_80183DF4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 1; - ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_8019224C); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183E20); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183E6C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183FA8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80183FF4); - - -extern void (*D_80192414[])(void); - -void func_80184130(void *a0) { - D_80192414[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018416C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801841AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801841EC); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_8018422C(void) { - if ((func_80029178(0x116) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); - return 1; - } - return 0; - } - - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801922E4; - void func_80184268(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x8; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_801922E4); - } - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_8019232C; - void func_80184298(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xE; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(void *, s32))func_80178CBC)(a0, &D_8019232C); - } - - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80192334; - void func_801842C8(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_80192334); - } - - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801923A4; - void func_801842F8(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xb; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_801923A4); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184328); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184374); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801843C4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184410); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184460); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801844AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184504); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184560); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801845B8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018465C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184738); - - -void func_8018479C(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - - -void func_801847AC(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801847BC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184858); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801848B0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801848DC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184960); - - -extern s32 func_80184960(s32 arg); -extern void func_80184AC4(void *a0); - -void func_80184A90(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_80184960((s32)a0); - func_80184AC4(a0); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184AC4); - - -extern short D_800BA2BA; - s32 func_80184B04(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801B8720[])(void); - -void func_80184B2C(void *a0) { - D_801B8720[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80184B68() /* dedup: shared engine-core @0x80184B68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184B70); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184BAC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184BD0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184C28); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184C90); - -DEFINE_func_80184CB0() /* dedup: shared engine-core @0x80184CB0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184CB8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184D00); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184D5C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184DD0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184E44); - - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_80184EA0(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184ED4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80184FA4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018516C); - - -extern void (*D_801B8740[])(void); - -void func_801851B4(void *a0) { - D_801B8740[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801851F0() /* dedup: shared engine-core @0x801851F0 (src/shared) */ - -DEFINE_func_801851F8() /* dedup: shared engine-core @0x801851F8 (src/shared) */ - -DEFINE_func_80185200() /* dedup: shared engine-core @0x80185200 (src/shared) */ - -DEFINE_func_80185208() /* dedup: shared engine-core @0x80185208 (src/shared) */ - -DEFINE_func_80185210() /* dedup: shared engine-core @0x80185210 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185218); - -DEFINE_func_8018525C() /* dedup: shared engine-core @0x8018525C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185264); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801852EC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801854C4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185664); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801856E0); - -extern s32 func_80185EEC(void); - void func_801857AC(void) { - func_80185EEC(); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801857CC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018589C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185904); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185978); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801859D8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185A58); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185AB0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185B10); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185B58); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185BA8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185BE0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185C6C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185D10); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185D70); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185EEC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185F20); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185F54); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80185FB8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018602C); - -DEFINE_func_80186084() /* dedup: shared engine-core @0x80186084 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801860C0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018613C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018625C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801862A8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801863B4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80186410); - -extern s16 D_801E7030; - s32 func_80186450(void) { - return D_801E7030; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80186460); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801864AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018651C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80186570); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80186E24); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801877B0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801878E8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801880EC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80188428); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80188778); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_801889B8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80188B84); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80188E1C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189214); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189540); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189DDC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189E14); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189E54); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_80189EA0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A0B4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A168); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A1D0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A224); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A2E0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A6C8); - -DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A77C); - -DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ - - - -extern void (*D_801E0524[])(void); - -void func_8018A8D4(void *a0) { - D_801E0524[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0534[])(void); - -void func_8018A910(void *a0) { - D_801E0534[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0544[])(void); - -void func_8018A94C(void *a0) { - D_801E0544[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018A990); - -DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018AB78); - - -extern s32 D_801E01F0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ACD4(void) { - D_801E7980 = &D_801E01F0; - func_8018A168(0x474, 0x4B0); -} - - -extern void func_8018A168(s32 arg0, s32 arg1); - extern s32 D_801E0228; - extern s32 D_801E7980; - void func_8018AD08(void) { - D_801E7980 = &D_801E0228; - func_8018A168(0x474, 0x4EC); - } - - - -extern s32 D_801E0260; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD3C(void) { - D_801E7980 = &D_801E0260; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E0288; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD70(void) { - D_801E7980 = &D_801E0288; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E02C0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ADA4(void) { - D_801E7980 = &D_801E02C0; - func_8018A168(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018ADD8); - - -extern s32 D_801E0338; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AE4C(void) { - D_801E7980 = &D_801E0338; - func_8018A168(0x474, 0x1A4); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018AE80); - - -extern s32 D_801E0390; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AECC(void) { - D_801E7980 = &D_801E0390; - func_8018A168(0x12c, 0x1A4); -} - - -DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ - - - -extern s32 D_801E0440; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AF34(void) { - D_801E7980 = &D_801E0440; - func_8018A168(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018AF68); - - -extern s32 D_801E0488; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AFB4(void) { - D_801E7980 = &D_801E0488; - func_8018A168(0x564, 0x1A4); -} - - -DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018AFF0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B0AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B158); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B19C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B2B8); - -extern void func_8012B414(int a0); - void func_8018B354(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B388); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B400); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B448); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B4EC); - -DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ - - - -extern void (*D_801E056C[])(void); - -void func_8018B570(void *a0) { - D_801E056C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B5AC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B614); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B660); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B6A0); - -DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ - - -extern void (*D_801E0580[])(void); - -void func_8018B6F4(void *a0) { - D_801E0580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B730); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B798); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B7FC); - -DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ - - -extern void (*D_801E0594[])(void); - -void func_8018B874(void *a0) { - D_801E0594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B8B0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B904); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B948); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018B988); - -DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ - - - -extern void (*D_801E05A8[])(void); - -void func_8018B9DC(void *a0) { - D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BA18); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BA80); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BAE4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BB50); - - -extern void (*D_801E05B4[])(void); - -void func_8018BC3C(void *a0) { - D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BC78); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BCDC); - - -extern void (*D_801E05BC[])(void); - -void func_8018BD58(void *a0) { - D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018BD94(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BDA4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BDE0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BE0C); - - -extern void (*D_801E0690[])(void); - -void func_8018BE38(void *a0) { - D_801E0690[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BE74); - - - -extern s32 func_8014CB1C(void); - -s32 func_8018BEE8(void) { - return (u32)func_8014CB1C() != 0; -} - - -DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801E0648; - void func_8018BF34(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_801E0648); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BF64); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018BFCC); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C038); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C0B0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C114); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C1E0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C24C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C278); - - -extern void (*D_801E077C[])(void); - -void func_8018C368(void *a0) { - D_801E077C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C3A4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C3D0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C3F0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C494); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C518); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C5AC); - - -extern void (*D_801E3AF4[])(void); - -void func_8018C5FC(void *a0) { - D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C638); - -DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C6A4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C6F0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C730); - - -extern void (*D_801E3BA4[])(void); - -void func_8018C78C(void *a0) { - D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C7C8); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C7F0); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C8A8); - - -extern void func_8012B2CC(s32 arg); - void func_8018C90C(void *arg0) { - s32 *p = *(s32 **)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 2; - *(s16 *)((char *)p + 0x12) = -0x600; - func_8012B2CC((s32)arg0); - } - - -extern void func_8012B2CC(s32 arg); - void func_8018C93C(void *a0) { - s32 v1 = *(s32 *)((char *)a0 + 0x20); - *(s16 *)((char *)a0 + 0x2) = 0x4; - *(s16 *)(v1 + 0x12) = 0x600; - func_8012B2CC((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018C96C); - - -extern void (*D_801E3CEC[])(void); - -void func_8018CADC(void *a0) { - D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CB18); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CB94); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CC04); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CC1C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CC40); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CD74); - -DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ - -DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801734BC", func_8018CDEC); - diff --git a/src/ov_SC04_018/ov_SC04_018_jr_80178D40.c b/src/ov_SC04_018/ov_SC04_018_jr_80178D40.c new file mode 100644 index 000000000..86f1e9cc8 --- /dev/null +++ b/src/ov_SC04_018/ov_SC04_018_jr_80178D40.c @@ -0,0 +1,5799 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801903FC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E6018; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801903F0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80190434[]; +extern unsigned short D_8019043C[]; +extern unsigned short D_80190444[]; +extern unsigned char D_801E6020[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E6018; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8019044C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E6154; +extern M2C_UNK D_801E6158; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E60E0; +extern void (*D_8019047C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E615C[]; +extern u8 D_801E6164[]; +extern u8 D_801E6114[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190484[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801904A0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801904A8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190510[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801904B4; +extern u8 D_801904C0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190544[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8019054C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801905A0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801905D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801905C4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801905F0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80190668[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190670[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80190678[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190680[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80190688[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190690[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8019069C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801906A8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801906B4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801906C4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801906D4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801906DC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801906E4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801906EC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801906F4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801906FC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80190704[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8019070C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190714[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8019071C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190724[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8019072C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190734[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8019073C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190744[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8019074C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190754[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8019075C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190764[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8019076C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190774[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8019077C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190784[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801907C8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8019078C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801907F8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190834[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8019088C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8019089C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801908A4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80190A0C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190A18[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E52AC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E7AB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern short D_801E7B24; +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E7B24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E7B24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E6898 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E7B24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E7A68 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E7A68 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E7B24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E7B24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E6CF4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E6898; + extern s32 D_801E689C; + extern s32 D_801E6CB0; + extern s16 D_801E6CB4; + extern s16 D_801E6CB8; + extern s16 D_801E6CBC; + extern s16 D_801E6CC0; + extern s32 D_801E6CC8; + extern s32 D_801E6CCC; + extern s32 D_801E6CDC; + extern s16 D_801E6CE0; + extern s16 D_801E6CE4; + extern s32 D_801E6CE8; + extern s32 D_801E6CF0; + extern s32 D_801E6CF4[10]; + extern s32 D_801E7998; + extern s16 D_801E7A68; + extern s32 D_801E7AAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E7A68; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E6CBC, D_801E6CC0 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 2; + break; + case 0: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E6CB4, D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E7998 != 0) { + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E6CB4, D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + } else { + (*(s16*)&D_801E7B24) = 3; + } + break; + case 0x32: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E6CB4, + D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + break; + case 2: + func_80179B28(D_801E6CB0); + if (D_801E6CC8 != 0) { + D_801E6898 = D_801E6CC8; + D_801E6CC8 = 0; + (*(s16*)&D_801E7B24) = 3; + return; + } + (*(s16*)&D_801E7B24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1B: + D_801E6CE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E7B24) = 4; + D_801E689C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E7B24) = 5; + D_801E6CDC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E6CDC = (s32)func_8017A3B0; + (*(s16*)&D_801E7B24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x24: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E7B24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E7B24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E7B24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4E: + D_801E6CF0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x2B: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E7AAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x34: + (*(s16*)&D_801E7B24) = 3; + D_801E6898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E6CC8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E7B24) = 3; + D_801E6898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E7B24) = 3; + D_801E6898 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E6898 = *(s32 *)(D_801E6898 + 4); + return; + case 0x37: + (*(s16*)&D_801E7B24) = 3; + D_801E6CB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6CB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E7B24) = 3; + D_801E6CBC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6CC0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E7B24) = 3; + D_801E6CB4 = w1; + D_801E6CB8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E7B24) = 3; + D_801E6CBC = w2; + D_801E6CC0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x43: + D_801E6CDC = (s32)func_8017A3D8; + D_801E6CE4 = 0; + (*(s16*)&D_801E7B24) = 5; + D_801E6CE0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E6CF4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E7B24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E6CF4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E7B24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E6CF4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E7B24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E6CF4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E7B24) = 3; + break; + default: + break; + } +Lend: + D_801E6898 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E6CC4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E6CC4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E6CC4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E6CC4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E6CEC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E6CEC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E6CA8; + +s32 func_8017A3B0(void) { + switch (D_801E6CA8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E6CE4; +extern short D_801E6CE0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E6CE4) { + case 0: + func_800D0CA0(1); + D_801E6CE4 = D_801E6CE4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E6CE0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E6CE4 = D_801E6CE4 + 1; + if (D_801E6CE4 < 0x1E) { + return 0; + } + D_801E6CE4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E6D24; + extern s16 D_801E6D26; + extern s16 D_801E6D28; + extern s16 D_801E6D1C; + extern s16 D_801E6D1E; + extern s16 D_801E6D20; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E6D24, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E6D26, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E6D28, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E6D1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E6D1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E6D20, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E6CAC; +extern u16 D_801E6D2C; +extern u16 D_801E6D2E; +extern u16 D_801E6D30; +extern s16 D_801E7AB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E7AB0 = 0; + D_801E6CAC = 0; + D_801E6D2C = D_80126B5E; + D_801E6D2E = D_80126B62; + D_801E6D30 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B54[]; + extern s16 D_801E6D24; + extern s16 D_801E6D1C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E6D24; + s16 *p78C = &D_801E6D1C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E7AB0 = 1; + D_801E6CAC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E6CCC; + extern SV4_8017B368 D_801E6CD4; + extern s16 D_801E6D24; + extern s16 D_801E6D1C; + extern u16 D_80190B54; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E6CCC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E6CD4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E6D24) = loc0; + (*(SV4_8017B368 *)&D_801E6D1C) = loc1; + D_801E7AB0 = 1; + D_801E6CAC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B54[]; + extern s16 D_801E6D24; + extern s16 D_801E6D26; + extern s16 D_801E6D28; + extern s16 D_801E6D1C; + extern s16 D_801E6D1E; + extern s16 D_801E6D20; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E6D24; + s16 *p78C = &D_801E6D1C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E6D26; + v798 = D_801E6D28; + v78C = *p78C; + v78E = D_801E6D1E; + v790 = D_801E6D20; + __asm__ __volatile__(""); + D_801E7AB0 = 1; + D_801E6CAC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6CAC; +extern s16 D_801E6D24; +extern s16 D_801E6D26; +extern s16 D_801E6D28; +extern s16 D_801E6D1C; +extern s16 D_801E6D1E; +extern s16 D_801E6D20; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E6CAC = 0; + D_801E6D24 = (s16) D_80114F30; + D_801E6D26 = (s16) D_80114F34; + D_801E6D28 = (s16) D_80114F38; + D_801E6D1C = (s16) D_80114F24; + D_801E6D1E = (s16) D_80114F28; + D_801E6D20 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E6D3C; +extern s16 D_801E6D3E; +extern s16 D_801E6D40; +extern s16 D_801E6D44; +extern s16 D_801E6D46; +extern s16 D_801E6D48; + +void func_8017B824(void) { + D_801E6D3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E6D3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E6D40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E6D44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E6D46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E6D48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E6D3C; +extern s16 D_801E6D3E; +extern s16 D_801E6D40; +extern s16 D_801E6D44; +extern s16 D_801E6D46; +extern s16 D_801E6D48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E6D3C; + D_80114F34 = D_801E6D3E; + D_80114F38 = D_801E6D40; + D_80114F24 = D_801E6D44; + D_80114F28 = D_801E6D46; + D_80114F2C = D_801E6D48; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E6D24), src[8..15] -> (*(S8_8017B8E8 *)&D_801E6D1C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E6D24) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E6D1C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E6D2C; +extern u16 D_801E6D2E; +extern u16 D_801E6D30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6CAC; +extern short D_801E6D34; +extern short D_801E6D36; +extern short D_801E6D38; +extern s16 D_801E6D24; +extern s16 D_801E6D26; +extern s16 D_801E6D28; +extern s16 D_801E6D1C; +extern s16 D_801E6D1E; +extern s16 D_801E6D20; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E6D2C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E6D2E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E6D30); + (*(s16 *)&D_801E6D34) = buf[0]; + (*(s16 *)&D_801E6D36) = buf[1]; + (*(s16 *)&D_801E6D38) = buf[2]; + D_801E6D24 = D_80114F30 + buf[0]; + D_801E6CAC = 0; + D_801E6D26 = D_80114F34 + buf[1]; + D_801E6D28 = D_80114F38 + buf[2]; + D_801E6D1C = D_80114F24 + buf[0]; + D_801E6D1E = D_80114F28 + buf[1]; + D_801E6D20 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E6CCC; +extern SV4 D_801E6CD4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E6CD4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E6CCC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E6CD4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E6CD4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E6CCC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E6CD4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E6CF4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E6CF4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E6CAC; +extern s16 D_801E7AB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E6CAC = D_801E6CAC + 1; + if (D_801E6CAC >= 0x1F) { + D_801E7AB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E6CAC; +extern s16 D_801E7AB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6CAC = D_801E6CAC + 1; + if (0x18 < D_801E6CAC) { + func_8012A4BC(); + D_801E7AB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E6CAC; +extern void (*D_801E6CF0)(void); +extern short D_801E6D34; +extern short D_801E6D36; +extern short D_801E6D38; +extern s16 D_801E7AB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6CAC = D_801E6CAC + 1; + if (D_801E6CAC >= 0x19) { + if (D_801E6CF0 != 0) { + (*D_801E6CF0)(); + } else { + D_80114F30 = D_80114F30 + D_801E6D34; + D_80114F34 = D_80114F34 + D_801E6D36; + D_80114F38 = D_80114F38 + D_801E6D38; + D_80114F24 = D_80114F24 + D_801E6D34; + D_80114F28 = D_80114F28 + D_801E6D36; + D_80114F2C = D_80114F2C + D_801E6D38; + func_8012A4BC(); + } + D_801E7AB0 = 0; + } +} + + + +extern void (*D_80190BF4[])(void); + +void func_8017BE60(void *a0) { + D_80190BF4[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_80190C94[])(void); + +void func_8017BE9C(void *a0) { + D_80190C94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190C9C[])(void); + +void func_8017BED8(void *a0) { + D_80190C9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190CA4[])(void); + +void func_8017BF14(void *a0) { + D_80190CA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017BF50); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C094); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C100); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C1AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C1EC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C2B0); + + +extern void (*D_80190CC4[])(void); + +void func_8017C338(void *a0) { + D_80190CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C374); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C538); + +DEFINE_func_8017C5CC() /* dedup: shared engine-core @0x8017C5CC (src/shared) */ + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80190CB8; + +void func_8017C608(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80190CB8, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C6AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017C710); + + +extern void (*D_80190CE4[])(void); + +void func_8017D5F0(void *a0) { + D_80190CE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80190CD4; + +void func_8017D62C(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190CD4 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ + +DEFINE_func_8017D6B0() /* dedup: shared engine-core @0x8017D6B0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017D6EC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017D77C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017D9B8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DA08); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DAC4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DBDC); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801E6FE8; +extern u16 D_80190D24[]; +extern u16 D_801E6FEC[]; +extern s32 D_80190D44; + +extern void func_800183E0(s32 a0); + +void func_8017DC0C(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80190D24; + base = D_801E6FE8 >> 8; + p = D_801E6FEC; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80190D44); + D_801E6FE8 = D_801E6FE8 + 0x100; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DC98); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DCE8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DD0C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DE2C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DE4C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017DEA0); + + +extern void (*D_80190D64[])(void); + +void func_8017DF34(void *a0) { + D_80190D64[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D6C[])(void); + +void func_8017DF70(void *a0) { + D_80190D6C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D78[])(void); + +void func_8017DFAC(void *a0) { + D_80190D78[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D84[])(void); + +void func_8017DFE8(void *a0) { + D_80190D84[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern s32 D_80127050; + +void func_8017E024(void) { + D_80127050 = 1; +} + + + +extern void (*D_80191060[])(void); + +void func_8017E038(void *a0) { + D_80191060[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_8017E074() /* dedup: shared engine-core @0x8017E074 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E088); + + +extern void (*D_80191068[])(void); + +void func_8017E0C0(void *a0) { + D_80191068[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_8017E0FC() /* dedup: shared engine-core @0x8017E0FC (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E110); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E130); + + +extern void (*D_80191070[])(void); + +void func_8017E1F4(void *a0) { + D_80191070[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E230); + +DEFINE_func_8017E264() /* dedup: shared engine-core @0x8017E264 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E26C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E3AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E5A0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E628); + + +extern void (*D_801912A8[])(void); + +void func_8017E760(void *a0) { + D_801912A8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801B9B50; + void func_8017E79C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801B9B50); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E7CC); + + +extern void (*D_801912C8[])(void); + +void func_8017E810(void *a0) { + D_801912C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E84C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E878); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E8A4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E8FC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E950); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E99C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017E9C0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EA0C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EAAC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EAFC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EBA0); + + +extern void func_8017E7CC(void); + void func_8017EBE0(u8 *a0) { + if (*(u16 *)((s32)a0 + 0x34) == 1) { + func_8017E7CC(); + } + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EC10); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017ECF4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EDA4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017EE6C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F02C); + +DEFINE_func_8017F058() /* dedup: shared engine-core @0x8017F058 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F094); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F0C0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F0D8); + + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017F108(void) { + func_80029124(0x10C, 0); + func_80029124(0x10D, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F138); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F174); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F1A8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F224); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F28C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F2DC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F35C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F418); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F500); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F564); + + +extern void (*D_801916E4[])(void); + +void func_8017F5BC(void *a0) { + D_801916E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F5F8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F6D8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F7B8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F898); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017F978); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017FA34(void) { + func_80029124(0x107, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FA58); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FAAC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FB0C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FBB0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FC58); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FCD8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FD28); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FD88); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FDE4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FE54); + + +extern void (*D_80191814[])(void); + +void func_8017FF34(void *a0) { + D_80191814[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8017FF70); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018001C); + +DEFINE_func_801800E0() /* dedup: shared engine-core @0x801800E0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018011C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180134); + +DEFINE_func_8018015C() /* dedup: shared engine-core @0x8018015C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180164); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180190); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801801E0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180284); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018034C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018042C); + + +extern void (*D_801919C4[])(void); + +void func_8018048C(void *a0) { + D_801919C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801804C8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180504); + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80180544(void) { + if ((func_80029178(0x110) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180580); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801805C0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180618); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018067C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801806CC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180740); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180814); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180888); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801808FC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180954); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801809DC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180A08); + + +extern void (*D_80191A80[])(void); + +void func_80180B6C(void *a0) { + D_80191A80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180BA8); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191A20; + void func_80180C0C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_80191A20); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180C38); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180CC0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180D38); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180E28); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180EE8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80180F7C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181020); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181090); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181124); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801811F4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181244); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181270); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801812D0); + + +extern void (*D_80191B20[])(void); + +void func_801812FC(void *a0) { + D_80191B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181338); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181364); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801813A4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181400); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181474); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801814C4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181564); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801815DC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181648); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801816A8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018170C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181738); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018178C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801817B8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181804); + + +extern void (*D_80191BDC[])(void); + +void func_80181924(void *a0) { + D_80191BDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181960); + +DEFINE_func_80181998() /* dedup: shared engine-core @0x80181998 (src/shared) */ + + +DEFINE_func_801819B0() /* dedup: shared engine-core @0x801819B0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801819C8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181A28); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181A68); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181AA8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181B34); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181B74); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181BEC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181C78); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181CB8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181DC4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181E04); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181EFC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181F70); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80181FE4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018203C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182120); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_80191C08; + void func_801821A8(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + func_80184CB8((s32 *)a0, (s32)&D_80191C08); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801821D4); + +DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182378); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191C48; + void func_80182490(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_80178CBC((s32 *)a0, (s32)&D_80191C48); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801824BC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182544); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801825BC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801826AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018276C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182800); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801828B0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182920); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801829AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182A7C); + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80191EB0; + void func_80182ACC(void *a0) { + *(short *)((char *)a0 + 0x2) = 0xB; + func_80178CBC(a0, &D_80191EB0); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182AF8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182B58); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182BCC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182C24); + + +extern void (*D_80192014[])(void); + +void func_80182C98(void *a0) { + D_80192014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182CD4); + + +extern s32 D_801D7E84; +extern s32 D_801D6C98; + +void func_80182D0C(void) { + D_801D6C98 = D_801D7E84; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182D24); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182D84); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80182DC4(void) { + if ((func_80029178(0x113) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182E00); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182E40); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182ED8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182F18); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80182F88); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183024); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801830F4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801831AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801831D8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183248); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801832A8); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_80192030; + void func_8018330C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x8; + func_80184CB8((s32 *)a0, (s32)&D_80192030); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183338); + + +extern void (*D_8019211C[])(void); + +void func_80183438(void *a0) { + D_8019211C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183474); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801834A0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801834CC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801834F8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183538); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183578); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183604); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183674); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801836C0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018370C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018375C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801837A8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801837EC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183838); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183890); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801838E0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183938); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801839A8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183A08); + + +extern void (*D_80192230[])(void); + +void func_80183A68(void *a0) { + D_80192230[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801921B8; + void func_80183AA4(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_801921B8); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183AD0); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80183B10(void) { + if ((func_80029178(0x115) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183B4C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183B8C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183BC4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183C28); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183C78); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183CBC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183D80); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_8019224C; + void func_80183DF4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 1; + ((void (*)(s32, s32))func_80184CB8)((int)arg0, (int)&D_8019224C); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183E20); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183E6C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183FA8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80183FF4); + + +extern void (*D_80192414[])(void); + +void func_80184130(void *a0) { + D_80192414[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018416C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801841AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801841EC); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_8018422C(void) { + if ((func_80029178(0x116) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); + return 1; + } + return 0; + } + + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801922E4; + void func_80184268(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x8; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_801922E4); + } + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_8019232C; + void func_80184298(short *a0) { + *(short *)((char *)a0 + 0x2) = 0xE; + *(short *)((char *)a0 + 0x34) = 0; + ((void (*)(void *, s32))func_80178CBC)(a0, &D_8019232C); + } + + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_80192334; + void func_801842C8(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_80192334); + } + + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801923A4; + void func_801842F8(short *a0) { + *(short *)((char *)a0 + 0x2) = 0xb; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_801923A4); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184328); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184374); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801843C4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184410); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184460); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801844AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184504); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184560); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801845B8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018465C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184738); + + +void func_8018479C(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + + +void func_801847AC(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801847BC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184858); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801848B0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801848DC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184960); + + +extern s32 func_80184960(s32 arg); +extern void func_80184AC4(void *a0); + +void func_80184A90(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_80184960((s32)a0); + func_80184AC4(a0); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184AC4); + + +extern short D_800BA2BA; + s32 func_80184B04(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801B8720[])(void); + +void func_80184B2C(void *a0) { + D_801B8720[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80184B68() /* dedup: shared engine-core @0x80184B68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184B70); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184BAC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184BD0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184C28); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184C90); + +DEFINE_func_80184CB0() /* dedup: shared engine-core @0x80184CB0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184CB8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184D00); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184D5C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184DD0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184E44); + + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_80184EA0(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184ED4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80184FA4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018516C); + + +extern void (*D_801B8740[])(void); + +void func_801851B4(void *a0) { + D_801B8740[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801851F0() /* dedup: shared engine-core @0x801851F0 (src/shared) */ + +DEFINE_func_801851F8() /* dedup: shared engine-core @0x801851F8 (src/shared) */ + +DEFINE_func_80185200() /* dedup: shared engine-core @0x80185200 (src/shared) */ + +DEFINE_func_80185208() /* dedup: shared engine-core @0x80185208 (src/shared) */ + +DEFINE_func_80185210() /* dedup: shared engine-core @0x80185210 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185218); + +DEFINE_func_8018525C() /* dedup: shared engine-core @0x8018525C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185264); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801852EC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801854C4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185664); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801856E0); + +extern s32 func_80185EEC(void); + void func_801857AC(void) { + func_80185EEC(); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801857CC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018589C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185904); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185978); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801859D8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185A58); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185AB0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185B10); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185B58); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185BA8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185BE0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185C6C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185D10); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185D70); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185EEC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185F20); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185F54); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80185FB8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018602C); + +DEFINE_func_80186084() /* dedup: shared engine-core @0x80186084 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801860C0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018613C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018625C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801862A8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801863B4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80186410); + +extern s16 D_801E7030; + s32 func_80186450(void) { + return D_801E7030; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80186460); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801864AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018651C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80186570); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80186E24); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801877B0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801878E8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801880EC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80188428); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80188778); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_801889B8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80188B84); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80188E1C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189214); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189540); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189DDC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189E14); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189E54); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_80189EA0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A0B4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A168); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A1D0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A224); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A2E0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A6C8); + +DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A77C); + +DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ + + + +extern void (*D_801E0524[])(void); + +void func_8018A8D4(void *a0) { + D_801E0524[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0534[])(void); + +void func_8018A910(void *a0) { + D_801E0534[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0544[])(void); + +void func_8018A94C(void *a0) { + D_801E0544[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018A990); + +DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018AB78); + + +extern s32 D_801E01F0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ACD4(void) { + D_801E7980 = &D_801E01F0; + func_8018A168(0x474, 0x4B0); +} + + +extern void func_8018A168(s32 arg0, s32 arg1); + extern s32 D_801E0228; + extern s32 D_801E7980; + void func_8018AD08(void) { + D_801E7980 = &D_801E0228; + func_8018A168(0x474, 0x4EC); + } + + + +extern s32 D_801E0260; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD3C(void) { + D_801E7980 = &D_801E0260; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E0288; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD70(void) { + D_801E7980 = &D_801E0288; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E02C0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ADA4(void) { + D_801E7980 = &D_801E02C0; + func_8018A168(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018ADD8); + + +extern s32 D_801E0338; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AE4C(void) { + D_801E7980 = &D_801E0338; + func_8018A168(0x474, 0x1A4); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018AE80); + + +extern s32 D_801E0390; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AECC(void) { + D_801E7980 = &D_801E0390; + func_8018A168(0x12c, 0x1A4); +} + + +DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ + + + +extern s32 D_801E0440; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AF34(void) { + D_801E7980 = &D_801E0440; + func_8018A168(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018AF68); + + +extern s32 D_801E0488; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AFB4(void) { + D_801E7980 = &D_801E0488; + func_8018A168(0x564, 0x1A4); +} + + +DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018AFF0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B0AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B158); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B19C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B2B8); + +extern void func_8012B414(int a0); + void func_8018B354(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B388); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B400); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B448); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B4EC); + +DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ + + + +extern void (*D_801E056C[])(void); + +void func_8018B570(void *a0) { + D_801E056C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B5AC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B614); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B660); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B6A0); + +DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ + + +extern void (*D_801E0580[])(void); + +void func_8018B6F4(void *a0) { + D_801E0580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B730); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B798); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B7FC); + +DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ + + +extern void (*D_801E0594[])(void); + +void func_8018B874(void *a0) { + D_801E0594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B8B0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B904); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B948); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018B988); + +DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ + + + +extern void (*D_801E05A8[])(void); + +void func_8018B9DC(void *a0) { + D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BA18); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BA80); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BAE4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BB50); + + +extern void (*D_801E05B4[])(void); + +void func_8018BC3C(void *a0) { + D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BC78); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BCDC); + + +extern void (*D_801E05BC[])(void); + +void func_8018BD58(void *a0) { + D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018BD94(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BDA4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BDE0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BE0C); + + +extern void (*D_801E0690[])(void); + +void func_8018BE38(void *a0) { + D_801E0690[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BE74); + + + +extern s32 func_8014CB1C(void); + +s32 func_8018BEE8(void) { + return (u32)func_8014CB1C() != 0; +} + + +DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ + + +extern void func_80178CBC(s32 *a0, s32 a1); + extern short D_801E0648; + void func_8018BF34(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(short *)((char *)a0 + 0x34) = 0; + func_80178CBC((s32 *)a0, (s32)&D_801E0648); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BF64); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018BFCC); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C038); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C0B0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C114); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C1E0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C24C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C278); + + +extern void (*D_801E077C[])(void); + +void func_8018C368(void *a0) { + D_801E077C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C3A4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C3D0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C3F0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C494); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C518); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C5AC); + + +extern void (*D_801E3AF4[])(void); + +void func_8018C5FC(void *a0) { + D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C638); + +DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C6A4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C6F0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C730); + + +extern void (*D_801E3BA4[])(void); + +void func_8018C78C(void *a0) { + D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C7C8); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C7F0); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C8A8); + + +extern void func_8012B2CC(s32 arg); + void func_8018C90C(void *arg0) { + s32 *p = *(s32 **)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 2; + *(s16 *)((char *)p + 0x12) = -0x600; + func_8012B2CC((s32)arg0); + } + + +extern void func_8012B2CC(s32 arg); + void func_8018C93C(void *a0) { + s32 v1 = *(s32 *)((char *)a0 + 0x20); + *(s16 *)((char *)a0 + 0x2) = 0x4; + *(s16 *)(v1 + 0x12) = 0x600; + func_8012B2CC((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018C96C); + + +extern void (*D_801E3CEC[])(void); + +void func_8018CADC(void *a0) { + D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CB18); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CB94); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CC04); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CC1C); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CC40); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CD74); + +DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ + +DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80178D40", func_8018CDEC); + + diff --git a/src/ov_SC04_019/ov_SC04_019_jr_801734BC.c b/src/ov_SC04_019/ov_SC04_019_jr_801734BC.c index 9bb1a8fee..bee6d45ce 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_801734BC.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_801734BC.c @@ -3084,2372 +3084,3 @@ void func_80178D18(void) { D_801E7B24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E6CC4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E6CC4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E6CC4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E6CC4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E6CEC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E6CEC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E6CA8; - -s32 func_8017A3B0(void) { - switch (D_801E6CA8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E6CE4; -extern short D_801E6CE0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E6CE4) { - case 0: - func_800D0CA0(1); - D_801E6CE4 = D_801E6CE4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E6CE0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E6CE4 = D_801E6CE4 + 1; - if (D_801E6CE4 < 0x1E) { - return 0; - } - D_801E6CE4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E6D24; - extern s16 D_801E6D26; - extern s16 D_801E6D28; - extern s16 D_801E6D1C; - extern s16 D_801E6D1E; - extern s16 D_801E6D20; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E6D24, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E6D26, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E6D28, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E6D1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E6D1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E6D20, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E6CAC; -extern u16 D_801E6D2C; -extern u16 D_801E6D2E; -extern u16 D_801E6D30; -extern s16 D_801E7AB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E7AB0 = 0; - D_801E6CAC = 0; - D_801E6D2C = D_80126B5E; - D_801E6D2E = D_80126B62; - D_801E6D30 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B54[]; - extern s16 D_801E6D24; - extern s16 D_801E6D1C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E6D24; - s16 *p78C = &D_801E6D1C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E7AB0 = 1; - D_801E6CAC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E6CCC; - extern SV4_8017B368 D_801E6CD4; - extern s16 D_801E6D24; - extern s16 D_801E6D1C; - extern u16 D_80190B54; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E6CCC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E6CD4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E6D24) = loc0; - (*(SV4_8017B368 *)&D_801E6D1C) = loc1; - D_801E7AB0 = 1; - D_801E6CAC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B54[]; - extern s16 D_801E6D24; - extern s16 D_801E6D26; - extern s16 D_801E6D28; - extern s16 D_801E6D1C; - extern s16 D_801E6D1E; - extern s16 D_801E6D20; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E6D24; - s16 *p78C = &D_801E6D1C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E6D26; - v798 = D_801E6D28; - v78C = *p78C; - v78E = D_801E6D1E; - v790 = D_801E6D20; - __asm__ __volatile__(""); - D_801E7AB0 = 1; - D_801E6CAC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6CAC; -extern s16 D_801E6D24; -extern s16 D_801E6D26; -extern s16 D_801E6D28; -extern s16 D_801E6D1C; -extern s16 D_801E6D1E; -extern s16 D_801E6D20; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E6CAC = 0; - D_801E6D24 = (s16) D_80114F30; - D_801E6D26 = (s16) D_80114F34; - D_801E6D28 = (s16) D_80114F38; - D_801E6D1C = (s16) D_80114F24; - D_801E6D1E = (s16) D_80114F28; - D_801E6D20 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E6D3C; -extern s16 D_801E6D3E; -extern s16 D_801E6D40; -extern s16 D_801E6D44; -extern s16 D_801E6D46; -extern s16 D_801E6D48; - -void func_8017B824(void) { - D_801E6D3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E6D3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E6D40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E6D44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E6D46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E6D48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E6D3C; -extern s16 D_801E6D3E; -extern s16 D_801E6D40; -extern s16 D_801E6D44; -extern s16 D_801E6D46; -extern s16 D_801E6D48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E6D3C; - D_80114F34 = D_801E6D3E; - D_80114F38 = D_801E6D40; - D_80114F24 = D_801E6D44; - D_80114F28 = D_801E6D46; - D_80114F2C = D_801E6D48; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E6D24), src[8..15] -> (*(S8_8017B8E8 *)&D_801E6D1C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E6D24) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E6D1C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E6D2C; -extern u16 D_801E6D2E; -extern u16 D_801E6D30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6CAC; -extern short D_801E6D34; -extern short D_801E6D36; -extern short D_801E6D38; -extern s16 D_801E6D24; -extern s16 D_801E6D26; -extern s16 D_801E6D28; -extern s16 D_801E6D1C; -extern s16 D_801E6D1E; -extern s16 D_801E6D20; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E6D2C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E6D2E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E6D30); - (*(s16 *)&D_801E6D34) = buf[0]; - (*(s16 *)&D_801E6D36) = buf[1]; - (*(s16 *)&D_801E6D38) = buf[2]; - D_801E6D24 = D_80114F30 + buf[0]; - D_801E6CAC = 0; - D_801E6D26 = D_80114F34 + buf[1]; - D_801E6D28 = D_80114F38 + buf[2]; - D_801E6D1C = D_80114F24 + buf[0]; - D_801E6D1E = D_80114F28 + buf[1]; - D_801E6D20 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E6CCC; -extern SV4 D_801E6CD4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E6CD4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E6CCC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E6CD4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E6CD4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E6CCC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E6CD4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E6CF4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E6CF4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E6CAC; -extern s16 D_801E7AB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E6CAC = D_801E6CAC + 1; - if (D_801E6CAC >= 0x1F) { - D_801E7AB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E6CAC; -extern s16 D_801E7AB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6CAC = D_801E6CAC + 1; - if (0x18 < D_801E6CAC) { - func_8012A4BC(); - D_801E7AB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E6CAC; -extern void (*D_801E6CF0)(void); -extern short D_801E6D34; -extern short D_801E6D36; -extern short D_801E6D38; -extern s16 D_801E7AB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6CAC = D_801E6CAC + 1; - if (D_801E6CAC >= 0x19) { - if (D_801E6CF0 != 0) { - (*D_801E6CF0)(); - } else { - D_80114F30 = D_80114F30 + D_801E6D34; - D_80114F34 = D_80114F34 + D_801E6D36; - D_80114F38 = D_80114F38 + D_801E6D38; - D_80114F24 = D_80114F24 + D_801E6D34; - D_80114F28 = D_80114F28 + D_801E6D36; - D_80114F2C = D_80114F2C + D_801E6D38; - func_8012A4BC(); - } - D_801E7AB0 = 0; - } -} - - - -extern void (*D_80190BF4[])(void); - -void func_8017BE60(void *a0) { - D_80190BF4[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_80190C94[])(void); - -void func_8017BE9C(void *a0) { - D_80190C94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190C9C[])(void); - -void func_8017BED8(void *a0) { - D_80190C9C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190CA4[])(void); - -void func_8017BF14(void *a0) { - D_80190CA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017BF50); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C094); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C100); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C1AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C1EC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C2B0); - - -extern void (*D_80190CC4[])(void); - -void func_8017C338(void *a0) { - D_80190CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C374); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C538); - -DEFINE_func_8017C5CC() /* dedup: shared engine-core @0x8017C5CC (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80190CB8; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80190CB8, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C6AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017C710); - - -extern void (*D_80190CE4[])(void); - -void func_8017D5F0(void *a0) { - D_80190CE4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_80190CD4; - -void func_8017D62C(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190CD4 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ - -DEFINE_func_8017D6B0() /* dedup: shared engine-core @0x8017D6B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017D6EC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017D77C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017D9B8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DA08); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DAC4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DBDC); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801E6FE8; -extern u16 D_80190D24[]; -extern u16 D_801E6FEC[]; -extern s32 D_80190D44; - -extern void func_800183E0(s32 a0); - -void func_8017DC0C(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80190D24; - base = D_801E6FE8 >> 8; - p = D_801E6FEC; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80190D44); - D_801E6FE8 = D_801E6FE8 + 0x100; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DC98); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DCE8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DD0C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DD7C); - -extern void func_800D1EBC(void); - void func_8017DE2C(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DE4C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017DEA0); - - -extern void (*D_80190D64[])(void); - -void func_8017DF34(void *a0) { - D_80190D64[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D6C[])(void); - -void func_8017DF70(void *a0) { - D_80190D6C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D78[])(void); - -void func_8017DFAC(void *a0) { - D_80190D78[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D84[])(void); - -void func_8017DFE8(void *a0) { - D_80190D84[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E024(void) { - D_80127050 = 1; - } - - - -extern void (*D_80191060[])(void); - -void func_8017E038(void *a0) { - D_80191060[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_8017E074() /* dedup: shared engine-core @0x8017E074 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E088); - - -extern void (*D_80191068[])(void); - -void func_8017E0C0(void *a0) { - D_80191068[*(u8 *)((s32)a0 + 0x214)](); -} - - -DEFINE_func_8017E0FC() /* dedup: shared engine-core @0x8017E0FC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E110); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E130); - - -extern void (*D_80191070[])(void); - -void func_8017E1F4(void *a0) { - D_80191070[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E230); - -DEFINE_func_8017E264() /* dedup: shared engine-core @0x8017E264 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E26C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E3AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E5A0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E628); - - -extern void (*D_801912A8[])(void); - -void func_8017E760(void *a0) { - D_801912A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801B9B50; - void func_8017E79C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801B9B50); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E7CC); - - -extern void (*D_801912C8[])(void); - -void func_8017E810(void *a0) { - D_801912C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801910A0; - void func_8017E84C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801910A0); - } - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191288; - void func_8017E878(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 7; - func_80178CBC((int)arg0, (int)&D_80191288); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E8A4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E8FC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E950); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E99C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017E9C0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EA0C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EAAC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EAFC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EBA0); - -extern void func_8017E7CC(void); - void func_8017EBE0(u8 *a0) { - if (*(u16 *)((s32)a0 + 0x34) == 1) { - func_8017E7CC(); - } - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EC10); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017ECF4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EDA4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017EE6C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F02C); - -DEFINE_func_8017F058() /* dedup: shared engine-core @0x8017F058 (src/shared) */ - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191304; - void func_8017F094(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80191304); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F0C0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F0D8); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017F108(void) { - func_80029124(0x10C, 0); - func_80029124(0x10D, 1); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F138); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F174); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F1A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F224); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F28C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F2DC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F35C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F418); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F500); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F564); - - -extern void (*D_801916E4[])(void); - -void func_8017F5BC(void *a0) { - D_801916E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F5F8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F6D8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F7B8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F898); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017F978); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FA34); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FA58); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FAAC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FB0C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FBB0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FC58); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FCD8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FD28); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FD88); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FDE4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FE54); - - -extern void (*D_80191814[])(void); - -void func_8017FF34(void *a0) { - D_80191814[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8017FF70); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018001C); - -DEFINE_func_801800E0() /* dedup: shared engine-core @0x801800E0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018011C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180134); - -DEFINE_func_8018015C() /* dedup: shared engine-core @0x8018015C (src/shared) */ - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191874; - void func_80180164(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - func_80178CBC((int)arg0, (int)&D_80191874); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180190); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801801E0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180284); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018034C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018042C); - - -extern void (*D_801919C4[])(void); - -void func_8018048C(void *a0) { - D_801919C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801804C8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180504); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80180544(void) { - if ((func_80029178(0x110) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180580); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801805C0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180618); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018067C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801806CC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180740); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180814); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180888); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801808FC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180954); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_801919E0; - void func_801809DC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80184CB8((s32 *)a0, (s32)&D_801919E0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180A08); - - -extern void (*D_80191A80[])(void); - -void func_80180B6C(void *a0) { - D_80191A80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180BA8); - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191A20; - void func_80180C0C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 7; - func_80178CBC((int)arg0, (int)&D_80191A20); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180C38); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180CC0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180D38); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180E28); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180EE8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80180F7C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181020); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181090); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181124); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801811F4); - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191A58; - void func_80181244(short *param) { - param[1] = 0xB; - func_80178CBC((int)param, (int)&D_80191A58); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181270); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_80191AB0; - void func_801812D0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_80184CB8((s32 *)a0, (s32)&D_80191AB0); - } - - - -extern void (*D_80191B20[])(void); - -void func_801812FC(void *a0) { - D_80191B20[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191AE8; - void func_80181338(short *param) { - param[1] = 4; - func_80178CBC((int)param, (int)&D_80191AE8); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181364); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801813A4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181400); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181474); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801814C4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181564); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801815DC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181648); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801816A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018170C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181738); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018178C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801817B8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181804); - - -extern void (*D_80191BDC[])(void); - -void func_80181924(void *a0) { - D_80191BDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181960); - -DEFINE_func_80181998() /* dedup: shared engine-core @0x80181998 (src/shared) */ - -DEFINE_func_801819B0() /* dedup: shared engine-core @0x801819B0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801819C8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181A28); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181A68); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181AA8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181B34); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181B74); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181BEC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181C78); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181CB8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181DC4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181E04); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181EFC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181F70); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80181FE4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018203C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182120); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801821A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801821D4); - -DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182378); - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191C48; - void func_80182490(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 7; - func_80178CBC((int)arg0, (int)&D_80191C48); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801824BC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182544); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801825BC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801826AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018276C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182800); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801828B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182920); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801829AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182A7C); - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191EB0; - void func_80182ACC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 11; - func_80178CBC((int)arg0, (int)&D_80191EB0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182AF8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182B58); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182BCC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182C24); - - -extern void (*D_80192014[])(void); - -void func_80182C98(void *a0) { - D_80192014[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182CD4); - -extern s32 D_801D7E84; - extern s32 D_801D6C98; - void func_80182D0C(void) { - D_801D6C98 = D_801D7E84; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182D24); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182D84); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80182DC4(void) { - if ((func_80029178(0x113) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182E00); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182E40); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182ED8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182F18); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80182F88); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183024); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801830F4); - -extern void func_80184CB8(s32 *a0, s32 a1); - extern short D_80192030; - void func_801831AC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_80184CB8((s32 *)a0, (s32)&D_80192030); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801831D8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183248); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801832A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018330C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183338); - - -extern void (*D_8019211C[])(void); - -void func_80183438(void *a0) { - D_8019211C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80192070; - void func_80183474(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - func_80178CBC((int)a0, (int)&D_80192070); - } - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80192070; - void func_801834A0(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 10; - func_80178CBC((int)arg0, (int)&D_80192070); - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_801920C4; - void func_801834CC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xc; - func_80178CBC((s32 *)a0, (s32)&D_801920C4); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801834F8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183538); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183578); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183604); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183674); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801836C0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018370C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018375C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801837A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801837EC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183838); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183890); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801838E0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183938); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801839A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183A08); - - -extern void (*D_80192230[])(void); - -void func_80183A68(void *a0) { - D_80192230[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801921B8; - void func_80183AA4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 5; - func_80178CBC((int)arg0, (int)&D_801921B8); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183AD0); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80183B10(void) { - if ((func_80029178(0x115) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183B4C); - -extern s32 func_80184FA4(void); - extern void func_801839A8(s32 arg0); - void func_80183B8C(s32 param_1) { - if (((s32 (*)(void))func_80184FA4)() != 0) { - ((void (*)(s32))func_801839A8)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183BC4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183C28); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183C78); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183CBC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183D80); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183DF4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183E20); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183E6C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183FA8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80183FF4); - - -extern void (*D_80192414[])(void); - -void func_80184130(void *a0) { - D_80192414[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018416C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801841AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801841EC); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_8018422C(void) { - if ((func_80029178(0x116) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184268); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184298); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801842C8); - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s16 D_801923A4; - -void func_801842F8(void *arg0) { - *(s16 *)((char *)arg0 + 0x2) = 0xB; - *(s16 *)((char *)arg0 + 0x34) = 0; - func_80178CBC((s32)arg0, &D_801923A4); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184328); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184374); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801843C4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184410); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184460); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801844AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184504); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184560); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801845B8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018465C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184738); - - -void func_8018479C(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - - -void func_801847AC(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801847BC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184858); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801848B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801848DC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184960); - -extern s32 func_80184960(s32 arg); - extern void func_80184AC4(void *a0); - void func_80184A90(u8 *a0) { - *(s32 *)(a0 + 0xe0) = func_80184960((s32)a0); - func_80184AC4(a0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184AC4); - -extern short D_800BA2BA; - s32 func_80184B04(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801B8720[])(void); - -void func_80184B2C(void *a0) { - D_801B8720[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80184B68() /* dedup: shared engine-core @0x80184B68 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184B70); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184BAC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184BD0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184C28); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184C90); - -DEFINE_func_80184CB0() /* dedup: shared engine-core @0x80184CB0 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184CB8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184D00); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184D5C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184DD0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184E44); - - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_80184EA0(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184ED4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80184FA4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018516C); - - -extern void (*D_801B8740[])(void); - -void func_801851B4(void *a0) { - D_801B8740[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801851F0() /* dedup: shared engine-core @0x801851F0 (src/shared) */ - -DEFINE_func_801851F8() /* dedup: shared engine-core @0x801851F8 (src/shared) */ - -DEFINE_func_80185200() /* dedup: shared engine-core @0x80185200 (src/shared) */ - -DEFINE_func_80185208() /* dedup: shared engine-core @0x80185208 (src/shared) */ - -DEFINE_func_80185210() /* dedup: shared engine-core @0x80185210 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185218); - -DEFINE_func_8018525C() /* dedup: shared engine-core @0x8018525C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185264); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801852EC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801854C4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185664); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801856E0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801857AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801857CC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018589C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185904); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185978); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801859D8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185A58); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185AB0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185B10); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185B58); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185BA8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185BE0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185C6C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185D10); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185D70); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185EEC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185F20); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185F54); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80185FB8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018602C); - -DEFINE_func_80186084() /* dedup: shared engine-core @0x80186084 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801860C0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018613C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018625C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801862A8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801863B4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80186410); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80186450); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80186460); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801864AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018651C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80186570); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80186E24); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801877B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801878E8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801880EC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80188428); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80188778); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_801889B8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80188B84); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80188E1C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189214); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189540); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189DDC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189E14); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189E54); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_80189EA0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A0B4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A168); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A1D0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A224); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A2E0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A6C8); - -DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A77C); - -DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ - - -extern void (*D_801E0524[])(void); - -void func_8018A8D4(void *a0) { - D_801E0524[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0534[])(void); - -void func_8018A910(void *a0) { - D_801E0534[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E0544[])(void); - -void func_8018A94C(void *a0) { - D_801E0544[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018A990); - -DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018AB78); - - -extern s32 D_801E01F0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ACD4(void) { - D_801E7980 = &D_801E01F0; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E0228; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD08(void) { - D_801E7980 = &D_801E0228; - func_8018A168(0x474, 0x4EC); -} - - - -extern s32 D_801E0260; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD3C(void) { - D_801E7980 = &D_801E0260; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E0288; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AD70(void) { - D_801E7980 = &D_801E0288; - func_8018A168(0x474, 0x4B0); -} - - - -extern s32 D_801E02C0; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018ADA4(void) { - D_801E7980 = &D_801E02C0; - func_8018A168(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018ADD8); - - -extern s32 D_801E0338; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AE4C(void) { - D_801E7980 = &D_801E0338; - func_8018A168(0x474, 0x1A4); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018AE80); - - -extern s32 D_801E0390; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AECC(void) { - D_801E7980 = &D_801E0390; - func_8018A168(0x12c, 0x1A4); -} - - -DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ - - -extern s32 D_801E0440; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AF34(void) { - D_801E7980 = &D_801E0440; - func_8018A168(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018AF68); - - -extern s32 D_801E0488; -extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); - -void func_8018AFB4(void) { - D_801E7980 = &D_801E0488; - func_8018A168(0x564, 0x1A4); -} - - -DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018AFF0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B0AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B158); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B19C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B2B8); - - -extern void func_8012B414(int a0); - void func_8018B354(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B388); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B400); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B448); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B4EC); - -DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ - - -extern void (*D_801E056C[])(void); - -void func_8018B570(void *a0) { - D_801E056C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B5AC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B614); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B660); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B6A0); - -DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ - - - -extern void (*D_801E0580[])(void); - -void func_8018B6F4(void *a0) { - D_801E0580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B730); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B798); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B7FC); - -DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ - - - -extern void (*D_801E0594[])(void); - -void func_8018B874(void *a0) { - D_801E0594[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B8B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B904); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B948); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018B988); - -DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ - - -extern void (*D_801E05A8[])(void); - -void func_8018B9DC(void *a0) { - D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BA18); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BA80); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BAE4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BB50); - - -extern void (*D_801E05B4[])(void); - -void func_8018BC3C(void *a0) { - D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BC78); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BCDC); - - -extern void (*D_801E05BC[])(void); - -void func_8018BD58(void *a0) { - D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018BD94(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BDA4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BDE0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BE0C); - - -extern void (*D_801E0690[])(void); - -void func_8018BE38(void *a0) { - D_801E0690[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BE74); - -extern s32 func_8014CB1C(void); - s32 func_8018BEE8(void) { - return func_8014CB1C() != 0; - } - - -DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BF34); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BF64); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018BFCC); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C038); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C0B0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C114); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C1E0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C24C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C278); - - -extern void (*D_801E077C[])(void); - -void func_8018C368(void *a0) { - D_801E077C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801E070C; - void func_8018C3A4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801E070C); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C3D0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C3F0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C494); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C518); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C5AC); - - -extern void (*D_801E3AF4[])(void); - -void func_8018C5FC(void *a0) { - D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C638); - -DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C6A4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C6F0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C730); - - -extern void (*D_801E3BA4[])(void); - -void func_8018C78C(void *a0) { - D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C7C8); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C7F0); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C8A8); - -extern void func_8012B2CC(s32 arg); - void func_8018C90C(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C93C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018C96C); - - -extern void (*D_801E3CEC[])(void); - -void func_8018CADC(void *a0) { - D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CB18); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CB94); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CC04); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018CC1C(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CC40); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CD74); - -DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ - -DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801734BC", func_8018CDEC); - diff --git a/src/ov_SC04_019/ov_SC04_019_jr_80178D40.c b/src/ov_SC04_019/ov_SC04_019_jr_80178D40.c new file mode 100644 index 000000000..a21515256 --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_80178D40.c @@ -0,0 +1,5818 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801903FC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E6018; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801903F0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80190434[]; +extern unsigned short D_8019043C[]; +extern unsigned short D_80190444[]; +extern unsigned char D_801E6020[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E6018; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8019044C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E6154; +extern M2C_UNK D_801E6158; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E60E0; +extern void (*D_8019047C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E615C[]; +extern u8 D_801E6164[]; +extern u8 D_801E6114[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190484[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801904A0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801904A8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190510[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801904B4; +extern u8 D_801904C0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190544[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8019054C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801905A0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801905D4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801905C4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801905F0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80190668[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190670[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80190678[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190680[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80190688[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190690[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8019069C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801906A8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801906B4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801906C4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801906D4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801906DC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801906E4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801906EC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801906F4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801906FC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80190704[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8019070C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190714[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8019071C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190724[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8019072C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190734[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8019073C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190744[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8019074C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190754[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8019075C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190764[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8019076C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190774[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8019077C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190784[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801907C8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8019078C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801907F8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190834[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8019088C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8019089C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801908A4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80190A0C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190A18[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E52AC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E7AB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E6898; +extern short D_801E7B24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E7B24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E7B24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E6898 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E7B24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E7A68 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E7A68 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E7B24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E7B24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E6CF4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E689C; + extern s32 D_801E6CB0; + extern s16 D_801E6CB4; + extern s16 D_801E6CB8; + extern s16 D_801E6CBC; + extern s16 D_801E6CC0; + extern s32 D_801E6CC8; + extern s32 D_801E6CCC; + extern s32 D_801E6CDC; + extern s16 D_801E6CE0; + extern s16 D_801E6CE4; + extern s32 D_801E6CE8; + extern s32 D_801E6CF0; + extern s32 D_801E6CF4[10]; + extern s32 D_801E7998; + extern s16 D_801E7A68; + extern s32 D_801E7AAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E7A68; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E6CBC, D_801E6CC0 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 2; + break; + case 0: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E6CB4, D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E7998 != 0) { + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E6CB4, D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + } else { + (*(s16*)&D_801E7B24) = 3; + } + break; + case 0x32: + func_80179B28(D_801E6CB0); + D_801E6CB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E6CB4, + D_801E6CB8 ? 0x48 : 0x40); + (*(s16*)&D_801E7B24) = 1; + break; + case 2: + func_80179B28(D_801E6CB0); + if (D_801E6CC8 != 0) { + D_801E6898 = D_801E6CC8; + D_801E6CC8 = 0; + (*(s16*)&D_801E7B24) = 3; + return; + } + (*(s16*)&D_801E7B24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E7B24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E7B24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1B: + D_801E6CE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E7B24) = 4; + D_801E689C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E7B24) = 5; + D_801E6CDC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E6CDC = (s32)func_8017A3B0; + (*(s16*)&D_801E7B24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x24: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E7B24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E7B24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E7B24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E7B24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E7B24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6CCC); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4E: + D_801E6CF0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x2B: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E7B24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E7AAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x34: + (*(s16*)&D_801E7B24) = 3; + D_801E6898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E6CC8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E7B24) = 3; + D_801E6898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E7B24) = 3; + D_801E6898 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E6898 = *(s32 *)(D_801E6898 + 4); + return; + case 0x37: + (*(s16*)&D_801E7B24) = 3; + D_801E6CB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6CB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E7B24) = 3; + D_801E6CBC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6CC0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E7B24) = 3; + D_801E6CB4 = w1; + D_801E6CB8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E7B24) = 3; + D_801E6CBC = w2; + D_801E6CC0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x43: + D_801E6CDC = (s32)func_8017A3D8; + D_801E6CE4 = 0; + (*(s16*)&D_801E7B24) = 5; + D_801E6CE0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E7B24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E7B24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E6CF4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E7B24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E6CF4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E7B24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E6CF4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E7B24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E6CF4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E7B24) = 3; + break; + default: + break; + } +Lend: + D_801E6898 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E6CC4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E6CC4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E6CC4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E6CC4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E6CEC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E6CEC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E6CA8; + +s32 func_8017A3B0(void) { + switch (D_801E6CA8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E6CE4; +extern short D_801E6CE0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E6CE4) { + case 0: + func_800D0CA0(1); + D_801E6CE4 = D_801E6CE4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E6CE0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E6CE4 = D_801E6CE4 + 1; + if (D_801E6CE4 < 0x1E) { + return 0; + } + D_801E6CE4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E6D24; + extern s16 D_801E6D26; + extern s16 D_801E6D28; + extern s16 D_801E6D1C; + extern s16 D_801E6D1E; + extern s16 D_801E6D20; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E6D24, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E6D26, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E6D28, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E6D1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E6D1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E6D20, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E6CAC; +extern u16 D_801E6D2C; +extern u16 D_801E6D2E; +extern u16 D_801E6D30; +extern s16 D_801E7AB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E7AB0 = 0; + D_801E6CAC = 0; + D_801E6D2C = D_80126B5E; + D_801E6D2E = D_80126B62; + D_801E6D30 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B54[]; + extern s16 D_801E6D24; + extern s16 D_801E6D1C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E6D24; + s16 *p78C = &D_801E6D1C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E7AB0 = 1; + D_801E6CAC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E6CCC; + extern SV4_8017B368 D_801E6CD4; + extern s16 D_801E6D24; + extern s16 D_801E6D1C; + extern u16 D_80190B54; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E6CCC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E6CD4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B54)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E6D24) = loc0; + (*(SV4_8017B368 *)&D_801E6D1C) = loc1; + D_801E7AB0 = 1; + D_801E6CAC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B54[]; + extern s16 D_801E6D24; + extern s16 D_801E6D26; + extern s16 D_801E6D28; + extern s16 D_801E6D1C; + extern s16 D_801E6D1E; + extern s16 D_801E6D20; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B54[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B54[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E6D24; + s16 *p78C = &D_801E6D1C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E6D26; + v798 = D_801E6D28; + v78C = *p78C; + v78E = D_801E6D1E; + v790 = D_801E6D20; + __asm__ __volatile__(""); + D_801E7AB0 = 1; + D_801E6CAC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6CAC; +extern s16 D_801E6D24; +extern s16 D_801E6D26; +extern s16 D_801E6D28; +extern s16 D_801E6D1C; +extern s16 D_801E6D1E; +extern s16 D_801E6D20; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E6CAC = 0; + D_801E6D24 = (s16) D_80114F30; + D_801E6D26 = (s16) D_80114F34; + D_801E6D28 = (s16) D_80114F38; + D_801E6D1C = (s16) D_80114F24; + D_801E6D1E = (s16) D_80114F28; + D_801E6D20 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E6D3C; +extern s16 D_801E6D3E; +extern s16 D_801E6D40; +extern s16 D_801E6D44; +extern s16 D_801E6D46; +extern s16 D_801E6D48; + +void func_8017B824(void) { + D_801E6D3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E6D3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E6D40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E6D44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E6D46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E6D48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E6D3C; +extern s16 D_801E6D3E; +extern s16 D_801E6D40; +extern s16 D_801E6D44; +extern s16 D_801E6D46; +extern s16 D_801E6D48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E6D3C; + D_80114F34 = D_801E6D3E; + D_80114F38 = D_801E6D40; + D_80114F24 = D_801E6D44; + D_80114F28 = D_801E6D46; + D_80114F2C = D_801E6D48; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E6D24), src[8..15] -> (*(S8_8017B8E8 *)&D_801E6D1C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E6D24) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E6D1C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E6D2C; +extern u16 D_801E6D2E; +extern u16 D_801E6D30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6CAC; +extern short D_801E6D34; +extern short D_801E6D36; +extern short D_801E6D38; +extern s16 D_801E6D24; +extern s16 D_801E6D26; +extern s16 D_801E6D28; +extern s16 D_801E6D1C; +extern s16 D_801E6D1E; +extern s16 D_801E6D20; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E6D2C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E6D2E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E6D30); + (*(s16 *)&D_801E6D34) = buf[0]; + (*(s16 *)&D_801E6D36) = buf[1]; + (*(s16 *)&D_801E6D38) = buf[2]; + D_801E6D24 = D_80114F30 + buf[0]; + D_801E6CAC = 0; + D_801E6D26 = D_80114F34 + buf[1]; + D_801E6D28 = D_80114F38 + buf[2]; + D_801E6D1C = D_80114F24 + buf[0]; + D_801E6D1E = D_80114F28 + buf[1]; + D_801E6D20 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E6CCC; +extern SV4 D_801E6CD4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E6CD4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E6CCC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E6CD4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E6CD4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E6CCC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E6CD4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E6CF4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E6CF4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E6CAC; +extern s16 D_801E7AB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E6CAC = D_801E6CAC + 1; + if (D_801E6CAC >= 0x1F) { + D_801E7AB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E6CAC; +extern s16 D_801E7AB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6CAC = D_801E6CAC + 1; + if (0x18 < D_801E6CAC) { + func_8012A4BC(); + D_801E7AB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E6CAC; +extern void (*D_801E6CF0)(void); +extern short D_801E6D34; +extern short D_801E6D36; +extern short D_801E6D38; +extern s16 D_801E7AB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6CAC = D_801E6CAC + 1; + if (D_801E6CAC >= 0x19) { + if (D_801E6CF0 != 0) { + (*D_801E6CF0)(); + } else { + D_80114F30 = D_80114F30 + D_801E6D34; + D_80114F34 = D_80114F34 + D_801E6D36; + D_80114F38 = D_80114F38 + D_801E6D38; + D_80114F24 = D_80114F24 + D_801E6D34; + D_80114F28 = D_80114F28 + D_801E6D36; + D_80114F2C = D_80114F2C + D_801E6D38; + func_8012A4BC(); + } + D_801E7AB0 = 0; + } +} + + + +extern void (*D_80190BF4[])(void); + +void func_8017BE60(void *a0) { + D_80190BF4[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_80190C94[])(void); + +void func_8017BE9C(void *a0) { + D_80190C94[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190C9C[])(void); + +void func_8017BED8(void *a0) { + D_80190C9C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190CA4[])(void); + +void func_8017BF14(void *a0) { + D_80190CA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017BF50); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C094); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C100); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C1AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C1EC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C2B0); + + +extern void (*D_80190CC4[])(void); + +void func_8017C338(void *a0) { + D_80190CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C374); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C538); + +DEFINE_func_8017C5CC() /* dedup: shared engine-core @0x8017C5CC (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80190CB8; + +void func_8017C608(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80190CB8, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C6AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017C710); + + +extern void (*D_80190CE4[])(void); + +void func_8017D5F0(void *a0) { + D_80190CE4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80190CD4; + +void func_8017D62C(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190CD4 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ + +DEFINE_func_8017D6B0() /* dedup: shared engine-core @0x8017D6B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017D6EC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017D77C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017D9B8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DA08); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DAC4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DBDC); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801E6FE8; +extern u16 D_80190D24[]; +extern u16 D_801E6FEC[]; +extern s32 D_80190D44; + +extern void func_800183E0(s32 a0); + +void func_8017DC0C(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80190D24; + base = D_801E6FE8 >> 8; + p = D_801E6FEC; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80190D44); + D_801E6FE8 = D_801E6FE8 + 0x100; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DC98); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DCE8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DD0C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DD7C); + +extern void func_800D1EBC(void); + void func_8017DE2C(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DE4C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017DEA0); + + +extern void (*D_80190D64[])(void); + +void func_8017DF34(void *a0) { + D_80190D64[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D6C[])(void); + +void func_8017DF70(void *a0) { + D_80190D6C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D78[])(void); + +void func_8017DFAC(void *a0) { + D_80190D78[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D84[])(void); + +void func_8017DFE8(void *a0) { + D_80190D84[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017E024(void) { + D_80127050 = 1; + } + + + +extern void (*D_80191060[])(void); + +void func_8017E038(void *a0) { + D_80191060[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_8017E074() /* dedup: shared engine-core @0x8017E074 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E088); + + +extern void (*D_80191068[])(void); + +void func_8017E0C0(void *a0) { + D_80191068[*(u8 *)((s32)a0 + 0x214)](); +} + + +DEFINE_func_8017E0FC() /* dedup: shared engine-core @0x8017E0FC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E110); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E130); + + +extern void (*D_80191070[])(void); + +void func_8017E1F4(void *a0) { + D_80191070[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E230); + +DEFINE_func_8017E264() /* dedup: shared engine-core @0x8017E264 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E26C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E3AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E5A0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E628); + + +extern void (*D_801912A8[])(void); + +void func_8017E760(void *a0) { + D_801912A8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801B9B50; + void func_8017E79C(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801B9B50); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E7CC); + + +extern void (*D_801912C8[])(void); + +void func_8017E810(void *a0) { + D_801912C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801910A0; + void func_8017E84C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801910A0); + } + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191288; + void func_8017E878(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 7; + func_80178CBC((int)arg0, (int)&D_80191288); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E8A4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E8FC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E950); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E99C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017E9C0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EA0C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EAAC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EAFC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EBA0); + +extern void func_8017E7CC(void); + void func_8017EBE0(u8 *a0) { + if (*(u16 *)((s32)a0 + 0x34) == 1) { + func_8017E7CC(); + } + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EC10); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017ECF4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EDA4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017EE6C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F02C); + +DEFINE_func_8017F058() /* dedup: shared engine-core @0x8017F058 (src/shared) */ + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191304; + void func_8017F094(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80191304); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F0C0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F0D8); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017F108(void) { + func_80029124(0x10C, 0); + func_80029124(0x10D, 1); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F138); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F174); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F1A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F224); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F28C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F2DC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F35C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F418); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F500); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F564); + + +extern void (*D_801916E4[])(void); + +void func_8017F5BC(void *a0) { + D_801916E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F5F8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F6D8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F7B8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F898); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017F978); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FA34); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FA58); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FAAC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FB0C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FBB0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FC58); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FCD8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FD28); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FD88); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FDE4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FE54); + + +extern void (*D_80191814[])(void); + +void func_8017FF34(void *a0) { + D_80191814[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8017FF70); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018001C); + +DEFINE_func_801800E0() /* dedup: shared engine-core @0x801800E0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018011C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180134); + +DEFINE_func_8018015C() /* dedup: shared engine-core @0x8018015C (src/shared) */ + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191874; + void func_80180164(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 3; + func_80178CBC((int)arg0, (int)&D_80191874); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180190); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801801E0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180284); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018034C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018042C); + + +extern void (*D_801919C4[])(void); + +void func_8018048C(void *a0) { + D_801919C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801804C8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180504); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80180544(void) { + if ((func_80029178(0x110) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180580); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801805C0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180618); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018067C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801806CC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180740); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180814); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180888); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801808FC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180954); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_801919E0; + void func_801809DC(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + func_80184CB8((s32 *)a0, (s32)&D_801919E0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180A08); + + +extern void (*D_80191A80[])(void); + +void func_80180B6C(void *a0) { + D_80191A80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180BA8); + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191A20; + void func_80180C0C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 7; + func_80178CBC((int)arg0, (int)&D_80191A20); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180C38); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180CC0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180D38); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180E28); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180EE8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80180F7C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181020); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181090); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181124); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801811F4); + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191A58; + void func_80181244(short *param) { + param[1] = 0xB; + func_80178CBC((int)param, (int)&D_80191A58); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181270); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_80191AB0; + void func_801812D0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + func_80184CB8((s32 *)a0, (s32)&D_80191AB0); + } + + + +extern void (*D_80191B20[])(void); + +void func_801812FC(void *a0) { + D_80191B20[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191AE8; + void func_80181338(short *param) { + param[1] = 4; + func_80178CBC((int)param, (int)&D_80191AE8); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181364); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801813A4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181400); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181474); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801814C4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181564); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801815DC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181648); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801816A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018170C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181738); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018178C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801817B8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181804); + + +extern void (*D_80191BDC[])(void); + +void func_80181924(void *a0) { + D_80191BDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181960); + +DEFINE_func_80181998() /* dedup: shared engine-core @0x80181998 (src/shared) */ + +DEFINE_func_801819B0() /* dedup: shared engine-core @0x801819B0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801819C8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181A28); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181A68); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181AA8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181B34); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181B74); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181BEC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181C78); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181CB8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181DC4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181E04); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181EFC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181F70); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80181FE4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018203C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182120); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801821A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801821D4); + +DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182378); + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191C48; + void func_80182490(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 7; + func_80178CBC((int)arg0, (int)&D_80191C48); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801824BC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182544); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801825BC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801826AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018276C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182800); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801828B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182920); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801829AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182A7C); + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191EB0; + void func_80182ACC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 11; + func_80178CBC((int)arg0, (int)&D_80191EB0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182AF8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182B58); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182BCC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182C24); + + +extern void (*D_80192014[])(void); + +void func_80182C98(void *a0) { + D_80192014[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182CD4); + +extern s32 D_801D7E84; + extern s32 D_801D6C98; + void func_80182D0C(void) { + D_801D6C98 = D_801D7E84; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182D24); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182D84); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80182DC4(void) { + if ((func_80029178(0x113) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182E00); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182E40); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182ED8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182F18); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80182F88); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183024); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801830F4); + +extern void func_80184CB8(s32 *a0, s32 a1); + extern short D_80192030; + void func_801831AC(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + func_80184CB8((s32 *)a0, (s32)&D_80192030); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801831D8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183248); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801832A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018330C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183338); + + +extern void (*D_8019211C[])(void); + +void func_80183438(void *a0) { + D_8019211C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80192070; + void func_80183474(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + func_80178CBC((int)a0, (int)&D_80192070); + } + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80192070; + void func_801834A0(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 10; + func_80178CBC((int)arg0, (int)&D_80192070); + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_801920C4; + void func_801834CC(short *a0) { + *(short *)((char *)a0 + 0x2) = 0xc; + func_80178CBC((s32 *)a0, (s32)&D_801920C4); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801834F8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183538); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183578); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183604); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183674); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801836C0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018370C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018375C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801837A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801837EC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183838); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183890); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801838E0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183938); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801839A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183A08); + + +extern void (*D_80192230[])(void); + +void func_80183A68(void *a0) { + D_80192230[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801921B8; + void func_80183AA4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 5; + func_80178CBC((int)arg0, (int)&D_801921B8); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183AD0); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80183B10(void) { + if ((func_80029178(0x115) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183B4C); + +extern s32 func_80184FA4(void); + extern void func_801839A8(s32 arg0); + void func_80183B8C(s32 param_1) { + if (((s32 (*)(void))func_80184FA4)() != 0) { + ((void (*)(s32))func_801839A8)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183BC4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183C28); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183C78); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183CBC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183D80); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183DF4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183E20); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183E6C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183FA8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80183FF4); + + +extern void (*D_80192414[])(void); + +void func_80184130(void *a0) { + D_80192414[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018416C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801841AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801841EC); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_8018422C(void) { + if ((func_80029178(0x116) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184268); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184298); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801842C8); + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s16 D_801923A4; + +void func_801842F8(void *arg0) { + *(s16 *)((char *)arg0 + 0x2) = 0xB; + *(s16 *)((char *)arg0 + 0x34) = 0; + func_80178CBC((s32)arg0, &D_801923A4); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184328); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184374); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801843C4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184410); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184460); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801844AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184504); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184560); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801845B8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018465C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184738); + + +void func_8018479C(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + + +void func_801847AC(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801847BC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184858); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801848B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801848DC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184960); + +extern s32 func_80184960(s32 arg); + extern void func_80184AC4(void *a0); + void func_80184A90(u8 *a0) { + *(s32 *)(a0 + 0xe0) = func_80184960((s32)a0); + func_80184AC4(a0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184AC4); + +extern short D_800BA2BA; + s32 func_80184B04(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801B8720[])(void); + +void func_80184B2C(void *a0) { + D_801B8720[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80184B68() /* dedup: shared engine-core @0x80184B68 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184B70); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184BAC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184BD0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184C28); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184C90); + +DEFINE_func_80184CB0() /* dedup: shared engine-core @0x80184CB0 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184CB8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184D00); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184D5C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184DD0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184E44); + + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_80184EA0(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184ED4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80184FA4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018516C); + + +extern void (*D_801B8740[])(void); + +void func_801851B4(void *a0) { + D_801B8740[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801851F0() /* dedup: shared engine-core @0x801851F0 (src/shared) */ + +DEFINE_func_801851F8() /* dedup: shared engine-core @0x801851F8 (src/shared) */ + +DEFINE_func_80185200() /* dedup: shared engine-core @0x80185200 (src/shared) */ + +DEFINE_func_80185208() /* dedup: shared engine-core @0x80185208 (src/shared) */ + +DEFINE_func_80185210() /* dedup: shared engine-core @0x80185210 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185218); + +DEFINE_func_8018525C() /* dedup: shared engine-core @0x8018525C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185264); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801852EC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801854C4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185664); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801856E0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801857AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801857CC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018589C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185904); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185978); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801859D8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185A58); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185AB0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185B10); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185B58); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185BA8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185BE0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185C6C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185D10); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185D70); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185EEC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185F20); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185F54); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80185FB8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018602C); + +DEFINE_func_80186084() /* dedup: shared engine-core @0x80186084 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801860C0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018613C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018625C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801862A8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801863B4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80186410); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80186450); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80186460); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801864AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018651C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80186570); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80186E24); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801877B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801878E8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801880EC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80188428); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80188778); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_801889B8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80188B84); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80188E1C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189214); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189540); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189DDC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189E14); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189E54); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_80189EA0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A0B4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A168); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A1D0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A224); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A2E0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A6C8); + +DEFINE_func_8018A740() /* dedup: shared engine-core @0x8018A740 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A77C); + +DEFINE_func_8018A898() /* dedup: shared engine-core @0x8018A898 (src/shared) */ + + +extern void (*D_801E0524[])(void); + +void func_8018A8D4(void *a0) { + D_801E0524[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0534[])(void); + +void func_8018A910(void *a0) { + D_801E0534[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E0544[])(void); + +void func_8018A94C(void *a0) { + D_801E0544[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8018A988() /* dedup: shared engine-core @0x8018A988 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018A990); + +DEFINE_func_8018AB3C() /* dedup: shared engine-core @0x8018AB3C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018AB78); + + +extern s32 D_801E01F0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ACD4(void) { + D_801E7980 = &D_801E01F0; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E0228; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD08(void) { + D_801E7980 = &D_801E0228; + func_8018A168(0x474, 0x4EC); +} + + + +extern s32 D_801E0260; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD3C(void) { + D_801E7980 = &D_801E0260; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E0288; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AD70(void) { + D_801E7980 = &D_801E0288; + func_8018A168(0x474, 0x4B0); +} + + + +extern s32 D_801E02C0; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018ADA4(void) { + D_801E7980 = &D_801E02C0; + func_8018A168(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018ADD8); + + +extern s32 D_801E0338; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AE4C(void) { + D_801E7980 = &D_801E0338; + func_8018A168(0x474, 0x1A4); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018AE80); + + +extern s32 D_801E0390; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AECC(void) { + D_801E7980 = &D_801E0390; + func_8018A168(0x12c, 0x1A4); +} + + +DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ + + +extern s32 D_801E0440; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AF34(void) { + D_801E7980 = &D_801E0440; + func_8018A168(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018AF68); + + +extern s32 D_801E0488; +extern s32 D_801E7980; +extern void func_8018A168(s32 arg0, s32 arg1); + +void func_8018AFB4(void) { + D_801E7980 = &D_801E0488; + func_8018A168(0x564, 0x1A4); +} + + +DEFINE_func_8018AFE8() /* dedup: shared engine-core @0x8018AFE8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018AFF0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B0AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B158); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B19C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B2B8); + + +extern void func_8012B414(int a0); + void func_8018B354(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B388); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B400); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B448); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B4EC); + +DEFINE_func_8018B564() /* dedup: shared engine-core @0x8018B564 (src/shared) */ + + +extern void (*D_801E056C[])(void); + +void func_8018B570(void *a0) { + D_801E056C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B5AC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B614); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B660); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B6A0); + +DEFINE_func_8018B6E8() /* dedup: shared engine-core @0x8018B6E8 (src/shared) */ + + + +extern void (*D_801E0580[])(void); + +void func_8018B6F4(void *a0) { + D_801E0580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B730); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B798); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B7FC); + +DEFINE_func_8018B868() /* dedup: shared engine-core @0x8018B868 (src/shared) */ + + + +extern void (*D_801E0594[])(void); + +void func_8018B874(void *a0) { + D_801E0594[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B8B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B904); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B948); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018B988); + +DEFINE_func_8018B9D0() /* dedup: shared engine-core @0x8018B9D0 (src/shared) */ + + +extern void (*D_801E05A8[])(void); + +void func_8018B9DC(void *a0) { + D_801E05A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BA18); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BA80); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BAE4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BB50); + + +extern void (*D_801E05B4[])(void); + +void func_8018BC3C(void *a0) { + D_801E05B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BC78); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BCDC); + + +extern void (*D_801E05BC[])(void); + +void func_8018BD58(void *a0) { + D_801E05BC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018BD94(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BDA4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BDE0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BE0C); + + +extern void (*D_801E0690[])(void); + +void func_8018BE38(void *a0) { + D_801E0690[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BE74); + +extern s32 func_8014CB1C(void); + s32 func_8018BEE8(void) { + return func_8014CB1C() != 0; + } + + +DEFINE_func_8018BF08() /* dedup: shared engine-core @0x8018BF08 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BF34); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BF64); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018BFCC); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C038); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C0B0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C114); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C1E0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C24C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C278); + + +extern void (*D_801E077C[])(void); + +void func_8018C368(void *a0) { + D_801E077C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801E070C; + void func_8018C3A4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801E070C); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C3D0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C3F0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C494); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C518); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C5AC); + + +extern void (*D_801E3AF4[])(void); + +void func_8018C5FC(void *a0) { + D_801E3AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C638); + +DEFINE_func_8018C69C() /* dedup: shared engine-core @0x8018C69C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C6A4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C6F0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C730); + + +extern void (*D_801E3BA4[])(void); + +void func_8018C78C(void *a0) { + D_801E3BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C7C8); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C7F0); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C8A8); + +extern void func_8012B2CC(s32 arg); + void func_8018C90C(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C93C); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018C96C); + + +extern void (*D_801E3CEC[])(void); + +void func_8018CADC(void *a0) { + D_801E3CEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CB18); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CB94); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CC04); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018CC1C(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CC40); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CD74); + +DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */ + +DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80178D40", func_8018CDEC); + + diff --git a/src/ov_SC04_020/ov_SC04_020_jr_801734BC.c b/src/ov_SC04_020/ov_SC04_020_jr_801734BC.c index 7d492c539..1ed58391e 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_801734BC.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_801734BC.c @@ -3084,1393 +3084,3 @@ void func_80178D18(void) { D_801BC7AC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BC2D4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801BC2D4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BC2D4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801BC2D4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801BC2FC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801BC2FC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801BC2B8; - -s32 func_8017A3B0(void) { - switch (D_801BC2B8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801BC2F4; -extern short D_801BC2F0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801BC2F4) { - case 0: - func_800D0CA0(1); - D_801BC2F4 = D_801BC2F4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801BC2F0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801BC2F4 = D_801BC2F4 + 1; - if (D_801BC2F4 < 0x1E) { - return 0; - } - D_801BC2F4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801BC334; - extern s16 D_801BC336; - extern s16 D_801BC338; - extern s16 D_801BC32C; - extern s16 D_801BC32E; - extern s16 D_801BC330; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BC334, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BC336, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BC338, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BC32C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BC32E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BC330, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801BC2BC; -extern u16 D_801BC33C; -extern u16 D_801BC33E; -extern u16 D_801BC340; -extern s16 D_801BC738; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BC738 = 0; - D_801BC2BC = 0; - D_801BC33C = D_80126B5E; - D_801BC33E = D_80126B62; - D_801BC340 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186C8C[]; - extern s16 D_801BC334; - extern s16 D_801BC32C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186C8C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186C8C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BC334; - s16 *p78C = &D_801BC32C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BC738 = 1; - D_801BC2BC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801BC2DC; - extern SV4_8017B368 D_801BC2E4; - extern s16 D_801BC334; - extern s16 D_801BC32C; - extern u16 D_80186C8C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801BC2DC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801BC2E4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80186C8C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80186C8C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801BC334) = loc0; - (*(SV4_8017B368 *)&D_801BC32C) = loc1; - D_801BC738 = 1; - D_801BC2BC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80186C8C[]; - extern s16 D_801BC334; - extern s16 D_801BC336; - extern s16 D_801BC338; - extern s16 D_801BC32C; - extern s16 D_801BC32E; - extern s16 D_801BC330; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80186C8C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80186C8C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BC334; - s16 *p78C = &D_801BC32C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801BC336; - v798 = D_801BC338; - v78C = *p78C; - v78E = D_801BC32E; - v790 = D_801BC330; - __asm__ __volatile__(""); - D_801BC738 = 1; - D_801BC2BC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BC2BC; -extern s16 D_801BC334; -extern s16 D_801BC336; -extern s16 D_801BC338; -extern s16 D_801BC32C; -extern s16 D_801BC32E; -extern s16 D_801BC330; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801BC2BC = 0; - D_801BC334 = (s16) D_80114F30; - D_801BC336 = (s16) D_80114F34; - D_801BC338 = (s16) D_80114F38; - D_801BC32C = (s16) D_80114F24; - D_801BC32E = (s16) D_80114F28; - D_801BC330 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801BC34C; -extern s16 D_801BC34E; -extern s16 D_801BC350; -extern s16 D_801BC354; -extern s16 D_801BC356; -extern s16 D_801BC358; - -void func_8017B824(void) { - D_801BC34C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801BC34E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801BC350 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801BC354 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801BC356 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801BC358 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801BC34C; -extern s16 D_801BC34E; -extern s16 D_801BC350; -extern s16 D_801BC354; -extern s16 D_801BC356; -extern s16 D_801BC358; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801BC34C; - D_80114F34 = D_801BC34E; - D_80114F38 = D_801BC350; - D_80114F24 = D_801BC354; - D_80114F28 = D_801BC356; - D_80114F2C = D_801BC358; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801BC334), src[8..15] -> (*(S8_8017B8E8 *)&D_801BC32C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801BC334) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801BC32C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801BC33C; -extern u16 D_801BC33E; -extern u16 D_801BC340; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BC2BC; -extern short D_801BC344; -extern short D_801BC346; -extern short D_801BC348; -extern s16 D_801BC334; -extern s16 D_801BC336; -extern s16 D_801BC338; -extern s16 D_801BC32C; -extern s16 D_801BC32E; -extern s16 D_801BC330; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BC33C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BC33E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BC340); - (*(s16 *)&D_801BC344) = buf[0]; - (*(s16 *)&D_801BC346) = buf[1]; - (*(s16 *)&D_801BC348) = buf[2]; - D_801BC334 = D_80114F30 + buf[0]; - D_801BC2BC = 0; - D_801BC336 = D_80114F34 + buf[1]; - D_801BC338 = D_80114F38 + buf[2]; - D_801BC32C = D_80114F24 + buf[0]; - D_801BC32E = D_80114F28 + buf[1]; - D_801BC330 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801BC2DC; -extern SV4 D_801BC2E4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BC2E4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801BC2DC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801BC2E4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BC2E4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801BC2DC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801BC2E4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801BC304[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801BC304; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801BC2BC; -extern s16 D_801BC738; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801BC2BC = D_801BC2BC + 1; - if (D_801BC2BC >= 0x1F) { - D_801BC738 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801BC2BC; -extern s16 D_801BC738; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BC2BC = D_801BC2BC + 1; - if (0x18 < D_801BC2BC) { - func_8012A4BC(); - D_801BC738 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801BC2BC; -extern void (*D_801BC300)(void); -extern short D_801BC344; -extern short D_801BC346; -extern short D_801BC348; -extern s16 D_801BC738; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BC2BC = D_801BC2BC + 1; - if (D_801BC2BC >= 0x19) { - if (D_801BC300 != 0) { - (*D_801BC300)(); - } else { - D_80114F30 = D_80114F30 + D_801BC344; - D_80114F34 = D_80114F34 + D_801BC346; - D_80114F38 = D_80114F38 + D_801BC348; - D_80114F24 = D_80114F24 + D_801BC344; - D_80114F28 = D_80114F28 + D_801BC346; - D_80114F2C = D_80114F2C + D_801BC348; - func_8012A4BC(); - } - D_801BC738 = 0; - } -} - - - -extern void (*D_80186D2C[])(void); - -void func_8017BE60(void *a0) { - D_80186D2C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017BF88); - - -extern void (*D_80186D44[])(void); - -void func_8017C0E4(void *a0) { - D_80186D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C120); - - -extern void (*D_80186DE0[])(void); - -void func_8017C180(void *a0) { - D_80186DE0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80186DE8[])(void); - -void func_8017C1BC(void *a0) { - D_80186DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80186DF0[])(void); - -void func_8017C1F8(void *a0) { - D_80186DF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C3E4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C4D0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C594); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C61C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C7B8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017C9BC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017CDB0); - - -extern void (*D_801870CC[])(void); - -void func_8017CF30(void *a0) { - D_801870CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017CF6C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017CFE0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D474); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D5C4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017D604); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E4E4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E534(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E5C8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E678); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E698); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E6EC); - - -extern void (*D_801870F0[])(void); - -void func_8017E780(void *a0) { - D_801870F0[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_801870F8[])(void); - -void func_8017E7BC(void *a0) { - D_801870F8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80187104[])(void); - -void func_8017E7F8(void *a0) { - D_80187104[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E834(void) { - D_80127050 = 1; - } - - - -extern void (*D_801871E4[])(void); - -void func_8017E848(void *a0) { - D_801871E4[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E884(void *a0) { - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -extern void func_80175414(s32 arg0); - extern void func_8016F0E4(void); - extern void func_80165770(void); - void func_8017E898(s32 arg0) { - func_80175414(arg0); - ((s32 (*)(s32))func_8016F0E4)(arg0); - ((void (*)(s32))func_80165770)(arg0); - } - - - -extern void (*D_801871EC[])(void); - -void func_8017E8D0(void *a0) { - D_801871EC[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E90C); - -extern void func_8016F0E4(void); - void func_8017E920(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017E940); - - -extern void (*D_801871F4[])(void); - -void func_8017EA04(void *a0) { - D_801871F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EA40); - -void func_8017EA74(void *a0) { - *(s8 *)((s32)a0 + 0xA0) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EA7C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EBBC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EDB0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EDF4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017EE50); - - -extern void (*D_801872A0[])(void); - -void func_8017EFF4(void *a0) { - D_801872A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F030); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F068); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F0DC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F1D4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F24C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F320); - - -extern void (*D_8018749C[])(void); - -void func_8017F384(void *a0) { - D_8018749C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F3C0); - -void func_8017F48C(void) { -} - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F494); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F52C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F56C); - - -extern void (*D_801874AC[])(void); - -void func_8017F5E0(void *a0) { - D_801874AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017F61C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F63C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F704); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017F9EC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FAD4); - - -extern void (*D_801874C4[])(void); - -void func_8017FC30(void *a0) { - D_801874C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FC6C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FCFC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FD70); - - -extern void (*D_80187580[])(void); - -void func_8017FE10(void *a0) { - D_80187580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FE4C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FED0); - - -extern void (*D_80187598[])(void); - -void func_8017FF30(void *a0) { - D_80187598[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8017FF6C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", listCdBuffer); - -void func_80180020(void) { -} - - -extern void (*D_801875D0[])(void); - -void func_80180028(void *a0) { - D_801875D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180064); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801800F4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180330); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180380); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018043C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180554); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801805E0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018067C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180708); - - -extern void (*D_80187694[])(void); - -void func_80180840(void *a0) { - D_80187694[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018087C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180918); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180978); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801809EC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180A2C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180A6C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180AF0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180B68); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180BD0); - - -extern void (*D_801AA3F4[])(void); - -void func_80180D48(void *a0) { - D_801AA3F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801AA414[])(void); - -void func_80180D84(void *a0) { - D_801AA414[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180DC0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180E4C); - - -extern s32 func_80029504(void); -extern void func_800183E0(s32 arg0); -extern char D_801AA41C; - -void func_80180EA4(void) { - if (!(func_80029504() < 0x492)) { - func_800183E0((s32)&D_801AA41C); - } -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180EE0); - -void func_80180F78(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -void func_80180F88(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 0x2; - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80180F98); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181034); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181060); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018108C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801810B8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018113C); - - -extern s32 func_8018113C(s32 arg); -extern void func_801812A0(void *a0); - -void func_8018126C(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_8018113C((s32)a0); - func_801812A0(a0); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801812A0); - - -extern short D_800BA2BA; - s32 func_801812E0(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - -extern void (*D_801B5E94[])(void); - -void func_80181308(void *a0) { - D_801B5E94[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80181344(void) { -} - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018134C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181388); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801813AC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181404); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018146C); - -void func_8018148C(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181494); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801814DC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181538); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801815AC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181620); - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_8018167C(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801816B0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181780); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181948); - - -extern void (*D_801B5EB4[])(void); - -void func_80181990(void *a0) { - D_801B5EB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801819CC(void) { -} - -void func_801819D4(void) { -} - -void func_801819DC(void) { -} - -void func_801819E4(void) { -} - -void func_801819EC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801819F4); - -void func_80181A38(void) { -} - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181A40); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181AC8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181CA0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181E40); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181EBC); - -extern s32 func_801826C8(void); - void func_80181F88(void) { - func_801826C8(); - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80181FA8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182078); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801820E0); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182154); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801821B4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182234); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018228C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801822EC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182334); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182384); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801823BC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182448); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801824EC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018254C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801826C8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801826FC); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182730); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182794); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182808); - - -extern void (*D_801B61B0[])(void); - -void func_80182860(void *a0) { - D_801B61B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018289C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182918); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182A38); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182A84); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182B90); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182BEC); - -extern void (*D_801B9514[])(void); - -void func_80182C2C(void *a0) { - D_801B9514[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182C68); - -void func_80182CCC(void) { -} - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182CD4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182D20); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182D60); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182DBC); - -extern void func_8012B2CC(s32 arg); - void func_80182E20(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 0x2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -extern void func_8012B2CC(s32 arg); - void func_80182E50(void *a0) { - s32 v1 = *(s32 *)((char *)a0 + 0x20); - *(s16 *)((char *)a0 + 0x2) = 4; - *(s16 *)(v1 + 0x12) = 0x600; - func_8012B2CC((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80182E80); - - -extern void (*D_801B990C[])(void); - -void func_80182FF0(void *a0) { - D_801B990C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_8018302C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_801830A8); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80183118); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80183130(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80183154); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801734BC", func_80183288); - -void func_801832F0(void) { -} - -void func_801832F8(void) { -} - diff --git a/src/ov_SC04_020/ov_SC04_020_jr_80178D40.c b/src/ov_SC04_020/ov_SC04_020_jr_80178D40.c new file mode 100644 index 000000000..578395151 --- /dev/null +++ b/src/ov_SC04_020/ov_SC04_020_jr_80178D40.c @@ -0,0 +1,4839 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80186534[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801BB628; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80186528[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018656C[]; +extern unsigned short D_80186574[]; +extern unsigned short D_8018657C[]; +extern unsigned char D_801BB630[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801BB628; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80186584[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801BB764; +extern M2C_UNK D_801BB768; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801BB6F0; +extern void (*D_801865B4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801BB76C[]; +extern u8 D_801BB774[]; +extern u8 D_801BB724[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801865BC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801865D8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801865E0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80186648[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801865EC; +extern u8 D_801865F8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018667C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80186684[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801866D8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018670C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801866FC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80186728; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801867A0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801867A8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801867B0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801867B8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801867C0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801867C8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801867D4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801867E0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801867EC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801867FC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018680C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80186814[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018681C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80186824[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018682C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80186834[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018683C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80186844[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018684C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80186854[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018685C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80186864[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018686C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80186874[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018687C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80186884[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018688C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80186894[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018689C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801868A4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801868AC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801868B4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801868BC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80186900[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801868C4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80186930[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018696C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801869C4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801869D4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801869DC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80186B44[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80186B50[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801BACD4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BC738; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801BBEA8; +extern short D_801BC7AC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BC7AC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BC7AC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801BBEA8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BC7AC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801BC6F0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801BC6F0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BC7AC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BC7AC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801BC304[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801BBEAC; + extern s32 D_801BC2C0; + extern s16 D_801BC2C4; + extern s16 D_801BC2C8; + extern s16 D_801BC2CC; + extern s16 D_801BC2D0; + extern s32 D_801BC2D8; + extern s32 D_801BC2DC; + extern s32 D_801BC2EC; + extern s16 D_801BC2F0; + extern s16 D_801BC2F4; + extern s32 D_801BC2F8; + extern s32 D_801BC300; + extern s32 D_801BC304[10]; + extern s32 D_801BC620; + extern s16 D_801BC6F0; + extern s32 D_801BC734; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801BC6F0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801BC2C0); + D_801BC2C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BC2CC, D_801BC2D0 ? 0x48 : 0x40); + (*(s16*)&D_801BC7AC) = 2; + break; + case 0: + func_80179B28(D_801BC2C0); + D_801BC2C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BC2C4, D_801BC2C8 ? 0x48 : 0x40); + (*(s16*)&D_801BC7AC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801BC620 != 0) { + func_80179B28(D_801BC2C0); + D_801BC2C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801BC2C4, D_801BC2C8 ? 0x48 : 0x40); + (*(s16*)&D_801BC7AC) = 1; + } else { + (*(s16*)&D_801BC7AC) = 3; + } + break; + case 0x32: + func_80179B28(D_801BC2C0); + D_801BC2C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801BC2C4, + D_801BC2C8 ? 0x48 : 0x40); + (*(s16*)&D_801BC7AC) = 1; + break; + case 2: + func_80179B28(D_801BC2C0); + if (D_801BC2D8 != 0) { + D_801BBEA8 = D_801BC2D8; + D_801BC2D8 = 0; + (*(s16*)&D_801BC7AC) = 3; + return; + } + (*(s16*)&D_801BC7AC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BC7AC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BC7AC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BC7AC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x1B: + D_801BC2F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BC7AC) = 4; + D_801BBEAC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BC7AC) = 5; + D_801BC2EC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801BC2EC = (s32)func_8017A3B0; + (*(s16*)&D_801BC7AC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x24: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BC7AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BC7AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BC7AC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BC7AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BC7AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BC7AC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BC7AC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BC2DC); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BC2DC); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BC2DC); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BC2DC); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x4E: + D_801BC300 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x2B: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BC7AC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BC734 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x34: + (*(s16*)&D_801BC7AC) = 3; + D_801BBEA8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801BC2D8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BC7AC) = 3; + D_801BBEA8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BC7AC) = 3; + D_801BBEA8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801BBEA8 = *(s32 *)(D_801BBEA8 + 4); + return; + case 0x37: + (*(s16*)&D_801BC7AC) = 3; + D_801BC2C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BC2C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BC7AC) = 3; + D_801BC2CC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BC2D0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BC7AC) = 3; + D_801BC2C4 = w1; + D_801BC2C8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BC7AC) = 3; + D_801BC2CC = w2; + D_801BC2D0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x43: + D_801BC2EC = (s32)func_8017A3D8; + D_801BC2F4 = 0; + (*(s16*)&D_801BC7AC) = 5; + D_801BC2F0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BC7AC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BC7AC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801BC304; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BC7AC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801BC304; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BC7AC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801BC304[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BC7AC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801BC304; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BC7AC) = 3; + break; + default: + break; + } +Lend: + D_801BBEA8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BC2D4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801BC2D4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BC2D4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801BC2D4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801BC2FC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801BC2FC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801BC2B8; + +s32 func_8017A3B0(void) { + switch (D_801BC2B8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801BC2F4; +extern short D_801BC2F0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801BC2F4) { + case 0: + func_800D0CA0(1); + D_801BC2F4 = D_801BC2F4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801BC2F0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801BC2F4 = D_801BC2F4 + 1; + if (D_801BC2F4 < 0x1E) { + return 0; + } + D_801BC2F4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801BC334; + extern s16 D_801BC336; + extern s16 D_801BC338; + extern s16 D_801BC32C; + extern s16 D_801BC32E; + extern s16 D_801BC330; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BC334, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BC336, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BC338, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BC32C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BC32E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BC330, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801BC2BC; +extern u16 D_801BC33C; +extern u16 D_801BC33E; +extern u16 D_801BC340; +extern s16 D_801BC738; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BC738 = 0; + D_801BC2BC = 0; + D_801BC33C = D_80126B5E; + D_801BC33E = D_80126B62; + D_801BC340 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186C8C[]; + extern s16 D_801BC334; + extern s16 D_801BC32C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186C8C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186C8C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BC334; + s16 *p78C = &D_801BC32C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BC738 = 1; + D_801BC2BC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801BC2DC; + extern SV4_8017B368 D_801BC2E4; + extern s16 D_801BC334; + extern s16 D_801BC32C; + extern u16 D_80186C8C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801BC2DC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801BC2E4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80186C8C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80186C8C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801BC334) = loc0; + (*(SV4_8017B368 *)&D_801BC32C) = loc1; + D_801BC738 = 1; + D_801BC2BC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80186C8C[]; + extern s16 D_801BC334; + extern s16 D_801BC336; + extern s16 D_801BC338; + extern s16 D_801BC32C; + extern s16 D_801BC32E; + extern s16 D_801BC330; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80186C8C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80186C8C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BC334; + s16 *p78C = &D_801BC32C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801BC336; + v798 = D_801BC338; + v78C = *p78C; + v78E = D_801BC32E; + v790 = D_801BC330; + __asm__ __volatile__(""); + D_801BC738 = 1; + D_801BC2BC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BC2BC; +extern s16 D_801BC334; +extern s16 D_801BC336; +extern s16 D_801BC338; +extern s16 D_801BC32C; +extern s16 D_801BC32E; +extern s16 D_801BC330; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801BC2BC = 0; + D_801BC334 = (s16) D_80114F30; + D_801BC336 = (s16) D_80114F34; + D_801BC338 = (s16) D_80114F38; + D_801BC32C = (s16) D_80114F24; + D_801BC32E = (s16) D_80114F28; + D_801BC330 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801BC34C; +extern s16 D_801BC34E; +extern s16 D_801BC350; +extern s16 D_801BC354; +extern s16 D_801BC356; +extern s16 D_801BC358; + +void func_8017B824(void) { + D_801BC34C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801BC34E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801BC350 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801BC354 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801BC356 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801BC358 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801BC34C; +extern s16 D_801BC34E; +extern s16 D_801BC350; +extern s16 D_801BC354; +extern s16 D_801BC356; +extern s16 D_801BC358; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801BC34C; + D_80114F34 = D_801BC34E; + D_80114F38 = D_801BC350; + D_80114F24 = D_801BC354; + D_80114F28 = D_801BC356; + D_80114F2C = D_801BC358; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801BC334), src[8..15] -> (*(S8_8017B8E8 *)&D_801BC32C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801BC334) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801BC32C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801BC33C; +extern u16 D_801BC33E; +extern u16 D_801BC340; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BC2BC; +extern short D_801BC344; +extern short D_801BC346; +extern short D_801BC348; +extern s16 D_801BC334; +extern s16 D_801BC336; +extern s16 D_801BC338; +extern s16 D_801BC32C; +extern s16 D_801BC32E; +extern s16 D_801BC330; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BC33C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BC33E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BC340); + (*(s16 *)&D_801BC344) = buf[0]; + (*(s16 *)&D_801BC346) = buf[1]; + (*(s16 *)&D_801BC348) = buf[2]; + D_801BC334 = D_80114F30 + buf[0]; + D_801BC2BC = 0; + D_801BC336 = D_80114F34 + buf[1]; + D_801BC338 = D_80114F38 + buf[2]; + D_801BC32C = D_80114F24 + buf[0]; + D_801BC32E = D_80114F28 + buf[1]; + D_801BC330 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801BC2DC; +extern SV4 D_801BC2E4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BC2E4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801BC2DC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801BC2E4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BC2E4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801BC2DC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801BC2E4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801BC304[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801BC304; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801BC2BC; +extern s16 D_801BC738; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801BC2BC = D_801BC2BC + 1; + if (D_801BC2BC >= 0x1F) { + D_801BC738 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801BC2BC; +extern s16 D_801BC738; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BC2BC = D_801BC2BC + 1; + if (0x18 < D_801BC2BC) { + func_8012A4BC(); + D_801BC738 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801BC2BC; +extern void (*D_801BC300)(void); +extern short D_801BC344; +extern short D_801BC346; +extern short D_801BC348; +extern s16 D_801BC738; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BC2BC = D_801BC2BC + 1; + if (D_801BC2BC >= 0x19) { + if (D_801BC300 != 0) { + (*D_801BC300)(); + } else { + D_80114F30 = D_80114F30 + D_801BC344; + D_80114F34 = D_80114F34 + D_801BC346; + D_80114F38 = D_80114F38 + D_801BC348; + D_80114F24 = D_80114F24 + D_801BC344; + D_80114F28 = D_80114F28 + D_801BC346; + D_80114F2C = D_80114F2C + D_801BC348; + func_8012A4BC(); + } + D_801BC738 = 0; + } +} + + + +extern void (*D_80186D2C[])(void); + +void func_8017BE60(void *a0) { + D_80186D2C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017BF88); + + +extern void (*D_80186D44[])(void); + +void func_8017C0E4(void *a0) { + D_80186D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C120); + + +extern void (*D_80186DE0[])(void); + +void func_8017C180(void *a0) { + D_80186DE0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80186DE8[])(void); + +void func_8017C1BC(void *a0) { + D_80186DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80186DF0[])(void); + +void func_8017C1F8(void *a0) { + D_80186DF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C3E4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C4D0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C594); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C61C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C7B8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017C9BC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017CDB0); + + +extern void (*D_801870CC[])(void); + +void func_8017CF30(void *a0) { + D_801870CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017CF6C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017CFE0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D474); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D5C4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017D604); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E4E4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E534(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E5C8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E678); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E698); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E6EC); + + +extern void (*D_801870F0[])(void); + +void func_8017E780(void *a0) { + D_801870F0[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_801870F8[])(void); + +void func_8017E7BC(void *a0) { + D_801870F8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80187104[])(void); + +void func_8017E7F8(void *a0) { + D_80187104[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017E834(void) { + D_80127050 = 1; + } + + + +extern void (*D_801871E4[])(void); + +void func_8017E848(void *a0) { + D_801871E4[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E884(void *a0) { + *(u8 *)((s32)a0 + 0x214) += 1; + } + + +extern void func_80175414(s32 arg0); + extern void func_8016F0E4(void); + extern void func_80165770(void); + void func_8017E898(s32 arg0) { + func_80175414(arg0); + ((s32 (*)(s32))func_8016F0E4)(arg0); + ((void (*)(s32))func_80165770)(arg0); + } + + + +extern void (*D_801871EC[])(void); + +void func_8017E8D0(void *a0) { + D_801871EC[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E90C); + +extern void func_8016F0E4(void); + void func_8017E920(void) { + ((s32 (*)(void))func_8016F0E4)(); + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017E940); + + +extern void (*D_801871F4[])(void); + +void func_8017EA04(void *a0) { + D_801871F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EA40); + +void func_8017EA74(void *a0) { + *(s8 *)((s32)a0 + 0xA0) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EA7C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EBBC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EDB0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EDF4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017EE50); + + +extern void (*D_801872A0[])(void); + +void func_8017EFF4(void *a0) { + D_801872A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F030); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F068); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F0DC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F1D4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F24C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F320); + + +extern void (*D_8018749C[])(void); + +void func_8017F384(void *a0) { + D_8018749C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F3C0); + +void func_8017F48C(void) { +} + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F494); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F52C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F56C); + + +extern void (*D_801874AC[])(void); + +void func_8017F5E0(void *a0) { + D_801874AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017F61C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F63C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F704); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017F9EC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FAD4); + + +extern void (*D_801874C4[])(void); + +void func_8017FC30(void *a0) { + D_801874C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FC6C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FCFC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FD70); + + +extern void (*D_80187580[])(void); + +void func_8017FE10(void *a0) { + D_80187580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FE4C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FED0); + + +extern void (*D_80187598[])(void); + +void func_8017FF30(void *a0) { + D_80187598[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8017FF6C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", listCdBuffer); + +void func_80180020(void) { +} + + +extern void (*D_801875D0[])(void); + +void func_80180028(void *a0) { + D_801875D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180064); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801800F4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180330); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180380); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018043C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180554); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801805E0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018067C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180708); + + +extern void (*D_80187694[])(void); + +void func_80180840(void *a0) { + D_80187694[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018087C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180918); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180978); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801809EC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180A2C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180A6C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180AF0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180B68); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180BD0); + + +extern void (*D_801AA3F4[])(void); + +void func_80180D48(void *a0) { + D_801AA3F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801AA414[])(void); + +void func_80180D84(void *a0) { + D_801AA414[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180DC0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180E4C); + + +extern s32 func_80029504(void); +extern void func_800183E0(s32 arg0); +extern char D_801AA41C; + +void func_80180EA4(void) { + if (!(func_80029504() < 0x492)) { + func_800183E0((s32)&D_801AA41C); + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180EE0); + +void func_80180F78(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +void func_80180F88(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 0x2; + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80180F98); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181034); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181060); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018108C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801810B8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018113C); + + +extern s32 func_8018113C(s32 arg); +extern void func_801812A0(void *a0); + +void func_8018126C(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_8018113C((s32)a0); + func_801812A0(a0); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801812A0); + + +extern short D_800BA2BA; + s32 func_801812E0(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + +extern void (*D_801B5E94[])(void); + +void func_80181308(void *a0) { + D_801B5E94[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80181344(void) { +} + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018134C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181388); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801813AC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181404); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018146C); + +void func_8018148C(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181494); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801814DC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181538); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801815AC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181620); + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_8018167C(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801816B0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181780); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181948); + + +extern void (*D_801B5EB4[])(void); + +void func_80181990(void *a0) { + D_801B5EB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801819CC(void) { +} + +void func_801819D4(void) { +} + +void func_801819DC(void) { +} + +void func_801819E4(void) { +} + +void func_801819EC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801819F4); + +void func_80181A38(void) { +} + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181A40); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181AC8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181CA0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181E40); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181EBC); + +extern s32 func_801826C8(void); + void func_80181F88(void) { + func_801826C8(); + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80181FA8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182078); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801820E0); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182154); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801821B4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182234); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018228C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801822EC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182334); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182384); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801823BC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182448); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801824EC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018254C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801826C8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801826FC); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182730); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182794); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182808); + + +extern void (*D_801B61B0[])(void); + +void func_80182860(void *a0) { + D_801B61B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018289C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182918); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182A38); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182A84); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182B90); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182BEC); + +extern void (*D_801B9514[])(void); + +void func_80182C2C(void *a0) { + D_801B9514[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182C68); + +void func_80182CCC(void) { +} + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182CD4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182D20); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182D60); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182DBC); + +extern void func_8012B2CC(s32 arg); + void func_80182E20(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 0x2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +extern void func_8012B2CC(s32 arg); + void func_80182E50(void *a0) { + s32 v1 = *(s32 *)((char *)a0 + 0x20); + *(s16 *)((char *)a0 + 0x2) = 4; + *(s16 *)(v1 + 0x12) = 0x600; + func_8012B2CC((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80182E80); + + +extern void (*D_801B990C[])(void); + +void func_80182FF0(void *a0) { + D_801B990C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_8018302C); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_801830A8); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80183118); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80183130(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80183154); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_80178D40", func_80183288); + +void func_801832F0(void) { +} + +void func_801832F8(void) { +} + + diff --git a/src/ov_SC04_021/ov_SC04_021_jr_801734BC.c b/src/ov_SC04_021/ov_SC04_021_jr_801734BC.c index a14608841..d55fa3407 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_801734BC.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_801734BC.c @@ -3084,951 +3084,3 @@ void func_80178D18(void) { D_8018FB24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018F954; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018F954 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018F910; - -s32 func_8017A3B0(void) { - switch (D_8018F910) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018F94C; -extern short D_8018F948; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018F94C) { - case 0: - func_800D0CA0(1); - D_8018F94C = D_8018F94C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018F948; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018F94C = D_8018F94C + 1; - if (D_8018F94C < 0x1E) { - return 0; - } - D_8018F94C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018F914; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; -extern s16 D_8018FAB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8018FAB0 = 0; - D_8018F914 = 0; - D_8018F994 = D_80126B5E; - D_8018F996 = D_80126B62; - D_8018F998 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8018FAB0 = 1; - D_8018F914 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018F934; - extern SV4_8017B368 D_8018F93C; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u16 D_80182BB8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018F934; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018F93C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018F98C) = loc0; - (*(SV4_8017B368 *)&D_8018F984) = loc1; - D_8018FAB0 = 1; - D_8018F914 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018F98E; - v798 = D_8018F990; - v78C = *p78C; - v78E = D_8018F986; - v790 = D_8018F988; - __asm__ __volatile__(""); - D_8018FAB0 = 1; - D_8018F914 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018F914 = 0; - D_8018F98C = (s16) D_80114F30; - D_8018F98E = (s16) D_80114F34; - D_8018F990 = (s16) D_80114F38; - D_8018F984 = (s16) D_80114F24; - D_8018F986 = (s16) D_80114F28; - D_8018F988 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -void func_8017B824(void) { - D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018F9A4; - D_80114F34 = D_8018F9A6; - D_80114F38 = D_8018F9A8; - D_80114F24 = D_8018F9AC; - D_80114F28 = D_8018F9AE; - D_80114F2C = D_8018F9B0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); - (*(s16 *)&D_8018F99C) = buf[0]; - (*(s16 *)&D_8018F99E) = buf[1]; - (*(s16 *)&D_8018F9A0) = buf[2]; - D_8018F98C = D_80114F30 + buf[0]; - D_8018F914 = 0; - D_8018F98E = D_80114F34 + buf[1]; - D_8018F990 = D_80114F38 + buf[2]; - D_8018F984 = D_80114F24 + buf[0]; - D_8018F986 = D_80114F28 + buf[1]; - D_8018F988 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018F934; -extern SV4 D_8018F93C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018F934 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018F93C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018F934) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018F93C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018F95C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018F95C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x1F) { - D_8018FAB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (0x18 < D_8018F914) { - func_8012A4BC(); - D_8018FAB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018F914; -extern void (*D_8018F958)(void); -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018FAB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x19) { - if (D_8018F958 != 0) { - (*D_8018F958)(); - } else { - D_80114F30 = D_80114F30 + D_8018F99C; - D_80114F34 = D_80114F34 + D_8018F99E; - D_80114F38 = D_80114F38 + D_8018F9A0; - D_80114F24 = D_80114F24 + D_8018F99C; - D_80114F28 = D_80114F28 + D_8018F99E; - D_80114F2C = D_80114F2C + D_8018F9A0; - func_8012A4BC(); - } - D_8018FAB0 = 0; - } -} - - - -extern void (*D_80182C58[])(void); - -void func_8017BE60(void *a0) { - D_80182C58[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80182C70[])(void); - -void func_8017BEBC(void *a0) { - D_80182C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017BEF8); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017BFA4); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017C014); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017C3EC); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017C688); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017D5C0); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E4A0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E508); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E550(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E5EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E62C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E6A8); - - -extern void (*D_80182C78[])(void); - -void func_8017E6C8(void *a0) { - D_80182C78[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C80[])(void); - -void func_8017E704(void *a0) { - D_80182C80[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C8C[])(void); - -void func_8017E740(void *a0) { - D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182F38[])(void); - -void func_8017E77C(void *a0) { - D_80182F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E808); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E91C); - - -extern void (*D_80182F4C[])(void); - -void func_8017E950(void *a0) { - D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E98C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017E9CC); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EA78); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EACC); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EB4C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EBC8); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EC2C); - - -extern void (*D_80182F68[])(void); - -void func_8017EC84(void *a0) { - D_80182F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017ECC0); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017ED0C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017ED68); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EDB8); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EE68); - - -extern void (*D_80182F74[])(void); - -void func_8017EF10(void *a0) { - D_80182F74[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EF4C); - - -extern void func_8017EFA0(void); -extern s16 D_80126942; -extern s16 D_80126944; - -void func_8017EF6C(void) { - D_80126942 = -0xC1; - D_80126944 = 0; - func_8017EFA0(); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017EFA0); - - -s32 func_8017F14C(void) { - return 135; -} - - - -extern void (*D_80183110[])(void); - -void func_8017F154(void *a0) { - D_80183110[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_801734BC", func_8017F1B8); - -DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ - diff --git a/src/ov_SC04_021/ov_SC04_021_jr_80178D40.c b/src/ov_SC04_021/ov_SC04_021_jr_80178D40.c new file mode 100644 index 000000000..c6c7184d8 --- /dev/null +++ b/src/ov_SC04_021/ov_SC04_021_jr_80178D40.c @@ -0,0 +1,4397 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182460[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018EC80; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182454[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018EC80; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801824B0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; +extern void (*D_801824E0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801824E8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182504[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018250C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182518; +extern u8 D_80182524; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801825A8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801825B0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182604[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182628[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182654; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801826CC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801826D4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801826DC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801826E4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801826EC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801826F4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182700[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018270C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182718[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182728[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182738[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182740[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182748[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182750[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182758[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182760[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182768[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182770[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182778[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182780[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182788[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182790[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182798[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801827A0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801827A8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801827B0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801827B8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801827C0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801827C8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801827D0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801827D8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801827E0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801827E8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018282C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801827F0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018285C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182898[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801828F0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182900[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182908[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182A70[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182A7C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E370; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8018FAB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F500; +extern short D_8018FB24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8018FB24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8018FB24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F500 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8018FB24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8018FA80 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8018FA80 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8018FB24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8018FB24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018F95C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F504; + extern s32 D_8018F918; + extern s16 D_8018F91C; + extern s16 D_8018F920; + extern s16 D_8018F924; + extern s16 D_8018F928; + extern s32 D_8018F930; + extern s32 D_8018F934; + extern s32 D_8018F944; + extern s16 D_8018F948; + extern s16 D_8018F94C; + extern s32 D_8018F950; + extern s32 D_8018F958; + extern s32 D_8018F95C[10]; + extern s32 D_8018F9C8; + extern s16 D_8018FA80; + extern s32 D_8018FAAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8018FA80; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F924, D_8018F928 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 2; + break; + case 0: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8018F9C8 != 0) { + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + } else { + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x32: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018F91C, + D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 2: + func_80179B28(D_8018F918); + if (D_8018F930 != 0) { + D_8018F500 = D_8018F930; + D_8018F930 = 0; + (*(s16*)&D_8018FB24) = 3; + return; + } + (*(s16*)&D_8018FB24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1B: + D_8018F950 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8018FB24) = 4; + D_8018F504 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8018FB24) = 5; + D_8018F944 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018F944 = (s32)func_8017A3B0; + (*(s16*)&D_8018FB24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x24: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4E: + D_8018F958 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2B: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8018FAAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x34: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018F930 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F500 = *(s32 *)(D_8018F500 + 4); + return; + case 0x37: + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F920 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F928 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = w1; + D_8018F920 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = w2; + D_8018F928 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x43: + D_8018F944 = (s32)func_8017A3D8; + D_8018F94C = 0; + (*(s16*)&D_8018FB24) = 5; + D_8018F948 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018F95C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018F95C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8018FB24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018F95C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018F95C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8018FB24) = 3; + break; + default: + break; + } +Lend: + D_8018F500 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018F954; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018F954 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018F910; + +s32 func_8017A3B0(void) { + switch (D_8018F910) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018F94C; +extern short D_8018F948; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018F94C) { + case 0: + func_800D0CA0(1); + D_8018F94C = D_8018F94C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018F948; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018F94C = D_8018F94C + 1; + if (D_8018F94C < 0x1E) { + return 0; + } + D_8018F94C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018F914; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; +extern s16 D_8018FAB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8018FAB0 = 0; + D_8018F914 = 0; + D_8018F994 = D_80126B5E; + D_8018F996 = D_80126B62; + D_8018F998 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8018FAB0 = 1; + D_8018F914 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018F934; + extern SV4_8017B368 D_8018F93C; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u16 D_80182BB8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018F934; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018F93C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018F98C) = loc0; + (*(SV4_8017B368 *)&D_8018F984) = loc1; + D_8018FAB0 = 1; + D_8018F914 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018F98E; + v798 = D_8018F990; + v78C = *p78C; + v78E = D_8018F986; + v790 = D_8018F988; + __asm__ __volatile__(""); + D_8018FAB0 = 1; + D_8018F914 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018F914 = 0; + D_8018F98C = (s16) D_80114F30; + D_8018F98E = (s16) D_80114F34; + D_8018F990 = (s16) D_80114F38; + D_8018F984 = (s16) D_80114F24; + D_8018F986 = (s16) D_80114F28; + D_8018F988 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +void func_8017B824(void) { + D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018F9A4; + D_80114F34 = D_8018F9A6; + D_80114F38 = D_8018F9A8; + D_80114F24 = D_8018F9AC; + D_80114F28 = D_8018F9AE; + D_80114F2C = D_8018F9B0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); + (*(s16 *)&D_8018F99C) = buf[0]; + (*(s16 *)&D_8018F99E) = buf[1]; + (*(s16 *)&D_8018F9A0) = buf[2]; + D_8018F98C = D_80114F30 + buf[0]; + D_8018F914 = 0; + D_8018F98E = D_80114F34 + buf[1]; + D_8018F990 = D_80114F38 + buf[2]; + D_8018F984 = D_80114F24 + buf[0]; + D_8018F986 = D_80114F28 + buf[1]; + D_8018F988 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018F934; +extern SV4 D_8018F93C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018F934 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018F93C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018F934) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018F93C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018F95C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018F95C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x1F) { + D_8018FAB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (0x18 < D_8018F914) { + func_8012A4BC(); + D_8018FAB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018F914; +extern void (*D_8018F958)(void); +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018FAB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x19) { + if (D_8018F958 != 0) { + (*D_8018F958)(); + } else { + D_80114F30 = D_80114F30 + D_8018F99C; + D_80114F34 = D_80114F34 + D_8018F99E; + D_80114F38 = D_80114F38 + D_8018F9A0; + D_80114F24 = D_80114F24 + D_8018F99C; + D_80114F28 = D_80114F28 + D_8018F99E; + D_80114F2C = D_80114F2C + D_8018F9A0; + func_8012A4BC(); + } + D_8018FAB0 = 0; + } +} + + + +extern void (*D_80182C58[])(void); + +void func_8017BE60(void *a0) { + D_80182C58[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80182C70[])(void); + +void func_8017BEBC(void *a0) { + D_80182C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017BEF8); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017BFA4); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017C014); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017C3EC); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017C688); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017D5C0); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E4A0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E4E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E508); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E550(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E5EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E62C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E6A8); + + +extern void (*D_80182C78[])(void); + +void func_8017E6C8(void *a0) { + D_80182C78[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C80[])(void); + +void func_8017E704(void *a0) { + D_80182C80[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C8C[])(void); + +void func_8017E740(void *a0) { + D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182F38[])(void); + +void func_8017E77C(void *a0) { + D_80182F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E808); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E91C); + + +extern void (*D_80182F4C[])(void); + +void func_8017E950(void *a0) { + D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E98C); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017E9CC); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EA78); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EACC); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EB4C); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EBC8); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EC2C); + + +extern void (*D_80182F68[])(void); + +void func_8017EC84(void *a0) { + D_80182F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017ECC0); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017ED0C); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017ED68); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EDB8); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EE68); + + +extern void (*D_80182F74[])(void); + +void func_8017EF10(void *a0) { + D_80182F74[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EF4C); + + +extern void func_8017EFA0(void); +extern s16 D_80126942; +extern s16 D_80126944; + +void func_8017EF6C(void) { + D_80126942 = -0xC1; + D_80126944 = 0; + func_8017EFA0(); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017EFA0); + + +s32 func_8017F14C(void) { + return 135; +} + + + +extern void (*D_80183110[])(void); + +void func_8017F154(void *a0) { + D_80183110[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_80178D40", func_8017F1B8); + +DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ + + diff --git a/src/ov_SC05_000/ov_SC05_000_jr_801734BC.c b/src/ov_SC05_000/ov_SC05_000_jr_801734BC.c index ab5c6e45b..5c7ef8264 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_801734BC.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_801734BC.c @@ -3082,952 +3082,3 @@ void func_80178D18(void) { D_8019AC54 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019AA5C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019AA5C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019AA5C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019AA5C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019AA84; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019AA84 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019AA40; - -s32 func_8017A3B0(void) { - switch (D_8019AA40) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019AA7C; -extern short D_8019AA78; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019AA7C) { - case 0: - func_800D0CA0(1); - D_8019AA7C = D_8019AA7C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019AA78; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019AA7C = D_8019AA7C + 1; - if (D_8019AA7C < 0x1E) { - return 0; - } - D_8019AA7C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019AABC; - extern s16 D_8019AABE; - extern s16 D_8019AAC0; - extern s16 D_8019AAB4; - extern s16 D_8019AAB6; - extern s16 D_8019AAB8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019AABC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019AABE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019AAC0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019AAB4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019AAB6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019AAB8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019AA44; -extern u16 D_8019AAC4; -extern u16 D_8019AAC6; -extern u16 D_8019AAC8; -extern s16 D_8019ABE0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019ABE0 = 0; - D_8019AA44 = 0; - D_8019AAC4 = D_80126B5E; - D_8019AAC6 = D_80126B62; - D_8019AAC8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181BCC[]; - extern s16 D_8019AABC; - extern s16 D_8019AAB4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181BCC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181BCC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019AABC; - s16 *p78C = &D_8019AAB4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019ABE0 = 1; - D_8019AA44 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019AA64; - extern SV4_8017B368 D_8019AA6C; - extern s16 D_8019AABC; - extern s16 D_8019AAB4; - extern u16 D_80181BCC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019AA64; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019AA6C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181BCC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181BCC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019AABC) = loc0; - (*(SV4_8017B368 *)&D_8019AAB4) = loc1; - D_8019ABE0 = 1; - D_8019AA44 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181BCC[]; - extern s16 D_8019AABC; - extern s16 D_8019AABE; - extern s16 D_8019AAC0; - extern s16 D_8019AAB4; - extern s16 D_8019AAB6; - extern s16 D_8019AAB8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181BCC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181BCC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019AABC; - s16 *p78C = &D_8019AAB4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019AABE; - v798 = D_8019AAC0; - v78C = *p78C; - v78E = D_8019AAB6; - v790 = D_8019AAB8; - __asm__ __volatile__(""); - D_8019ABE0 = 1; - D_8019AA44 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019AA44; -extern s16 D_8019AABC; -extern s16 D_8019AABE; -extern s16 D_8019AAC0; -extern s16 D_8019AAB4; -extern s16 D_8019AAB6; -extern s16 D_8019AAB8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019AA44 = 0; - D_8019AABC = (s16) D_80114F30; - D_8019AABE = (s16) D_80114F34; - D_8019AAC0 = (s16) D_80114F38; - D_8019AAB4 = (s16) D_80114F24; - D_8019AAB6 = (s16) D_80114F28; - D_8019AAB8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019AAD4; -extern s16 D_8019AAD6; -extern s16 D_8019AAD8; -extern s16 D_8019AADC; -extern s16 D_8019AADE; -extern s16 D_8019AAE0; - -void func_8017B824(void) { - D_8019AAD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019AAD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019AAD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019AADC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019AADE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019AAE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019AAD4; -extern s16 D_8019AAD6; -extern s16 D_8019AAD8; -extern s16 D_8019AADC; -extern s16 D_8019AADE; -extern s16 D_8019AAE0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019AAD4; - D_80114F34 = D_8019AAD6; - D_80114F38 = D_8019AAD8; - D_80114F24 = D_8019AADC; - D_80114F28 = D_8019AADE; - D_80114F2C = D_8019AAE0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019AABC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019AAB4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019AABC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019AAB4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019AAC4; -extern u16 D_8019AAC6; -extern u16 D_8019AAC8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019AA44; -extern short D_8019AACC; -extern short D_8019AACE; -extern short D_8019AAD0; -extern s16 D_8019AABC; -extern s16 D_8019AABE; -extern s16 D_8019AAC0; -extern s16 D_8019AAB4; -extern s16 D_8019AAB6; -extern s16 D_8019AAB8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019AAC4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019AAC6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019AAC8); - (*(s16 *)&D_8019AACC) = buf[0]; - (*(s16 *)&D_8019AACE) = buf[1]; - (*(s16 *)&D_8019AAD0) = buf[2]; - D_8019AABC = D_80114F30 + buf[0]; - D_8019AA44 = 0; - D_8019AABE = D_80114F34 + buf[1]; - D_8019AAC0 = D_80114F38 + buf[2]; - D_8019AAB4 = D_80114F24 + buf[0]; - D_8019AAB6 = D_80114F28 + buf[1]; - D_8019AAB8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019AA64; -extern SV4 D_8019AA6C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019AA6C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019AA64 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019AA6C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019AA6C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019AA64) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019AA6C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019AA8C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019AA8C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019AA44; -extern s16 D_8019ABE0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019AA44 = D_8019AA44 + 1; - if (D_8019AA44 >= 0x1F) { - D_8019ABE0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019AA44; -extern s16 D_8019ABE0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019AA44 = D_8019AA44 + 1; - if (0x18 < D_8019AA44) { - func_8012A4BC(); - D_8019ABE0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019AA44; -extern void (*D_8019AA88)(void); -extern short D_8019AACC; -extern short D_8019AACE; -extern short D_8019AAD0; -extern s16 D_8019ABE0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019AA44 = D_8019AA44 + 1; - if (D_8019AA44 >= 0x19) { - if (D_8019AA88 != 0) { - (*D_8019AA88)(); - } else { - D_80114F30 = D_80114F30 + D_8019AACC; - D_80114F34 = D_80114F34 + D_8019AACE; - D_80114F38 = D_80114F38 + D_8019AAD0; - D_80114F24 = D_80114F24 + D_8019AACC; - D_80114F28 = D_80114F28 + D_8019AACE; - D_80114F2C = D_80114F2C + D_8019AAD0; - func_8012A4BC(); - } - D_8019ABE0 = 0; - } -} - - - -extern void (*D_80181C6C[])(void); - -void func_8017BE60(void *a0) { - D_80181C6C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017CE68); - - -extern void (*D_80181C84[])(void); - -void func_8017CFC4(void *a0) { - D_80181C84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D000); - - -extern void (*D_80181D70[])(void); - -void func_8017D060(void *a0) { - D_80181D70[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D09C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D0E0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181D78[])(void); - -void func_8017D104(void *a0) { - D_80181D78[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D140); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D180(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D1FC(void) { - func_800D1EBC(); - } - - - -extern void (*D_80181D84[])(void); - -void func_8017D21C(void *a0) { - D_80181D84[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D258); - - -extern void (*D_80181D90[])(void); - -void func_8017D2CC(void *a0) { - D_80181D90[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D308); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D348); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D370); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D398); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D3C0); - - -extern void (*D_80181DCC[])(void); - -void func_8017D464(void *a0) { - D_80181DCC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D4A0); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D538); - - -extern void (*D_80181E10[])(void); - -void func_8017D6D0(void *a0) { - D_80181E10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D70C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D754); - -void func_8017D820(void) { -} - - -extern void (*D_80181E5C[])(void); - -void func_8017D828(void *a0) { - D_80181E5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D864); - -void func_8017D8CC(void) { -} - - -s32 func_8017D8D4(void) { - return 95; -} - - - -extern void (*D_80181ED8[])(void); - -void func_8017D8DC(void *a0) { - D_80181ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017D918); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DB10); - - -extern void (*D_80181F54[])(void); - -void func_8017DC9C(void *a0) { - D_80181F54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DCD8); - -void func_8017DD3C(void) { -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_80181EA8; - -void func_8017DD44(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80181EA8); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DE70); - - -extern void (*D_80181FD0[])(void); - -void func_8017DECC(void *a0) { - D_80181FD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8017DF38(s32 *a0); -extern void func_80146CA0(void *a0); - -void func_8017DF08(s32 *a0) { - func_8017DF38(a0); - ((s32 (*)(s32))func_80146CA0)((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DF38); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017DFDC); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017E098); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017E1A0); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_801734BC", func_8017E1E8); - diff --git a/src/ov_SC05_000/ov_SC05_000_jr_80178D40.c b/src/ov_SC05_000/ov_SC05_000_jr_80178D40.c new file mode 100644 index 000000000..da033bf9a --- /dev/null +++ b/src/ov_SC05_000/ov_SC05_000_jr_80178D40.c @@ -0,0 +1,4396 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181474[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80199DB0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181468[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801814AC[]; +extern unsigned short D_801814B4[]; +extern unsigned short D_801814BC[]; +extern unsigned char D_80199DB8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80199DB0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801814C4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199EEC; +extern M2C_UNK D_80199EF0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199E78; +extern void (*D_801814F4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80199EF4[]; +extern u8 D_80199EFC[]; +extern u8 D_80199EAC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801814FC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181518[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181520[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181588[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018152C; +extern u8 D_80181538; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801815BC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801815C4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181618[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018164C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018163C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181668; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801816E0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801816E8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801816F0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801816F8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181700[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181708[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181714[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181720[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018172C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018173C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018174C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181754[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018175C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181764[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018176C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181774[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018177C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181784[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018178C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181794[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018179C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801817A4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801817AC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801817B4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801817BC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801817C4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801817CC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801817D4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801817DC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801817E4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801817EC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801817F4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801817FC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181840[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181804; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181870[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801818AC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181904[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80181914[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018191C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181A84[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80181A90[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801994C0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019ABE0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019A630; +extern short D_8019AC54; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019AC54) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019AC54)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019A630 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019AC54) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019ABB0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019ABB0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019AC54) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019AC54) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019AA8C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019A634; + extern s32 D_8019AA48; + extern s16 D_8019AA4C; + extern s16 D_8019AA50; + extern s16 D_8019AA54; + extern s16 D_8019AA58; + extern s32 D_8019AA60; + extern s32 D_8019AA64; + extern s32 D_8019AA74; + extern s16 D_8019AA78; + extern s16 D_8019AA7C; + extern s32 D_8019AA80; + extern s32 D_8019AA88; + extern s32 D_8019AA8C[10]; + extern s32 D_8019AAF8; + extern s16 D_8019ABB0; + extern s32 D_8019ABDC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019ABB0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019AA48); + D_8019AA48 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019AA54, D_8019AA58 ? 0x48 : 0x40); + (*(s16*)&D_8019AC54) = 2; + break; + case 0: + func_80179B28(D_8019AA48); + D_8019AA48 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019AA4C, D_8019AA50 ? 0x48 : 0x40); + (*(s16*)&D_8019AC54) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019AAF8 != 0) { + func_80179B28(D_8019AA48); + D_8019AA48 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019AA4C, D_8019AA50 ? 0x48 : 0x40); + (*(s16*)&D_8019AC54) = 1; + } else { + (*(s16*)&D_8019AC54) = 3; + } + break; + case 0x32: + func_80179B28(D_8019AA48); + D_8019AA48 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019AA4C, + D_8019AA50 ? 0x48 : 0x40); + (*(s16*)&D_8019AC54) = 1; + break; + case 2: + func_80179B28(D_8019AA48); + if (D_8019AA60 != 0) { + D_8019A630 = D_8019AA60; + D_8019AA60 = 0; + (*(s16*)&D_8019AC54) = 3; + return; + } + (*(s16*)&D_8019AC54) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019AC54) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019AC54) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019AC54) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019AC54) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019AC54) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x1B: + D_8019AA80 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019AC54) = 4; + D_8019A634 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019AC54) = 5; + D_8019AA74 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019AA74 = (s32)func_8017A3B0; + (*(s16*)&D_8019AC54) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x24: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019AC54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019AC54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019AC54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019AC54) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019AC54) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019AC54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019AA64); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019AA64); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019AA64); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019AA64); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x4E: + D_8019AA88 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x2B: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019AC54) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019ABDC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x34: + (*(s16*)&D_8019AC54) = 3; + D_8019A630 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019AA60 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019AC54) = 3; + D_8019A630 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019AC54) = 3; + D_8019A630 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019A630 = *(s32 *)(D_8019A630 + 4); + return; + case 0x37: + (*(s16*)&D_8019AC54) = 3; + D_8019AA4C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019AA50 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019AC54) = 3; + D_8019AA54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019AA58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019AC54) = 3; + D_8019AA4C = w1; + D_8019AA50 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019AC54) = 3; + D_8019AA54 = w2; + D_8019AA58 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x43: + D_8019AA74 = (s32)func_8017A3D8; + D_8019AA7C = 0; + (*(s16*)&D_8019AC54) = 5; + D_8019AA78 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC54) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC54) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019AA8C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019AC54) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019AA8C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019AC54) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019AA8C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019AC54) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019AA8C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019AC54) = 3; + break; + default: + break; + } +Lend: + D_8019A630 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019AA5C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019AA5C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019AA5C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019AA5C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019AA84; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019AA84 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019AA40; + +s32 func_8017A3B0(void) { + switch (D_8019AA40) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019AA7C; +extern short D_8019AA78; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019AA7C) { + case 0: + func_800D0CA0(1); + D_8019AA7C = D_8019AA7C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019AA78; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019AA7C = D_8019AA7C + 1; + if (D_8019AA7C < 0x1E) { + return 0; + } + D_8019AA7C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019AABC; + extern s16 D_8019AABE; + extern s16 D_8019AAC0; + extern s16 D_8019AAB4; + extern s16 D_8019AAB6; + extern s16 D_8019AAB8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019AABC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019AABE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019AAC0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019AAB4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019AAB6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019AAB8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019AA44; +extern u16 D_8019AAC4; +extern u16 D_8019AAC6; +extern u16 D_8019AAC8; +extern s16 D_8019ABE0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019ABE0 = 0; + D_8019AA44 = 0; + D_8019AAC4 = D_80126B5E; + D_8019AAC6 = D_80126B62; + D_8019AAC8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181BCC[]; + extern s16 D_8019AABC; + extern s16 D_8019AAB4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181BCC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181BCC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019AABC; + s16 *p78C = &D_8019AAB4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019ABE0 = 1; + D_8019AA44 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019AA64; + extern SV4_8017B368 D_8019AA6C; + extern s16 D_8019AABC; + extern s16 D_8019AAB4; + extern u16 D_80181BCC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019AA64; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019AA6C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181BCC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181BCC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019AABC) = loc0; + (*(SV4_8017B368 *)&D_8019AAB4) = loc1; + D_8019ABE0 = 1; + D_8019AA44 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181BCC[]; + extern s16 D_8019AABC; + extern s16 D_8019AABE; + extern s16 D_8019AAC0; + extern s16 D_8019AAB4; + extern s16 D_8019AAB6; + extern s16 D_8019AAB8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181BCC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181BCC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019AABC; + s16 *p78C = &D_8019AAB4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019AABE; + v798 = D_8019AAC0; + v78C = *p78C; + v78E = D_8019AAB6; + v790 = D_8019AAB8; + __asm__ __volatile__(""); + D_8019ABE0 = 1; + D_8019AA44 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019AA44; +extern s16 D_8019AABC; +extern s16 D_8019AABE; +extern s16 D_8019AAC0; +extern s16 D_8019AAB4; +extern s16 D_8019AAB6; +extern s16 D_8019AAB8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019AA44 = 0; + D_8019AABC = (s16) D_80114F30; + D_8019AABE = (s16) D_80114F34; + D_8019AAC0 = (s16) D_80114F38; + D_8019AAB4 = (s16) D_80114F24; + D_8019AAB6 = (s16) D_80114F28; + D_8019AAB8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019AAD4; +extern s16 D_8019AAD6; +extern s16 D_8019AAD8; +extern s16 D_8019AADC; +extern s16 D_8019AADE; +extern s16 D_8019AAE0; + +void func_8017B824(void) { + D_8019AAD4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019AAD6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019AAD8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019AADC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019AADE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019AAE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019AAD4; +extern s16 D_8019AAD6; +extern s16 D_8019AAD8; +extern s16 D_8019AADC; +extern s16 D_8019AADE; +extern s16 D_8019AAE0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019AAD4; + D_80114F34 = D_8019AAD6; + D_80114F38 = D_8019AAD8; + D_80114F24 = D_8019AADC; + D_80114F28 = D_8019AADE; + D_80114F2C = D_8019AAE0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019AABC), src[8..15] -> (*(S8_8017B8E8 *)&D_8019AAB4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019AABC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019AAB4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019AAC4; +extern u16 D_8019AAC6; +extern u16 D_8019AAC8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019AA44; +extern short D_8019AACC; +extern short D_8019AACE; +extern short D_8019AAD0; +extern s16 D_8019AABC; +extern s16 D_8019AABE; +extern s16 D_8019AAC0; +extern s16 D_8019AAB4; +extern s16 D_8019AAB6; +extern s16 D_8019AAB8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019AAC4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019AAC6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019AAC8); + (*(s16 *)&D_8019AACC) = buf[0]; + (*(s16 *)&D_8019AACE) = buf[1]; + (*(s16 *)&D_8019AAD0) = buf[2]; + D_8019AABC = D_80114F30 + buf[0]; + D_8019AA44 = 0; + D_8019AABE = D_80114F34 + buf[1]; + D_8019AAC0 = D_80114F38 + buf[2]; + D_8019AAB4 = D_80114F24 + buf[0]; + D_8019AAB6 = D_80114F28 + buf[1]; + D_8019AAB8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019AA64; +extern SV4 D_8019AA6C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019AA6C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019AA64 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019AA6C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019AA6C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019AA64) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019AA6C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019AA8C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019AA8C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019AA44; +extern s16 D_8019ABE0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019AA44 = D_8019AA44 + 1; + if (D_8019AA44 >= 0x1F) { + D_8019ABE0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019AA44; +extern s16 D_8019ABE0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019AA44 = D_8019AA44 + 1; + if (0x18 < D_8019AA44) { + func_8012A4BC(); + D_8019ABE0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019AA44; +extern void (*D_8019AA88)(void); +extern short D_8019AACC; +extern short D_8019AACE; +extern short D_8019AAD0; +extern s16 D_8019ABE0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019AA44 = D_8019AA44 + 1; + if (D_8019AA44 >= 0x19) { + if (D_8019AA88 != 0) { + (*D_8019AA88)(); + } else { + D_80114F30 = D_80114F30 + D_8019AACC; + D_80114F34 = D_80114F34 + D_8019AACE; + D_80114F38 = D_80114F38 + D_8019AAD0; + D_80114F24 = D_80114F24 + D_8019AACC; + D_80114F28 = D_80114F28 + D_8019AACE; + D_80114F2C = D_80114F2C + D_8019AAD0; + func_8012A4BC(); + } + D_8019ABE0 = 0; + } +} + + + +extern void (*D_80181C6C[])(void); + +void func_8017BE60(void *a0) { + D_80181C6C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017CE68); + + +extern void (*D_80181C84[])(void); + +void func_8017CFC4(void *a0) { + D_80181C84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D000); + + +extern void (*D_80181D70[])(void); + +void func_8017D060(void *a0) { + D_80181D70[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D09C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D0E0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181D78[])(void); + +void func_8017D104(void *a0) { + D_80181D78[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D140); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D180(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D1FC(void) { + func_800D1EBC(); + } + + + +extern void (*D_80181D84[])(void); + +void func_8017D21C(void *a0) { + D_80181D84[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D258); + + +extern void (*D_80181D90[])(void); + +void func_8017D2CC(void *a0) { + D_80181D90[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D308); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D348); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D370); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D398); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D3C0); + + +extern void (*D_80181DCC[])(void); + +void func_8017D464(void *a0) { + D_80181DCC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D4A0); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D538); + + +extern void (*D_80181E10[])(void); + +void func_8017D6D0(void *a0) { + D_80181E10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D70C); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D754); + +void func_8017D820(void) { +} + + +extern void (*D_80181E5C[])(void); + +void func_8017D828(void *a0) { + D_80181E5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D864); + +void func_8017D8CC(void) { +} + + +s32 func_8017D8D4(void) { + return 95; +} + + + +extern void (*D_80181ED8[])(void); + +void func_8017D8DC(void *a0) { + D_80181ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017D918); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DB10); + + +extern void (*D_80181F54[])(void); + +void func_8017DC9C(void *a0) { + D_80181F54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DCD8); + +void func_8017DD3C(void) { +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_80181EA8; + +void func_8017DD44(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_80181EA8); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DE70); + + +extern void (*D_80181FD0[])(void); + +void func_8017DECC(void *a0) { + D_80181FD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8017DF38(s32 *a0); +extern void func_80146CA0(void *a0); + +void func_8017DF08(s32 *a0) { + func_8017DF38(a0); + ((s32 (*)(s32))func_80146CA0)((s32)a0); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DF38); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017DFDC); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017E098); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017E1A0); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_80178D40", func_8017E1E8); + + diff --git a/src/ov_SC05_001/ov_SC05_001_jr_801734BC.c b/src/ov_SC05_001/ov_SC05_001_jr_801734BC.c index 880c45ef1..29789adbf 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_801734BC.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_801734BC.c @@ -3084,1395 +3084,3 @@ void func_80178D18(void) { D_801B6004 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B5B1C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B5B1C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B5B1C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B5B1C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B5B44; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B5B44 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B5B00; - -s32 func_8017A3B0(void) { - switch (D_801B5B00) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B5B3C; -extern short D_801B5B38; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B5B3C) { - case 0: - func_800D0CA0(1); - D_801B5B3C = D_801B5B3C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B5B38; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B5B3C = D_801B5B3C + 1; - if (D_801B5B3C < 0x1E) { - return 0; - } - D_801B5B3C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B5B7C; - extern s16 D_801B5B7E; - extern s16 D_801B5B80; - extern s16 D_801B5B74; - extern s16 D_801B5B76; - extern s16 D_801B5B78; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B5B7C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B5B7E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B5B80, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B5B74, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B5B76, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B5B78, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B5B04; -extern u16 D_801B5B84; -extern u16 D_801B5B86; -extern u16 D_801B5B88; -extern s16 D_801B5F90; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B5F90 = 0; - D_801B5B04 = 0; - D_801B5B84 = D_80126B5E; - D_801B5B86 = D_80126B62; - D_801B5B88 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801893A8[]; - extern s16 D_801B5B7C; - extern s16 D_801B5B74; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801893A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801893A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B5B7C; - s16 *p78C = &D_801B5B74; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B5F90 = 1; - D_801B5B04 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B5B24; - extern SV4_8017B368 D_801B5B2C; - extern s16 D_801B5B7C; - extern s16 D_801B5B74; - extern u16 D_801893A8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B5B24; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B5B2C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801893A8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801893A8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B5B7C) = loc0; - (*(SV4_8017B368 *)&D_801B5B74) = loc1; - D_801B5F90 = 1; - D_801B5B04 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801893A8[]; - extern s16 D_801B5B7C; - extern s16 D_801B5B7E; - extern s16 D_801B5B80; - extern s16 D_801B5B74; - extern s16 D_801B5B76; - extern s16 D_801B5B78; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801893A8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801893A8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B5B7C; - s16 *p78C = &D_801B5B74; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B5B7E; - v798 = D_801B5B80; - v78C = *p78C; - v78E = D_801B5B76; - v790 = D_801B5B78; - __asm__ __volatile__(""); - D_801B5F90 = 1; - D_801B5B04 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B5B04; -extern s16 D_801B5B7C; -extern s16 D_801B5B7E; -extern s16 D_801B5B80; -extern s16 D_801B5B74; -extern s16 D_801B5B76; -extern s16 D_801B5B78; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B5B04 = 0; - D_801B5B7C = (s16) D_80114F30; - D_801B5B7E = (s16) D_80114F34; - D_801B5B80 = (s16) D_80114F38; - D_801B5B74 = (s16) D_80114F24; - D_801B5B76 = (s16) D_80114F28; - D_801B5B78 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B5B94; -extern s16 D_801B5B96; -extern s16 D_801B5B98; -extern s16 D_801B5B9C; -extern s16 D_801B5B9E; -extern s16 D_801B5BA0; - -void func_8017B824(void) { - D_801B5B94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B5B96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B5B98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B5B9C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B5B9E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B5BA0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B5B94; -extern s16 D_801B5B96; -extern s16 D_801B5B98; -extern s16 D_801B5B9C; -extern s16 D_801B5B9E; -extern s16 D_801B5BA0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B5B94; - D_80114F34 = D_801B5B96; - D_80114F38 = D_801B5B98; - D_80114F24 = D_801B5B9C; - D_80114F28 = D_801B5B9E; - D_80114F2C = D_801B5BA0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B5B7C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B5B74) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B5B7C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B5B74) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B5B84; -extern u16 D_801B5B86; -extern u16 D_801B5B88; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B5B04; -extern short D_801B5B8C; -extern short D_801B5B8E; -extern short D_801B5B90; -extern s16 D_801B5B7C; -extern s16 D_801B5B7E; -extern s16 D_801B5B80; -extern s16 D_801B5B74; -extern s16 D_801B5B76; -extern s16 D_801B5B78; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B5B84); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B5B86); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B5B88); - (*(s16 *)&D_801B5B8C) = buf[0]; - (*(s16 *)&D_801B5B8E) = buf[1]; - (*(s16 *)&D_801B5B90) = buf[2]; - D_801B5B7C = D_80114F30 + buf[0]; - D_801B5B04 = 0; - D_801B5B7E = D_80114F34 + buf[1]; - D_801B5B80 = D_80114F38 + buf[2]; - D_801B5B74 = D_80114F24 + buf[0]; - D_801B5B76 = D_80114F28 + buf[1]; - D_801B5B78 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B5B24; -extern SV4 D_801B5B2C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B5B2C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B5B24 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B5B2C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B5B2C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B5B24) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B5B2C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B5B4C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B5B4C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B5B04; -extern s16 D_801B5F90; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B5B04 = D_801B5B04 + 1; - if (D_801B5B04 >= 0x1F) { - D_801B5F90 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B5B04; -extern s16 D_801B5F90; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B5B04 = D_801B5B04 + 1; - if (0x18 < D_801B5B04) { - func_8012A4BC(); - D_801B5F90 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B5B04; -extern void (*D_801B5B48)(void); -extern short D_801B5B8C; -extern short D_801B5B8E; -extern short D_801B5B90; -extern s16 D_801B5F90; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B5B04 = D_801B5B04 + 1; - if (D_801B5B04 >= 0x19) { - if (D_801B5B48 != 0) { - (*D_801B5B48)(); - } else { - D_80114F30 = D_80114F30 + D_801B5B8C; - D_80114F34 = D_80114F34 + D_801B5B8E; - D_80114F38 = D_80114F38 + D_801B5B90; - D_80114F24 = D_80114F24 + D_801B5B8C; - D_80114F28 = D_80114F28 + D_801B5B8E; - D_80114F2C = D_80114F2C + D_801B5B90; - func_8012A4BC(); - } - D_801B5F90 = 0; - } -} - - - -extern void (*D_80189448[])(void); - -void func_8017BE60(void *a0) { - D_80189448[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017CD9C); - - -extern void (*D_80189480[])(void); - -void func_8017CDD8(void *a0) { - D_80189480[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017CE14); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017CE64); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017CEC0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017CF44); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D0F8); - - -extern void (*D_80189494[])(void); - -void func_8017D404(void *a0) { - D_80189494[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D440); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D480); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D4F0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D57C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D650); - - -extern void (*D_801894A8[])(void); - -void func_8017D6A4(void *a0) { - D_801894A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D6E0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D794); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D7F0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017DA90); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017DE1C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E094); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E1DC); - - -extern void (*D_801895C0[])(void); - -void func_8017E35C(void *a0) { - D_801895C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E398); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E3E4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E4D8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E60C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E678); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E704); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E724); - - -extern void (*D_8018963C[])(void); - -void func_8017E778(void *a0) { - D_8018963C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E7B4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E7F8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E81C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E85C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E8D8); - - -extern void (*D_80189650[])(void); - -void func_8017E8F8(void *a0) { - D_80189650[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E934); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E9A8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E9D0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017E9F8); - - -extern void (*D_8018967C[])(void); - -void func_8017EAB0(void *a0) { - D_8018967C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017EAEC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017EC3C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017EE08); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017EF88); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F040); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F0F8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F150); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F1E4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F268); - - -extern void (*D_80189740[])(void); - -void func_8017F3A8(void *a0) { - D_80189740[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F3E4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F5A4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F6C4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F710); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F744); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F88C); - - -extern void (*D_80189848[])(void); - -void func_8017F928(void *a0) { - D_80189848[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017F964); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FA18); - - -extern void (*D_8018989C[])(void); - -void func_8017FAC8(void *a0) { - D_8018989C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FB04); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FB98); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FBB0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FE0C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8017FFF8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180034); - - -extern void (*D_80189AE0[])(void); - -void func_80180224(void *a0) { - D_80189AE0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80189AF8[])(void); - -void func_80180260(void *a0) { - D_80189AF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018029C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180304); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180364); - - -extern void (*D_80189B18[])(void); - -void func_801803F8(void *a0) { - D_80189B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180434); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180520); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180600); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180710); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180748); - -void func_801807E8(void) { -} - -void func_801807F0(void) { -} - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801807F8); - -void func_8018086C(void) { -} - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180874); - -extern s32 D_80126CD4; - extern void func_8018029C(s32); - void func_8018098C(s32 arg0) { - if (*(s32 *)&D_80126CD4 == arg0) { - ((void (*)(s32))func_8018029C)(*(s32 *)&D_80126CD4); - } - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801809B8); - -void func_80180AA4(void) { -} - - -s32 func_80180AAC(void) { - return 95; -} - - -extern void func_80029124(s32 arg0, s32 arg1); - extern void func_8012CAE4(void *a0); - void func_80180AB4(u8 *a0) { - func_80029124(0x137, 1); - func_8012CAE4(a0); - } - - - -extern void (*D_801A8434[])(void); - -void func_80180AEC(void *a0) { - D_801A8434[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180B28); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180B70); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180CC4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180D38); - - -extern void (*D_801A849C[])(void); - -void func_80180D78(void *a0) { - D_801A849C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180DB4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180E8C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180F50); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180F98); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80180FFC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018115C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181340); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801813FC); - - -extern void (*D_801A8E54[])(void); - -void func_801814A8(void *a0) { - D_801A8E54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801814E4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181574); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018176C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801817F8); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801ADB14; - void func_80181874(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801ADB14); - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801818A4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181974); - - -extern s32 func_8012BEE8(s32 arg); - void func_801819E8(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((u8 *)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181A1C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181AE0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181BB8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181C98); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181CE0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181E08); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181EC0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181F50); - -extern s32 func_8012BEE8(s32 arg); - extern void func_8018280C(s32 arg); - void func_80181F94(s32 arg0) { - if (!func_8012BEE8(arg0)) { - func_8018280C(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181FCC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80181FF4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182024); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801820B0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182168); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182258); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801822B0); - - -void func_80182354(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182364); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018244C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801824A8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182530); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182600); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801826C8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801827A0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018280C); - - -extern s32 rand(void); - void func_80182908(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182944); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801829B0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182BAC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182CE8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182D7C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182E0C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182F68); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80182FB4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018330C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183454); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183508); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801838A4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183908); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801839D4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183A30); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183BB0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183C9C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80183FAC); - -extern void func_80184430(s32 *a0); - extern s32 func_8018466C(s32 a0); - void func_80183FF8(s32 *a0) { - func_80184430(a0); - func_8018466C((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801840AC); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184430); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184494); - -void func_801844E0(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s32 *)((s32)a0 + 0x1C) = 0x1E; - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s16 *)(v1 + 0x10) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801844F8); - -extern void func_80184750(s32 arg0); -extern void func_8002A04C(s32 a0); -extern void func_80184580(s32 arg0); - -void func_80184548(s32 arg0) { - func_80184750(arg0); - ((s32 (*)(s32))func_8002A04C)(arg0); - func_80184580(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184580); - - -extern void func_80016714(void *a0, s32 a1); - extern void func_8012C098(void *a0); - void func_80184634(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0xd0); - ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); - ((void (*)(s32))func_8012C098)(param_1); - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018466C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184750); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184848); - - -extern void (*D_801AEAF8[])(void); - -void func_80184920(void *a0) { - D_801AEAF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018495C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801849C4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184AF8); - - -extern void (*D_801B267C[])(void); - -void func_80184B68(void *a0) { - D_801B267C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184BA4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184CA0); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80184F30); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801850C4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018511C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185198); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801851DC); - - -extern void (*D_801B29B8[])(void); - -void func_8018523C(void *a0) { - D_801B29B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185278); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018534C); - -void func_80185374(void) { -} - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018537C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801854C8); - - -extern void func_8012C218(void *a0); - s32 func_801855E8(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185614); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185624); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185634); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80185674(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801856A8); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801856CC); - - -extern void (*D_801B29E0[])(void); - -void func_80185730(void *a0) { - D_801B29E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_8018576C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801857F4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_801858B4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_801734BC", func_80185924); - diff --git a/src/ov_SC05_001/ov_SC05_001_jr_80178D40.c b/src/ov_SC05_001/ov_SC05_001_jr_80178D40.c new file mode 100644 index 000000000..9076b36d5 --- /dev/null +++ b/src/ov_SC05_001/ov_SC05_001_jr_80178D40.c @@ -0,0 +1,4841 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188C50[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B4E70; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80188C44[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80188C88[]; +extern unsigned short D_80188C90[]; +extern unsigned short D_80188C98[]; +extern unsigned char D_801B4E78[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B4E70; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188CA0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B4FAC; +extern M2C_UNK D_801B4FB0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B4F38; +extern void (*D_80188CD0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B4FB4[]; +extern u8 D_801B4FBC[]; +extern u8 D_801B4F6C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188CD8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188CF4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80188CFC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188D64[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188D08; +extern u8 D_80188D14; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188D98[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188DA0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188DF4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188E28[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188E18[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188E44; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188EBC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188EC4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188ECC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188ED4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188EDC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188EE4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188EF0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188EFC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188F08[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188F18[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188F28[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188F30[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188F38[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188F40[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188F48[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188F50[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188F58[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188F60[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188F68[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188F70[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188F78[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188F80[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188F88[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188F90[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188F98[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188FA0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188FA8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188FB0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188FB8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188FC0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188FC8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188FD0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188FD8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018901C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188FE0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018904C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80189088[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801890E0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801890F0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801890F8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80189260[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018926C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B4474; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B5F90; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B56F0; +extern short D_801B6004; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B6004) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B6004)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B56F0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B6004) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B5F60 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B5F60 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B6004) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B6004) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B5B4C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B56F4; + extern s32 D_801B5B08; + extern s16 D_801B5B0C; + extern s16 D_801B5B10; + extern s16 D_801B5B14; + extern s16 D_801B5B18; + extern s32 D_801B5B20; + extern s32 D_801B5B24; + extern s32 D_801B5B34; + extern s16 D_801B5B38; + extern s16 D_801B5B3C; + extern s32 D_801B5B40; + extern s32 D_801B5B48; + extern s32 D_801B5B4C[10]; + extern s32 D_801B5EA8; + extern s16 D_801B5F60; + extern s32 D_801B5F8C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B5F60; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B5B08); + D_801B5B08 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B5B14, D_801B5B18 ? 0x48 : 0x40); + (*(s16*)&D_801B6004) = 2; + break; + case 0: + func_80179B28(D_801B5B08); + D_801B5B08 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B5B0C, D_801B5B10 ? 0x48 : 0x40); + (*(s16*)&D_801B6004) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B5EA8 != 0) { + func_80179B28(D_801B5B08); + D_801B5B08 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B5B0C, D_801B5B10 ? 0x48 : 0x40); + (*(s16*)&D_801B6004) = 1; + } else { + (*(s16*)&D_801B6004) = 3; + } + break; + case 0x32: + func_80179B28(D_801B5B08); + D_801B5B08 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B5B0C, + D_801B5B10 ? 0x48 : 0x40); + (*(s16*)&D_801B6004) = 1; + break; + case 2: + func_80179B28(D_801B5B08); + if (D_801B5B20 != 0) { + D_801B56F0 = D_801B5B20; + D_801B5B20 = 0; + (*(s16*)&D_801B6004) = 3; + return; + } + (*(s16*)&D_801B6004) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B6004) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B6004) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B6004) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B6004) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B6004) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B6004) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B6004) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B6004) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B6004) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B6004) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B6004) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x1B: + D_801B5B40 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B6004) = 4; + D_801B56F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B6004) = 5; + D_801B5B34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B5B34 = (s32)func_8017A3B0; + (*(s16*)&D_801B6004) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x24: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B6004) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B6004) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B6004) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B6004) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B6004) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B6004) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B6004) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B6004) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B6004) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B5B24); + (*(s16*)&D_801B6004) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B5B24); + (*(s16*)&D_801B6004) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B5B24); + (*(s16*)&D_801B6004) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B5B24); + (*(s16*)&D_801B6004) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + break; + case 0x4E: + D_801B5B48 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x2B: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B6004) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B5F8C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B6004) = 3; + break; + case 0x34: + (*(s16*)&D_801B6004) = 3; + D_801B56F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B5B20 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B6004) = 3; + D_801B56F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B6004) = 3; + D_801B56F0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B56F0 = *(s32 *)(D_801B56F0 + 4); + return; + case 0x37: + (*(s16*)&D_801B6004) = 3; + D_801B5B0C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B5B10 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B6004) = 3; + D_801B5B14 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B5B18 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B6004) = 3; + D_801B5B0C = w1; + D_801B5B10 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B6004) = 3; + D_801B5B14 = w2; + D_801B5B18 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + case 0x43: + D_801B5B34 = (s32)func_8017A3D8; + D_801B5B3C = 0; + (*(s16*)&D_801B6004) = 5; + D_801B5B38 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B6004) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B6004) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B6004) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B5B4C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B6004) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B5B4C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B6004) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B5B4C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B6004) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B5B4C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B6004) = 3; + break; + default: + break; + } +Lend: + D_801B56F0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B5B1C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B5B1C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B5B1C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B5B1C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B5B44; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B5B44 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B5B00; + +s32 func_8017A3B0(void) { + switch (D_801B5B00) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B5B3C; +extern short D_801B5B38; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B5B3C) { + case 0: + func_800D0CA0(1); + D_801B5B3C = D_801B5B3C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B5B38; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B5B3C = D_801B5B3C + 1; + if (D_801B5B3C < 0x1E) { + return 0; + } + D_801B5B3C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B5B7C; + extern s16 D_801B5B7E; + extern s16 D_801B5B80; + extern s16 D_801B5B74; + extern s16 D_801B5B76; + extern s16 D_801B5B78; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B5B7C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B5B7E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B5B80, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B5B74, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B5B76, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B5B78, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B5B04; +extern u16 D_801B5B84; +extern u16 D_801B5B86; +extern u16 D_801B5B88; +extern s16 D_801B5F90; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B5F90 = 0; + D_801B5B04 = 0; + D_801B5B84 = D_80126B5E; + D_801B5B86 = D_80126B62; + D_801B5B88 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801893A8[]; + extern s16 D_801B5B7C; + extern s16 D_801B5B74; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801893A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801893A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B5B7C; + s16 *p78C = &D_801B5B74; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B5F90 = 1; + D_801B5B04 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B5B24; + extern SV4_8017B368 D_801B5B2C; + extern s16 D_801B5B7C; + extern s16 D_801B5B74; + extern u16 D_801893A8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B5B24; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B5B2C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801893A8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801893A8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B5B7C) = loc0; + (*(SV4_8017B368 *)&D_801B5B74) = loc1; + D_801B5F90 = 1; + D_801B5B04 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801893A8[]; + extern s16 D_801B5B7C; + extern s16 D_801B5B7E; + extern s16 D_801B5B80; + extern s16 D_801B5B74; + extern s16 D_801B5B76; + extern s16 D_801B5B78; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801893A8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801893A8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B5B7C; + s16 *p78C = &D_801B5B74; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B5B7E; + v798 = D_801B5B80; + v78C = *p78C; + v78E = D_801B5B76; + v790 = D_801B5B78; + __asm__ __volatile__(""); + D_801B5F90 = 1; + D_801B5B04 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B5B04; +extern s16 D_801B5B7C; +extern s16 D_801B5B7E; +extern s16 D_801B5B80; +extern s16 D_801B5B74; +extern s16 D_801B5B76; +extern s16 D_801B5B78; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B5B04 = 0; + D_801B5B7C = (s16) D_80114F30; + D_801B5B7E = (s16) D_80114F34; + D_801B5B80 = (s16) D_80114F38; + D_801B5B74 = (s16) D_80114F24; + D_801B5B76 = (s16) D_80114F28; + D_801B5B78 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B5B94; +extern s16 D_801B5B96; +extern s16 D_801B5B98; +extern s16 D_801B5B9C; +extern s16 D_801B5B9E; +extern s16 D_801B5BA0; + +void func_8017B824(void) { + D_801B5B94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B5B96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B5B98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B5B9C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B5B9E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B5BA0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B5B94; +extern s16 D_801B5B96; +extern s16 D_801B5B98; +extern s16 D_801B5B9C; +extern s16 D_801B5B9E; +extern s16 D_801B5BA0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B5B94; + D_80114F34 = D_801B5B96; + D_80114F38 = D_801B5B98; + D_80114F24 = D_801B5B9C; + D_80114F28 = D_801B5B9E; + D_80114F2C = D_801B5BA0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B5B7C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B5B74) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B5B7C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B5B74) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B5B84; +extern u16 D_801B5B86; +extern u16 D_801B5B88; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B5B04; +extern short D_801B5B8C; +extern short D_801B5B8E; +extern short D_801B5B90; +extern s16 D_801B5B7C; +extern s16 D_801B5B7E; +extern s16 D_801B5B80; +extern s16 D_801B5B74; +extern s16 D_801B5B76; +extern s16 D_801B5B78; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B5B84); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B5B86); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B5B88); + (*(s16 *)&D_801B5B8C) = buf[0]; + (*(s16 *)&D_801B5B8E) = buf[1]; + (*(s16 *)&D_801B5B90) = buf[2]; + D_801B5B7C = D_80114F30 + buf[0]; + D_801B5B04 = 0; + D_801B5B7E = D_80114F34 + buf[1]; + D_801B5B80 = D_80114F38 + buf[2]; + D_801B5B74 = D_80114F24 + buf[0]; + D_801B5B76 = D_80114F28 + buf[1]; + D_801B5B78 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B5B24; +extern SV4 D_801B5B2C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B5B2C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B5B24 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B5B2C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B5B2C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B5B24) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B5B2C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B5B4C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B5B4C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B5B04; +extern s16 D_801B5F90; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B5B04 = D_801B5B04 + 1; + if (D_801B5B04 >= 0x1F) { + D_801B5F90 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B5B04; +extern s16 D_801B5F90; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B5B04 = D_801B5B04 + 1; + if (0x18 < D_801B5B04) { + func_8012A4BC(); + D_801B5F90 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B5B04; +extern void (*D_801B5B48)(void); +extern short D_801B5B8C; +extern short D_801B5B8E; +extern short D_801B5B90; +extern s16 D_801B5F90; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B5B04 = D_801B5B04 + 1; + if (D_801B5B04 >= 0x19) { + if (D_801B5B48 != 0) { + (*D_801B5B48)(); + } else { + D_80114F30 = D_80114F30 + D_801B5B8C; + D_80114F34 = D_80114F34 + D_801B5B8E; + D_80114F38 = D_80114F38 + D_801B5B90; + D_80114F24 = D_80114F24 + D_801B5B8C; + D_80114F28 = D_80114F28 + D_801B5B8E; + D_80114F2C = D_80114F2C + D_801B5B90; + func_8012A4BC(); + } + D_801B5F90 = 0; + } +} + + + +extern void (*D_80189448[])(void); + +void func_8017BE60(void *a0) { + D_80189448[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017CD9C); + + +extern void (*D_80189480[])(void); + +void func_8017CDD8(void *a0) { + D_80189480[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017CE14); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017CE64); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017CEC0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017CF44); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D0F8); + + +extern void (*D_80189494[])(void); + +void func_8017D404(void *a0) { + D_80189494[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D440); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D480); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D4F0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D57C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D650); + + +extern void (*D_801894A8[])(void); + +void func_8017D6A4(void *a0) { + D_801894A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D6E0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D794); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D7F0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017DA90); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017DE1C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E094); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E1DC); + + +extern void (*D_801895C0[])(void); + +void func_8017E35C(void *a0) { + D_801895C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E398); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E3E4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E4D8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E60C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E678); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E704); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E724); + + +extern void (*D_8018963C[])(void); + +void func_8017E778(void *a0) { + D_8018963C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E7B4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E7F8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E81C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E85C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E8D8); + + +extern void (*D_80189650[])(void); + +void func_8017E8F8(void *a0) { + D_80189650[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E934); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E9A8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E9D0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017E9F8); + + +extern void (*D_8018967C[])(void); + +void func_8017EAB0(void *a0) { + D_8018967C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017EAEC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017EC3C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017EE08); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017EF88); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F040); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F0F8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F150); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F1E4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F268); + + +extern void (*D_80189740[])(void); + +void func_8017F3A8(void *a0) { + D_80189740[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F3E4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F5A4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F6C4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F710); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F744); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F88C); + + +extern void (*D_80189848[])(void); + +void func_8017F928(void *a0) { + D_80189848[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017F964); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FA18); + + +extern void (*D_8018989C[])(void); + +void func_8017FAC8(void *a0) { + D_8018989C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FB04); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FB98); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FBB0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FE0C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8017FFF8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180034); + + +extern void (*D_80189AE0[])(void); + +void func_80180224(void *a0) { + D_80189AE0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80189AF8[])(void); + +void func_80180260(void *a0) { + D_80189AF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018029C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180304); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180364); + + +extern void (*D_80189B18[])(void); + +void func_801803F8(void *a0) { + D_80189B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180434); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180520); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180600); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180710); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180748); + +void func_801807E8(void) { +} + +void func_801807F0(void) { +} + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801807F8); + +void func_8018086C(void) { +} + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180874); + +extern s32 D_80126CD4; + extern void func_8018029C(s32); + void func_8018098C(s32 arg0) { + if (*(s32 *)&D_80126CD4 == arg0) { + ((void (*)(s32))func_8018029C)(*(s32 *)&D_80126CD4); + } + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801809B8); + +void func_80180AA4(void) { +} + + +s32 func_80180AAC(void) { + return 95; +} + + +extern void func_80029124(s32 arg0, s32 arg1); + extern void func_8012CAE4(void *a0); + void func_80180AB4(u8 *a0) { + func_80029124(0x137, 1); + func_8012CAE4(a0); + } + + + +extern void (*D_801A8434[])(void); + +void func_80180AEC(void *a0) { + D_801A8434[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180B28); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180B70); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180CC4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180D38); + + +extern void (*D_801A849C[])(void); + +void func_80180D78(void *a0) { + D_801A849C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180DB4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180E8C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180F50); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180F98); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80180FFC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018115C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181340); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801813FC); + + +extern void (*D_801A8E54[])(void); + +void func_801814A8(void *a0) { + D_801A8E54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801814E4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181574); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018176C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801817F8); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801ADB14; + void func_80181874(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801ADB14); + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801818A4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181974); + + +extern s32 func_8012BEE8(s32 arg); + void func_801819E8(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((u8 *)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181A1C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181AE0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181BB8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181C98); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181CE0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181E08); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181EC0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181F50); + +extern s32 func_8012BEE8(s32 arg); + extern void func_8018280C(s32 arg); + void func_80181F94(s32 arg0) { + if (!func_8012BEE8(arg0)) { + func_8018280C(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181FCC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80181FF4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182024); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801820B0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182168); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182258); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801822B0); + + +void func_80182354(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182364); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018244C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801824A8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182530); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182600); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801826C8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801827A0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018280C); + + +extern s32 rand(void); + void func_80182908(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182944); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801829B0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182BAC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182CE8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182D7C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182E0C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182F68); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80182FB4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018330C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183454); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183508); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801838A4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183908); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801839D4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183A30); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183BB0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183C9C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80183FAC); + +extern void func_80184430(s32 *a0); + extern s32 func_8018466C(s32 a0); + void func_80183FF8(s32 *a0) { + func_80184430(a0); + func_8018466C((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801840AC); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184430); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184494); + +void func_801844E0(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s16 *)(v1 + 0x10) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801844F8); + +extern void func_80184750(s32 arg0); +extern void func_8002A04C(s32 a0); +extern void func_80184580(s32 arg0); + +void func_80184548(s32 arg0) { + func_80184750(arg0); + ((s32 (*)(s32))func_8002A04C)(arg0); + func_80184580(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184580); + + +extern void func_80016714(void *a0, s32 a1); + extern void func_8012C098(void *a0); + void func_80184634(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0xd0); + ((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38); + ((void (*)(s32))func_8012C098)(param_1); + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018466C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184750); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184848); + + +extern void (*D_801AEAF8[])(void); + +void func_80184920(void *a0) { + D_801AEAF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018495C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801849C4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184AF8); + + +extern void (*D_801B267C[])(void); + +void func_80184B68(void *a0) { + D_801B267C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184BA4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184CA0); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80184F30); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801850C4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018511C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185198); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801851DC); + + +extern void (*D_801B29B8[])(void); + +void func_8018523C(void *a0) { + D_801B29B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185278); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018534C); + +void func_80185374(void) { +} + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018537C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801854C8); + + +extern void func_8012C218(void *a0); + s32 func_801855E8(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185614); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185624); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185634); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80185674(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801856A8); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801856CC); + + +extern void (*D_801B29E0[])(void); + +void func_80185730(void *a0) { + D_801B29E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_8018576C); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801857F4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_801858B4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80178D40", func_80185924); + + diff --git a/src/ov_SC05_002/ov_SC05_002_jr_801734BC.c b/src/ov_SC05_002/ov_SC05_002_jr_801734BC.c index cf253830a..ddf696ef3 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_801734BC.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_801734BC.c @@ -3084,1029 +3084,3 @@ void func_80178D18(void) { D_8019FFBC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019FDBC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019FDBC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019FDBC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019FDBC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019FDE4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019FDE4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019FDA0; - -s32 func_8017A3B0(void) { - switch (D_8019FDA0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019FDDC; -extern short D_8019FDD8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019FDDC) { - case 0: - func_800D0CA0(1); - D_8019FDDC = D_8019FDDC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019FDD8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019FDDC = D_8019FDDC + 1; - if (D_8019FDDC < 0x1E) { - return 0; - } - D_8019FDDC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019FE1C; - extern s16 D_8019FE1E; - extern s16 D_8019FE20; - extern s16 D_8019FE14; - extern s16 D_8019FE16; - extern s16 D_8019FE18; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019FE1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019FE1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019FE20, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019FE14, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019FE16, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019FE18, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019FDA4; -extern u16 D_8019FE24; -extern u16 D_8019FE26; -extern u16 D_8019FE28; -extern s16 D_8019FF48; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019FF48 = 0; - D_8019FDA4 = 0; - D_8019FE24 = D_80126B5E; - D_8019FE26 = D_80126B62; - D_8019FE28 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183B68[]; - extern s16 D_8019FE1C; - extern s16 D_8019FE14; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183B68[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183B68[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019FE1C; - s16 *p78C = &D_8019FE14; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019FF48 = 1; - D_8019FDA4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019FDC4; - extern SV4_8017B368 D_8019FDCC; - extern s16 D_8019FE1C; - extern s16 D_8019FE14; - extern u16 D_80183B68; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019FDC4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019FDCC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183B68)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183B68)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019FE1C) = loc0; - (*(SV4_8017B368 *)&D_8019FE14) = loc1; - D_8019FF48 = 1; - D_8019FDA4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183B68[]; - extern s16 D_8019FE1C; - extern s16 D_8019FE1E; - extern s16 D_8019FE20; - extern s16 D_8019FE14; - extern s16 D_8019FE16; - extern s16 D_8019FE18; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183B68[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183B68[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019FE1C; - s16 *p78C = &D_8019FE14; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019FE1E; - v798 = D_8019FE20; - v78C = *p78C; - v78E = D_8019FE16; - v790 = D_8019FE18; - __asm__ __volatile__(""); - D_8019FF48 = 1; - D_8019FDA4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019FDA4; -extern s16 D_8019FE1C; -extern s16 D_8019FE1E; -extern s16 D_8019FE20; -extern s16 D_8019FE14; -extern s16 D_8019FE16; -extern s16 D_8019FE18; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019FDA4 = 0; - D_8019FE1C = (s16) D_80114F30; - D_8019FE1E = (s16) D_80114F34; - D_8019FE20 = (s16) D_80114F38; - D_8019FE14 = (s16) D_80114F24; - D_8019FE16 = (s16) D_80114F28; - D_8019FE18 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019FE34; -extern s16 D_8019FE36; -extern s16 D_8019FE38; -extern s16 D_8019FE3C; -extern s16 D_8019FE3E; -extern s16 D_8019FE40; - -void func_8017B824(void) { - D_8019FE34 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019FE36 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019FE38 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019FE3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019FE3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019FE40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019FE34; -extern s16 D_8019FE36; -extern s16 D_8019FE38; -extern s16 D_8019FE3C; -extern s16 D_8019FE3E; -extern s16 D_8019FE40; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019FE34; - D_80114F34 = D_8019FE36; - D_80114F38 = D_8019FE38; - D_80114F24 = D_8019FE3C; - D_80114F28 = D_8019FE3E; - D_80114F2C = D_8019FE40; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019FE1C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019FE14) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019FE1C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019FE14) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019FE24; -extern u16 D_8019FE26; -extern u16 D_8019FE28; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019FDA4; -extern short D_8019FE2C; -extern short D_8019FE2E; -extern short D_8019FE30; -extern s16 D_8019FE1C; -extern s16 D_8019FE1E; -extern s16 D_8019FE20; -extern s16 D_8019FE14; -extern s16 D_8019FE16; -extern s16 D_8019FE18; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019FE24); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019FE26); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019FE28); - (*(s16 *)&D_8019FE2C) = buf[0]; - (*(s16 *)&D_8019FE2E) = buf[1]; - (*(s16 *)&D_8019FE30) = buf[2]; - D_8019FE1C = D_80114F30 + buf[0]; - D_8019FDA4 = 0; - D_8019FE1E = D_80114F34 + buf[1]; - D_8019FE20 = D_80114F38 + buf[2]; - D_8019FE14 = D_80114F24 + buf[0]; - D_8019FE16 = D_80114F28 + buf[1]; - D_8019FE18 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019FDC4; -extern SV4 D_8019FDCC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019FDCC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019FDC4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019FDCC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019FDCC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019FDC4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019FDCC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019FDEC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019FDEC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019FDA4; -extern s16 D_8019FF48; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019FDA4 = D_8019FDA4 + 1; - if (D_8019FDA4 >= 0x1F) { - D_8019FF48 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019FDA4; -extern s16 D_8019FF48; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019FDA4 = D_8019FDA4 + 1; - if (0x18 < D_8019FDA4) { - func_8012A4BC(); - D_8019FF48 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019FDA4; -extern void (*D_8019FDE8)(void); -extern short D_8019FE2C; -extern short D_8019FE2E; -extern short D_8019FE30; -extern s16 D_8019FF48; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019FDA4 = D_8019FDA4 + 1; - if (D_8019FDA4 >= 0x19) { - if (D_8019FDE8 != 0) { - (*D_8019FDE8)(); - } else { - D_80114F30 = D_80114F30 + D_8019FE2C; - D_80114F34 = D_80114F34 + D_8019FE2E; - D_80114F38 = D_80114F38 + D_8019FE30; - D_80114F24 = D_80114F24 + D_8019FE2C; - D_80114F28 = D_80114F28 + D_8019FE2E; - D_80114F2C = D_80114F2C + D_8019FE30; - func_8012A4BC(); - } - D_8019FF48 = 0; - } -} - - - -extern void (*D_80183C08[])(void); - -void func_8017BE60(void *a0) { - D_80183C08[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017CD9C); - - -extern void (*D_8018402C[])(void); - -void func_8017DA00(void *a0) { - D_8018402C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DA3C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DC00); - - -extern void (*D_80184034[])(void); - -void func_8017DC94(void *a0) { - D_80184034[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80184020; - -void func_8017DCD0(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80184020, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DD74); - - -extern void (*D_801840DC[])(void); - -void func_8017DDD8(void *a0) { - D_801840DC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DE14); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DE58(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801840E4[])(void); - -void func_8017DE7C(void *a0) { - D_801840E4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DEB8); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017DEFC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DF3C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DFB8(void) { - func_800D1EBC(); - } - - - -extern void (*D_801840F8[])(void); - -void func_8017DFD8(void *a0) { - D_801840F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E014); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E088); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E0B0); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E0D8); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E100); - - -extern void (*D_80184128[])(void); - -void func_8017E1A0(void *a0) { - D_80184128[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E1DC); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E27C); - - -s32 func_8017E414(void) { - return 95; -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E41C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E4C0); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E53C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E5FC); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E724); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017E894); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017EA28); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017EC7C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017ED88); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017EF24); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017EFE0); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F06C); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_80199FF4[]; - s32 func_8017F0A4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80199FF4[0], &D_80199FF4[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F0D0); - -extern u8 D_80078EC1; - s32 func_8017F17C(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F194); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F200); - - -extern void (*D_8019C7E4[])(void); - -void func_8017F30C(void *a0) { - D_8019C7E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F348); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F538); - - -extern void (*D_8019C818[])(void); - -void func_8017F734(void *a0) { - D_8019C818[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F770); - -void func_8017F860(void) { -} - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F868); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017F940); - -void func_8017F9F4(void) { -} - - -extern void (*D_8019CD64[])(void); - -void func_8017F9FC(void *a0) { - D_8019CD64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FA38); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FB0C); - -void func_8017FB34(void) { -} - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FB3C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FC88); - - -extern void func_8012C218(void *a0); - s32 func_8017FDA8(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FDD4); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FDE4); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FDF4); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_8017FE34(void * arg0) { - s32 temp_v0 = *(s32 *)((char *)arg0 + 0xdc); - func_8014ADA8((s32)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FE68); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FE8C); - - -extern void (*D_8019CD8C[])(void); - -void func_8017FEF0(void *a0) { - D_8019CD8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FF2C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_8017FFB4); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_80180074); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_801734BC", func_801800E4); - diff --git a/src/ov_SC05_002/ov_SC05_002_jr_80178D40.c b/src/ov_SC05_002/ov_SC05_002_jr_80178D40.c new file mode 100644 index 000000000..be3e4b63b --- /dev/null +++ b/src/ov_SC05_002/ov_SC05_002_jr_80178D40.c @@ -0,0 +1,4475 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183410[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019F110; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80183404[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183448[]; +extern unsigned short D_80183450[]; +extern unsigned short D_80183458[]; +extern unsigned char D_8019F118[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019F110; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183460[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019F24C; +extern M2C_UNK D_8019F250; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019F1D8; +extern void (*D_80183490[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019F254[]; +extern u8 D_8019F25C[]; +extern u8 D_8019F20C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80183498[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801834B4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801834BC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183524[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801834C8; +extern u8 D_801834D4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183558[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183560[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801835B4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801835E8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801835D8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80183604; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018367C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183684[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018368C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183694[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018369C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801836A4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801836B0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801836BC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801836C8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801836D8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801836E8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801836F0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801836F8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183700[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80183708[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183710[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80183718[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80183720[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80183728[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183730[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183738[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183740[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183748[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183750[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183758[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183760[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183768[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183770[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183778[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183780[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183788[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183790[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183798[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801837DC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801837A0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018380C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80183848[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801838A0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801838B0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801838B8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80183A20[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80183A2C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019E820; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019FF48; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019F990; +extern short D_8019FFBC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019FFBC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019FFBC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019F990 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019FFBC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019FF18 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019FF18 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019FFBC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019FFBC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019FDEC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019F994; + extern s32 D_8019FDA8; + extern s16 D_8019FDAC; + extern s16 D_8019FDB0; + extern s16 D_8019FDB4; + extern s16 D_8019FDB8; + extern s32 D_8019FDC0; + extern s32 D_8019FDC4; + extern s32 D_8019FDD4; + extern s16 D_8019FDD8; + extern s16 D_8019FDDC; + extern s32 D_8019FDE0; + extern s32 D_8019FDE8; + extern s32 D_8019FDEC[10]; + extern s32 D_8019FE60; + extern s16 D_8019FF18; + extern s32 D_8019FF44; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019FF18; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019FDA8); + D_8019FDA8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019FDB4, D_8019FDB8 ? 0x48 : 0x40); + (*(s16*)&D_8019FFBC) = 2; + break; + case 0: + func_80179B28(D_8019FDA8); + D_8019FDA8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019FDAC, D_8019FDB0 ? 0x48 : 0x40); + (*(s16*)&D_8019FFBC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019FE60 != 0) { + func_80179B28(D_8019FDA8); + D_8019FDA8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019FDAC, D_8019FDB0 ? 0x48 : 0x40); + (*(s16*)&D_8019FFBC) = 1; + } else { + (*(s16*)&D_8019FFBC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019FDA8); + D_8019FDA8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019FDAC, + D_8019FDB0 ? 0x48 : 0x40); + (*(s16*)&D_8019FFBC) = 1; + break; + case 2: + func_80179B28(D_8019FDA8); + if (D_8019FDC0 != 0) { + D_8019F990 = D_8019FDC0; + D_8019FDC0 = 0; + (*(s16*)&D_8019FFBC) = 3; + return; + } + (*(s16*)&D_8019FFBC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019FFBC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019FFBC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019FFBC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x1B: + D_8019FDE0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019FFBC) = 4; + D_8019F994 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019FFBC) = 5; + D_8019FDD4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019FDD4 = (s32)func_8017A3B0; + (*(s16*)&D_8019FFBC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x24: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019FFBC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019FFBC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019FFBC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019FFBC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019FFBC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019FFBC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019FFBC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019FDC4); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019FDC4); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019FDC4); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019FDC4); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x4E: + D_8019FDE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019FFBC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019FF44 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x34: + (*(s16*)&D_8019FFBC) = 3; + D_8019F990 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019FDC0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019FFBC) = 3; + D_8019F990 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019FFBC) = 3; + D_8019F990 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019F990 = *(s32 *)(D_8019F990 + 4); + return; + case 0x37: + (*(s16*)&D_8019FFBC) = 3; + D_8019FDAC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019FDB0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019FFBC) = 3; + D_8019FDB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019FDB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019FFBC) = 3; + D_8019FDAC = w1; + D_8019FDB0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019FFBC) = 3; + D_8019FDB4 = w2; + D_8019FDB8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x43: + D_8019FDD4 = (s32)func_8017A3D8; + D_8019FDDC = 0; + (*(s16*)&D_8019FFBC) = 5; + D_8019FDD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019FFBC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019FFBC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019FDEC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019FFBC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019FDEC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019FFBC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019FDEC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019FFBC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019FDEC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019FFBC) = 3; + break; + default: + break; + } +Lend: + D_8019F990 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019FDBC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019FDBC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019FDBC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019FDBC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019FDE4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019FDE4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019FDA0; + +s32 func_8017A3B0(void) { + switch (D_8019FDA0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019FDDC; +extern short D_8019FDD8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019FDDC) { + case 0: + func_800D0CA0(1); + D_8019FDDC = D_8019FDDC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019FDD8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019FDDC = D_8019FDDC + 1; + if (D_8019FDDC < 0x1E) { + return 0; + } + D_8019FDDC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019FE1C; + extern s16 D_8019FE1E; + extern s16 D_8019FE20; + extern s16 D_8019FE14; + extern s16 D_8019FE16; + extern s16 D_8019FE18; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019FE1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019FE1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019FE20, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019FE14, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019FE16, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019FE18, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019FDA4; +extern u16 D_8019FE24; +extern u16 D_8019FE26; +extern u16 D_8019FE28; +extern s16 D_8019FF48; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019FF48 = 0; + D_8019FDA4 = 0; + D_8019FE24 = D_80126B5E; + D_8019FE26 = D_80126B62; + D_8019FE28 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183B68[]; + extern s16 D_8019FE1C; + extern s16 D_8019FE14; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183B68[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183B68[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019FE1C; + s16 *p78C = &D_8019FE14; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019FF48 = 1; + D_8019FDA4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019FDC4; + extern SV4_8017B368 D_8019FDCC; + extern s16 D_8019FE1C; + extern s16 D_8019FE14; + extern u16 D_80183B68; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019FDC4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019FDCC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183B68)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183B68)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019FE1C) = loc0; + (*(SV4_8017B368 *)&D_8019FE14) = loc1; + D_8019FF48 = 1; + D_8019FDA4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183B68[]; + extern s16 D_8019FE1C; + extern s16 D_8019FE1E; + extern s16 D_8019FE20; + extern s16 D_8019FE14; + extern s16 D_8019FE16; + extern s16 D_8019FE18; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183B68[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183B68[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019FE1C; + s16 *p78C = &D_8019FE14; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019FE1E; + v798 = D_8019FE20; + v78C = *p78C; + v78E = D_8019FE16; + v790 = D_8019FE18; + __asm__ __volatile__(""); + D_8019FF48 = 1; + D_8019FDA4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019FDA4; +extern s16 D_8019FE1C; +extern s16 D_8019FE1E; +extern s16 D_8019FE20; +extern s16 D_8019FE14; +extern s16 D_8019FE16; +extern s16 D_8019FE18; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019FDA4 = 0; + D_8019FE1C = (s16) D_80114F30; + D_8019FE1E = (s16) D_80114F34; + D_8019FE20 = (s16) D_80114F38; + D_8019FE14 = (s16) D_80114F24; + D_8019FE16 = (s16) D_80114F28; + D_8019FE18 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019FE34; +extern s16 D_8019FE36; +extern s16 D_8019FE38; +extern s16 D_8019FE3C; +extern s16 D_8019FE3E; +extern s16 D_8019FE40; + +void func_8017B824(void) { + D_8019FE34 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019FE36 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019FE38 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019FE3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019FE3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019FE40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019FE34; +extern s16 D_8019FE36; +extern s16 D_8019FE38; +extern s16 D_8019FE3C; +extern s16 D_8019FE3E; +extern s16 D_8019FE40; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019FE34; + D_80114F34 = D_8019FE36; + D_80114F38 = D_8019FE38; + D_80114F24 = D_8019FE3C; + D_80114F28 = D_8019FE3E; + D_80114F2C = D_8019FE40; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019FE1C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019FE14) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019FE1C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019FE14) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019FE24; +extern u16 D_8019FE26; +extern u16 D_8019FE28; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019FDA4; +extern short D_8019FE2C; +extern short D_8019FE2E; +extern short D_8019FE30; +extern s16 D_8019FE1C; +extern s16 D_8019FE1E; +extern s16 D_8019FE20; +extern s16 D_8019FE14; +extern s16 D_8019FE16; +extern s16 D_8019FE18; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019FE24); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019FE26); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019FE28); + (*(s16 *)&D_8019FE2C) = buf[0]; + (*(s16 *)&D_8019FE2E) = buf[1]; + (*(s16 *)&D_8019FE30) = buf[2]; + D_8019FE1C = D_80114F30 + buf[0]; + D_8019FDA4 = 0; + D_8019FE1E = D_80114F34 + buf[1]; + D_8019FE20 = D_80114F38 + buf[2]; + D_8019FE14 = D_80114F24 + buf[0]; + D_8019FE16 = D_80114F28 + buf[1]; + D_8019FE18 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019FDC4; +extern SV4 D_8019FDCC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019FDCC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019FDC4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019FDCC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019FDCC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019FDC4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019FDCC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019FDEC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019FDEC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019FDA4; +extern s16 D_8019FF48; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019FDA4 = D_8019FDA4 + 1; + if (D_8019FDA4 >= 0x1F) { + D_8019FF48 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019FDA4; +extern s16 D_8019FF48; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019FDA4 = D_8019FDA4 + 1; + if (0x18 < D_8019FDA4) { + func_8012A4BC(); + D_8019FF48 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019FDA4; +extern void (*D_8019FDE8)(void); +extern short D_8019FE2C; +extern short D_8019FE2E; +extern short D_8019FE30; +extern s16 D_8019FF48; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019FDA4 = D_8019FDA4 + 1; + if (D_8019FDA4 >= 0x19) { + if (D_8019FDE8 != 0) { + (*D_8019FDE8)(); + } else { + D_80114F30 = D_80114F30 + D_8019FE2C; + D_80114F34 = D_80114F34 + D_8019FE2E; + D_80114F38 = D_80114F38 + D_8019FE30; + D_80114F24 = D_80114F24 + D_8019FE2C; + D_80114F28 = D_80114F28 + D_8019FE2E; + D_80114F2C = D_80114F2C + D_8019FE30; + func_8012A4BC(); + } + D_8019FF48 = 0; + } +} + + + +extern void (*D_80183C08[])(void); + +void func_8017BE60(void *a0) { + D_80183C08[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017CD9C); + + +extern void (*D_8018402C[])(void); + +void func_8017DA00(void *a0) { + D_8018402C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DA3C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DC00); + + +extern void (*D_80184034[])(void); + +void func_8017DC94(void *a0) { + D_80184034[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80184020; + +void func_8017DCD0(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80184020, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DD74); + + +extern void (*D_801840DC[])(void); + +void func_8017DDD8(void *a0) { + D_801840DC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DE14); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DE58(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801840E4[])(void); + +void func_8017DE7C(void *a0) { + D_801840E4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DEB8); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017DEFC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DF3C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DFB8(void) { + func_800D1EBC(); + } + + + +extern void (*D_801840F8[])(void); + +void func_8017DFD8(void *a0) { + D_801840F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E014); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E088); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E0B0); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E0D8); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E100); + + +extern void (*D_80184128[])(void); + +void func_8017E1A0(void *a0) { + D_80184128[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E1DC); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E27C); + + +s32 func_8017E414(void) { + return 95; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E41C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E4C0); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E53C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E5FC); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E724); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017E894); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017EA28); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017EC7C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017ED88); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017EF24); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017EFE0); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F06C); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_80199FF4[]; + s32 func_8017F0A4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80199FF4[0], &D_80199FF4[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F0D0); + +extern u8 D_80078EC1; + s32 func_8017F17C(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F194); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F200); + + +extern void (*D_8019C7E4[])(void); + +void func_8017F30C(void *a0) { + D_8019C7E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F348); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F538); + + +extern void (*D_8019C818[])(void); + +void func_8017F734(void *a0) { + D_8019C818[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F770); + +void func_8017F860(void) { +} + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F868); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017F940); + +void func_8017F9F4(void) { +} + + +extern void (*D_8019CD64[])(void); + +void func_8017F9FC(void *a0) { + D_8019CD64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FA38); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FB0C); + +void func_8017FB34(void) { +} + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FB3C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FC88); + + +extern void func_8012C218(void *a0); + s32 func_8017FDA8(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FDD4); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FDE4); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FDF4); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_8017FE34(void * arg0) { + s32 temp_v0 = *(s32 *)((char *)arg0 + 0xdc); + func_8014ADA8((s32)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FE68); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FE8C); + + +extern void (*D_8019CD8C[])(void); + +void func_8017FEF0(void *a0) { + D_8019CD8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FF2C); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_8017FFB4); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_80180074); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_80178D40", func_801800E4); + + diff --git a/src/ov_SC05_003/ov_SC05_003_jr_801734BC.c b/src/ov_SC05_003/ov_SC05_003_jr_801734BC.c index 0dc88d3a7..33a886640 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_801734BC.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_801734BC.c @@ -3084,1110 +3084,3 @@ void func_80178D18(void) { D_801ACACC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AC8CC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AC8CC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AC8CC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AC8CC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AC8F4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AC8F4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AC8B0; - -s32 func_8017A3B0(void) { - switch (D_801AC8B0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AC8EC; -extern short D_801AC8E8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AC8EC) { - case 0: - func_800D0CA0(1); - D_801AC8EC = D_801AC8EC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AC8E8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AC8EC = D_801AC8EC + 1; - if (D_801AC8EC < 0x1E) { - return 0; - } - D_801AC8EC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AC92C; - extern s16 D_801AC92E; - extern s16 D_801AC930; - extern s16 D_801AC924; - extern s16 D_801AC926; - extern s16 D_801AC928; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AC92C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AC92E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AC930, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AC924, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AC926, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AC928, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AC8B4; -extern u16 D_801AC934; -extern u16 D_801AC936; -extern u16 D_801AC938; -extern s16 D_801ACA58; - -void func_8017B1D8(void) { - func_8012A418(); - D_801ACA58 = 0; - D_801AC8B4 = 0; - D_801AC934 = D_80126B5E; - D_801AC936 = D_80126B62; - D_801AC938 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185EA0[]; - extern s16 D_801AC92C; - extern s16 D_801AC924; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185EA0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185EA0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AC92C; - s16 *p78C = &D_801AC924; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801ACA58 = 1; - D_801AC8B4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AC8D4; - extern SV4_8017B368 D_801AC8DC; - extern s16 D_801AC92C; - extern s16 D_801AC924; - extern u16 D_80185EA0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AC8D4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AC8DC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185EA0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185EA0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AC92C) = loc0; - (*(SV4_8017B368 *)&D_801AC924) = loc1; - D_801ACA58 = 1; - D_801AC8B4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185EA0[]; - extern s16 D_801AC92C; - extern s16 D_801AC92E; - extern s16 D_801AC930; - extern s16 D_801AC924; - extern s16 D_801AC926; - extern s16 D_801AC928; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185EA0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185EA0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AC92C; - s16 *p78C = &D_801AC924; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AC92E; - v798 = D_801AC930; - v78C = *p78C; - v78E = D_801AC926; - v790 = D_801AC928; - __asm__ __volatile__(""); - D_801ACA58 = 1; - D_801AC8B4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AC8B4; -extern s16 D_801AC92C; -extern s16 D_801AC92E; -extern s16 D_801AC930; -extern s16 D_801AC924; -extern s16 D_801AC926; -extern s16 D_801AC928; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AC8B4 = 0; - D_801AC92C = (s16) D_80114F30; - D_801AC92E = (s16) D_80114F34; - D_801AC930 = (s16) D_80114F38; - D_801AC924 = (s16) D_80114F24; - D_801AC926 = (s16) D_80114F28; - D_801AC928 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AC944; -extern s16 D_801AC946; -extern s16 D_801AC948; -extern s16 D_801AC94C; -extern s16 D_801AC94E; -extern s16 D_801AC950; - -void func_8017B824(void) { - D_801AC944 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AC946 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AC948 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AC94C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AC94E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AC950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AC944; -extern s16 D_801AC946; -extern s16 D_801AC948; -extern s16 D_801AC94C; -extern s16 D_801AC94E; -extern s16 D_801AC950; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AC944; - D_80114F34 = D_801AC946; - D_80114F38 = D_801AC948; - D_80114F24 = D_801AC94C; - D_80114F28 = D_801AC94E; - D_80114F2C = D_801AC950; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AC92C), src[8..15] -> (*(S8_8017B8E8 *)&D_801AC924) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AC92C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AC924) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AC934; -extern u16 D_801AC936; -extern u16 D_801AC938; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AC8B4; -extern short D_801AC93C; -extern short D_801AC93E; -extern short D_801AC940; -extern s16 D_801AC92C; -extern s16 D_801AC92E; -extern s16 D_801AC930; -extern s16 D_801AC924; -extern s16 D_801AC926; -extern s16 D_801AC928; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AC934); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AC936); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AC938); - (*(s16 *)&D_801AC93C) = buf[0]; - (*(s16 *)&D_801AC93E) = buf[1]; - (*(s16 *)&D_801AC940) = buf[2]; - D_801AC92C = D_80114F30 + buf[0]; - D_801AC8B4 = 0; - D_801AC92E = D_80114F34 + buf[1]; - D_801AC930 = D_80114F38 + buf[2]; - D_801AC924 = D_80114F24 + buf[0]; - D_801AC926 = D_80114F28 + buf[1]; - D_801AC928 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AC8D4; -extern SV4 D_801AC8DC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AC8DC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AC8D4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AC8DC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AC8DC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AC8D4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AC8DC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AC8FC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AC8FC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AC8B4; -extern s16 D_801ACA58; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AC8B4 = D_801AC8B4 + 1; - if (D_801AC8B4 >= 0x1F) { - D_801ACA58 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AC8B4; -extern s16 D_801ACA58; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AC8B4 = D_801AC8B4 + 1; - if (0x18 < D_801AC8B4) { - func_8012A4BC(); - D_801ACA58 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AC8B4; -extern void (*D_801AC8F8)(void); -extern short D_801AC93C; -extern short D_801AC93E; -extern short D_801AC940; -extern s16 D_801ACA58; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AC8B4 = D_801AC8B4 + 1; - if (D_801AC8B4 >= 0x19) { - if (D_801AC8F8 != 0) { - (*D_801AC8F8)(); - } else { - D_80114F30 = D_80114F30 + D_801AC93C; - D_80114F34 = D_80114F34 + D_801AC93E; - D_80114F38 = D_80114F38 + D_801AC940; - D_80114F24 = D_80114F24 + D_801AC93C; - D_80114F28 = D_80114F28 + D_801AC93E; - D_80114F2C = D_80114F2C + D_801AC940; - func_8012A4BC(); - } - D_801ACA58 = 0; - } -} - - - -extern void (*D_80185F40[])(void); - -void func_8017BE60(void *a0) { - D_80185F40[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017CD9C); - - -extern void (*D_80186364[])(void); - -void func_8017DA00(void *a0) { - D_80186364[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DA3C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DC00); - - -extern void (*D_8018636C[])(void); - -void func_8017DC94(void *a0) { - D_8018636C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80186358; - -void func_8017DCD0(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80186358, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DD74); - - -extern void (*D_801863C4[])(void); - -void func_8017DDD8(void *a0) { - D_801863C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DE14); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DE58(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DE7C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017DEBC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DF38(void) { - func_800D1EBC(); - } - - - -extern void (*D_801863D8[])(void); - -void func_8017DF58(void *a0) { - D_801863D8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017DF94); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E008); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E030); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E058); - - -extern void (*D_80186404[])(void); - -void func_8017E0F4(void *a0) { - D_80186404[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E130); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E1E8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E380); - - -s32 func_8017E67C(void) { - return 95; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E684); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E728); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E7D0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E89C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E940); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801A410C; - void func_8017E9C8(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_8012A828((int)arg0, (int)&D_801A410C); - } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017E9F4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EA34); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EA78); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EAF0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EB44); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EC00); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EC68); - - -void func_8017ED0C(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017ED1C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EDF4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EE60); - -void func_8017EEE4(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - *(short *)((char *)a0 + 0xfe) = 0; - *(unsigned short *)((char *)a0 + 0x5c) = 0xaa10; - *(short *)((char *)a0 + 0x102) = 1; - } - - -void func_8017EF04(void) { -} - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EF0C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017EF88); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F010); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F12C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F1AC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F338); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F4FC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F68C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F738); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801A96A8; - -void func_8017F880(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A96A8); - *(s16 *)((u8 *)arg0 + 0x2) = 0x2; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F8B8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F914); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017F9B4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FB9C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FC3C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FD08); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FDC0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FE44); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FEC0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8017FF60); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801801C0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180230); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801803B8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801804CC); - -void func_80180584(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180598); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801805E4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8018079C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801807F8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180834); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801808E8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180B04); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180C44); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180CE8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180D70); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180E34); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180E58); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80180F44); - - -extern void (*D_801A4770[])(void); - -void func_80181020(void *a0) { - D_801A4770[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8018105C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8018111C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801811EC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801812AC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181438); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801814D8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181540); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801815A0); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181638); - - -void func_80181690(void *a0) { - s32 v0; - v0 = *(s32 *)((s32)a0 + 0x1C); - v0 += 1; - *(s32 *)((s32)a0 + 0x1C) = v0; - if (v0 >= 0x40) { - *(u16 *)((s32)a0 + 0x2) += 1; - } - } - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801816C4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181720); - - -extern void (*D_801A47C4[])(void); - -void func_8018187C(void *a0) { - D_801A47C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801818B8); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181A08); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181AAC); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181C00); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181CDC); - -extern void (*D_801A9F5C[])(void); - -void func_80181E40(void *a0) { - D_801A9F5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181E7C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80181F78); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80182208); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_8018239C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801823F4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_80182470); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_801734BC", func_801824B4); - diff --git a/src/ov_SC05_003/ov_SC05_003_jr_80178D40.c b/src/ov_SC05_003/ov_SC05_003_jr_80178D40.c new file mode 100644 index 000000000..be60ebcc6 --- /dev/null +++ b/src/ov_SC05_003/ov_SC05_003_jr_80178D40.c @@ -0,0 +1,4556 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185748[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801ABC20; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018573C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185780[]; +extern unsigned short D_80185788[]; +extern unsigned short D_80185790[]; +extern unsigned char D_801ABC28[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801ABC20; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185798[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ABD5C; +extern M2C_UNK D_801ABD60; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801ABCE8; +extern void (*D_801857C8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801ABD64[]; +extern u8 D_801ABD6C[]; +extern u8 D_801ABD1C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801857D0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801857EC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801857F4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018585C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185800; +extern u8 D_8018580C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185890[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185898[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801858EC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185920[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185910[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018593C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801859B4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801859BC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801859C4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801859CC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801859D4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801859DC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801859E8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801859F4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185A00[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185A10[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185A20[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185A28[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185A30[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185A38[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185A40[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185A48[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185A50[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185A58[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185A60[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185A68[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185A70[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185A78[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185A80[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185A88[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185A90[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185A98[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185AA0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185AA8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185AB0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185AB8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185AC0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185AC8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185AD0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185B14[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185AD8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185B44[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185B80[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185BD8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185BE8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185BF0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185D58[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185D64[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801AB31C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801ACA58; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AC4A0; +extern short D_801ACACC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801ACACC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801ACACC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AC4A0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801ACACC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801ACA28 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801ACA28 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801ACACC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801ACACC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AC8FC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AC4A4; + extern s32 D_801AC8B8; + extern s16 D_801AC8BC; + extern s16 D_801AC8C0; + extern s16 D_801AC8C4; + extern s16 D_801AC8C8; + extern s32 D_801AC8D0; + extern s32 D_801AC8D4; + extern s32 D_801AC8E4; + extern s16 D_801AC8E8; + extern s16 D_801AC8EC; + extern s32 D_801AC8F0; + extern s32 D_801AC8F8; + extern s32 D_801AC8FC[10]; + extern s32 D_801AC970; + extern s16 D_801ACA28; + extern s32 D_801ACA54; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801ACA28; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AC8B8); + D_801AC8B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AC8C4, D_801AC8C8 ? 0x48 : 0x40); + (*(s16*)&D_801ACACC) = 2; + break; + case 0: + func_80179B28(D_801AC8B8); + D_801AC8B8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AC8BC, D_801AC8C0 ? 0x48 : 0x40); + (*(s16*)&D_801ACACC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AC970 != 0) { + func_80179B28(D_801AC8B8); + D_801AC8B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AC8BC, D_801AC8C0 ? 0x48 : 0x40); + (*(s16*)&D_801ACACC) = 1; + } else { + (*(s16*)&D_801ACACC) = 3; + } + break; + case 0x32: + func_80179B28(D_801AC8B8); + D_801AC8B8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AC8BC, + D_801AC8C0 ? 0x48 : 0x40); + (*(s16*)&D_801ACACC) = 1; + break; + case 2: + func_80179B28(D_801AC8B8); + if (D_801AC8D0 != 0) { + D_801AC4A0 = D_801AC8D0; + D_801AC8D0 = 0; + (*(s16*)&D_801ACACC) = 3; + return; + } + (*(s16*)&D_801ACACC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801ACACC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801ACACC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ACACC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801ACACC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ACACC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x1B: + D_801AC8F0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801ACACC) = 4; + D_801AC4A4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801ACACC) = 5; + D_801AC8E4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AC8E4 = (s32)func_8017A3B0; + (*(s16*)&D_801ACACC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x24: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ACACC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ACACC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801ACACC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ACACC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ACACC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ACACC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ACACC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ACACC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801ACACC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AC8D4); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AC8D4); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AC8D4); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AC8D4); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x4E: + D_801AC8F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x2B: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801ACACC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801ACA54 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x34: + (*(s16*)&D_801ACACC) = 3; + D_801AC4A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AC8D0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801ACACC) = 3; + D_801AC4A0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801ACACC) = 3; + D_801AC4A0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AC4A0 = *(s32 *)(D_801AC4A0 + 4); + return; + case 0x37: + (*(s16*)&D_801ACACC) = 3; + D_801AC8BC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AC8C0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801ACACC) = 3; + D_801AC8C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AC8C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801ACACC) = 3; + D_801AC8BC = w1; + D_801AC8C0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801ACACC) = 3; + D_801AC8C4 = w2; + D_801AC8C8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x43: + D_801AC8E4 = (s32)func_8017A3D8; + D_801AC8EC = 0; + (*(s16*)&D_801ACACC) = 5; + D_801AC8E8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ACACC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ACACC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AC8FC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801ACACC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AC8FC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801ACACC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AC8FC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801ACACC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AC8FC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801ACACC) = 3; + break; + default: + break; + } +Lend: + D_801AC4A0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AC8CC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AC8CC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AC8CC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AC8CC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AC8F4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AC8F4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AC8B0; + +s32 func_8017A3B0(void) { + switch (D_801AC8B0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AC8EC; +extern short D_801AC8E8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AC8EC) { + case 0: + func_800D0CA0(1); + D_801AC8EC = D_801AC8EC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AC8E8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AC8EC = D_801AC8EC + 1; + if (D_801AC8EC < 0x1E) { + return 0; + } + D_801AC8EC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AC92C; + extern s16 D_801AC92E; + extern s16 D_801AC930; + extern s16 D_801AC924; + extern s16 D_801AC926; + extern s16 D_801AC928; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AC92C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AC92E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AC930, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AC924, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AC926, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AC928, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AC8B4; +extern u16 D_801AC934; +extern u16 D_801AC936; +extern u16 D_801AC938; +extern s16 D_801ACA58; + +void func_8017B1D8(void) { + func_8012A418(); + D_801ACA58 = 0; + D_801AC8B4 = 0; + D_801AC934 = D_80126B5E; + D_801AC936 = D_80126B62; + D_801AC938 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185EA0[]; + extern s16 D_801AC92C; + extern s16 D_801AC924; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185EA0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185EA0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AC92C; + s16 *p78C = &D_801AC924; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801ACA58 = 1; + D_801AC8B4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AC8D4; + extern SV4_8017B368 D_801AC8DC; + extern s16 D_801AC92C; + extern s16 D_801AC924; + extern u16 D_80185EA0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AC8D4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AC8DC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185EA0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185EA0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AC92C) = loc0; + (*(SV4_8017B368 *)&D_801AC924) = loc1; + D_801ACA58 = 1; + D_801AC8B4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185EA0[]; + extern s16 D_801AC92C; + extern s16 D_801AC92E; + extern s16 D_801AC930; + extern s16 D_801AC924; + extern s16 D_801AC926; + extern s16 D_801AC928; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185EA0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185EA0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AC92C; + s16 *p78C = &D_801AC924; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AC92E; + v798 = D_801AC930; + v78C = *p78C; + v78E = D_801AC926; + v790 = D_801AC928; + __asm__ __volatile__(""); + D_801ACA58 = 1; + D_801AC8B4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AC8B4; +extern s16 D_801AC92C; +extern s16 D_801AC92E; +extern s16 D_801AC930; +extern s16 D_801AC924; +extern s16 D_801AC926; +extern s16 D_801AC928; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AC8B4 = 0; + D_801AC92C = (s16) D_80114F30; + D_801AC92E = (s16) D_80114F34; + D_801AC930 = (s16) D_80114F38; + D_801AC924 = (s16) D_80114F24; + D_801AC926 = (s16) D_80114F28; + D_801AC928 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AC944; +extern s16 D_801AC946; +extern s16 D_801AC948; +extern s16 D_801AC94C; +extern s16 D_801AC94E; +extern s16 D_801AC950; + +void func_8017B824(void) { + D_801AC944 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AC946 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AC948 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AC94C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AC94E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AC950 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AC944; +extern s16 D_801AC946; +extern s16 D_801AC948; +extern s16 D_801AC94C; +extern s16 D_801AC94E; +extern s16 D_801AC950; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AC944; + D_80114F34 = D_801AC946; + D_80114F38 = D_801AC948; + D_80114F24 = D_801AC94C; + D_80114F28 = D_801AC94E; + D_80114F2C = D_801AC950; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AC92C), src[8..15] -> (*(S8_8017B8E8 *)&D_801AC924) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AC92C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AC924) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AC934; +extern u16 D_801AC936; +extern u16 D_801AC938; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AC8B4; +extern short D_801AC93C; +extern short D_801AC93E; +extern short D_801AC940; +extern s16 D_801AC92C; +extern s16 D_801AC92E; +extern s16 D_801AC930; +extern s16 D_801AC924; +extern s16 D_801AC926; +extern s16 D_801AC928; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AC934); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AC936); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AC938); + (*(s16 *)&D_801AC93C) = buf[0]; + (*(s16 *)&D_801AC93E) = buf[1]; + (*(s16 *)&D_801AC940) = buf[2]; + D_801AC92C = D_80114F30 + buf[0]; + D_801AC8B4 = 0; + D_801AC92E = D_80114F34 + buf[1]; + D_801AC930 = D_80114F38 + buf[2]; + D_801AC924 = D_80114F24 + buf[0]; + D_801AC926 = D_80114F28 + buf[1]; + D_801AC928 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AC8D4; +extern SV4 D_801AC8DC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AC8DC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AC8D4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AC8DC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AC8DC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AC8D4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AC8DC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AC8FC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AC8FC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AC8B4; +extern s16 D_801ACA58; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AC8B4 = D_801AC8B4 + 1; + if (D_801AC8B4 >= 0x1F) { + D_801ACA58 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AC8B4; +extern s16 D_801ACA58; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AC8B4 = D_801AC8B4 + 1; + if (0x18 < D_801AC8B4) { + func_8012A4BC(); + D_801ACA58 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AC8B4; +extern void (*D_801AC8F8)(void); +extern short D_801AC93C; +extern short D_801AC93E; +extern short D_801AC940; +extern s16 D_801ACA58; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AC8B4 = D_801AC8B4 + 1; + if (D_801AC8B4 >= 0x19) { + if (D_801AC8F8 != 0) { + (*D_801AC8F8)(); + } else { + D_80114F30 = D_80114F30 + D_801AC93C; + D_80114F34 = D_80114F34 + D_801AC93E; + D_80114F38 = D_80114F38 + D_801AC940; + D_80114F24 = D_80114F24 + D_801AC93C; + D_80114F28 = D_80114F28 + D_801AC93E; + D_80114F2C = D_80114F2C + D_801AC940; + func_8012A4BC(); + } + D_801ACA58 = 0; + } +} + + + +extern void (*D_80185F40[])(void); + +void func_8017BE60(void *a0) { + D_80185F40[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017CD9C); + + +extern void (*D_80186364[])(void); + +void func_8017DA00(void *a0) { + D_80186364[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DA3C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DC00); + + +extern void (*D_8018636C[])(void); + +void func_8017DC94(void *a0) { + D_8018636C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80186358; + +void func_8017DCD0(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80186358, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DD74); + + +extern void (*D_801863C4[])(void); + +void func_8017DDD8(void *a0) { + D_801863C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DE14); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DE58(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DE7C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017DEBC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DF38(void) { + func_800D1EBC(); + } + + + +extern void (*D_801863D8[])(void); + +void func_8017DF58(void *a0) { + D_801863D8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017DF94); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E008); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E030); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E058); + + +extern void (*D_80186404[])(void); + +void func_8017E0F4(void *a0) { + D_80186404[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E130); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E1E8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E380); + + +s32 func_8017E67C(void) { + return 95; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E684); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E728); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E7D0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E89C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E940); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801A410C; + void func_8017E9C8(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_8012A828((int)arg0, (int)&D_801A410C); + } + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017E9F4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EA34); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EA78); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EAF0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EB44); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EC00); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EC68); + + +void func_8017ED0C(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017ED1C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EDF4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EE60); + +void func_8017EEE4(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + *(short *)((char *)a0 + 0xfe) = 0; + *(unsigned short *)((char *)a0 + 0x5c) = 0xaa10; + *(short *)((char *)a0 + 0x102) = 1; + } + + +void func_8017EF04(void) { +} + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EF0C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017EF88); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F010); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F12C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F1AC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F338); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F4FC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F68C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F738); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801A96A8; + +void func_8017F880(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801A96A8); + *(s16 *)((u8 *)arg0 + 0x2) = 0x2; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F8B8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F914); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017F9B4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FB9C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FC3C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FD08); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FDC0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FE44); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FEC0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8017FF60); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801801C0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180230); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801803B8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801804CC); + +void func_80180584(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180598); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801805E4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8018079C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801807F8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180834); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801808E8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180B04); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180C44); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180CE8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180D70); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180E34); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180E58); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80180F44); + + +extern void (*D_801A4770[])(void); + +void func_80181020(void *a0) { + D_801A4770[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8018105C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8018111C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801811EC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801812AC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181438); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801814D8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181540); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801815A0); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181638); + + +void func_80181690(void *a0) { + s32 v0; + v0 = *(s32 *)((s32)a0 + 0x1C); + v0 += 1; + *(s32 *)((s32)a0 + 0x1C) = v0; + if (v0 >= 0x40) { + *(u16 *)((s32)a0 + 0x2) += 1; + } + } + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801816C4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181720); + + +extern void (*D_801A47C4[])(void); + +void func_8018187C(void *a0) { + D_801A47C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801818B8); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181A08); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181AAC); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181C00); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181CDC); + +extern void (*D_801A9F5C[])(void); + +void func_80181E40(void *a0) { + D_801A9F5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181E7C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80181F78); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80182208); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_8018239C); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801823F4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_80182470); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_80178D40", func_801824B4); + + diff --git a/src/ov_SC05_004/ov_SC05_004_jr_801734BC.c b/src/ov_SC05_004/ov_SC05_004_jr_801734BC.c index c65abd0ba..d0e5a24d3 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_801734BC.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_801734BC.c @@ -3084,1036 +3084,3 @@ void func_80178D18(void) { D_8019F324 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019EF44; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019EF44 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019EF44; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019EF44 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019EF6C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019EF6C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019EF28; - -s32 func_8017A3B0(void) { - switch (D_8019EF28) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019EF64; -extern short D_8019EF60; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019EF64) { - case 0: - func_800D0CA0(1); - D_8019EF64 = D_8019EF64 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019EF60; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019EF64 = D_8019EF64 + 1; - if (D_8019EF64 < 0x1E) { - return 0; - } - D_8019EF64 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019EFA4; - extern s16 D_8019EFA6; - extern s16 D_8019EFA8; - extern s16 D_8019EF9C; - extern s16 D_8019EF9E; - extern s16 D_8019EFA0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019EFA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019EFA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019EFA8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019EF9C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019EF9E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019EFA0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019EF2C; -extern u16 D_8019EFAC; -extern u16 D_8019EFAE; -extern u16 D_8019EFB0; -extern s16 D_8019F2B0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019F2B0 = 0; - D_8019EF2C = 0; - D_8019EFAC = D_80126B5E; - D_8019EFAE = D_80126B62; - D_8019EFB0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184FAC[]; - extern s16 D_8019EFA4; - extern s16 D_8019EF9C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184FAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184FAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019EFA4; - s16 *p78C = &D_8019EF9C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019F2B0 = 1; - D_8019EF2C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019EF4C; - extern SV4_8017B368 D_8019EF54; - extern s16 D_8019EFA4; - extern s16 D_8019EF9C; - extern u16 D_80184FAC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019EF4C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019EF54; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80184FAC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80184FAC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019EFA4) = loc0; - (*(SV4_8017B368 *)&D_8019EF9C) = loc1; - D_8019F2B0 = 1; - D_8019EF2C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184FAC[]; - extern s16 D_8019EFA4; - extern s16 D_8019EFA6; - extern s16 D_8019EFA8; - extern s16 D_8019EF9C; - extern s16 D_8019EF9E; - extern s16 D_8019EFA0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184FAC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184FAC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019EFA4; - s16 *p78C = &D_8019EF9C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019EFA6; - v798 = D_8019EFA8; - v78C = *p78C; - v78E = D_8019EF9E; - v790 = D_8019EFA0; - __asm__ __volatile__(""); - D_8019F2B0 = 1; - D_8019EF2C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019EF2C; -extern s16 D_8019EFA4; -extern s16 D_8019EFA6; -extern s16 D_8019EFA8; -extern s16 D_8019EF9C; -extern s16 D_8019EF9E; -extern s16 D_8019EFA0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019EF2C = 0; - D_8019EFA4 = (s16) D_80114F30; - D_8019EFA6 = (s16) D_80114F34; - D_8019EFA8 = (s16) D_80114F38; - D_8019EF9C = (s16) D_80114F24; - D_8019EF9E = (s16) D_80114F28; - D_8019EFA0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019EFBC; -extern s16 D_8019EFBE; -extern s16 D_8019EFC0; -extern s16 D_8019EFC4; -extern s16 D_8019EFC6; -extern s16 D_8019EFC8; - -void func_8017B824(void) { - D_8019EFBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019EFBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019EFC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019EFC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019EFC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019EFC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019EFBC; -extern s16 D_8019EFBE; -extern s16 D_8019EFC0; -extern s16 D_8019EFC4; -extern s16 D_8019EFC6; -extern s16 D_8019EFC8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019EFBC; - D_80114F34 = D_8019EFBE; - D_80114F38 = D_8019EFC0; - D_80114F24 = D_8019EFC4; - D_80114F28 = D_8019EFC6; - D_80114F2C = D_8019EFC8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019EFA4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019EF9C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019EFA4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019EF9C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019EFAC; -extern u16 D_8019EFAE; -extern u16 D_8019EFB0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019EF2C; -extern short D_8019EFB4; -extern short D_8019EFB6; -extern short D_8019EFB8; -extern s16 D_8019EFA4; -extern s16 D_8019EFA6; -extern s16 D_8019EFA8; -extern s16 D_8019EF9C; -extern s16 D_8019EF9E; -extern s16 D_8019EFA0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019EFAC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019EFAE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019EFB0); - (*(s16 *)&D_8019EFB4) = buf[0]; - (*(s16 *)&D_8019EFB6) = buf[1]; - (*(s16 *)&D_8019EFB8) = buf[2]; - D_8019EFA4 = D_80114F30 + buf[0]; - D_8019EF2C = 0; - D_8019EFA6 = D_80114F34 + buf[1]; - D_8019EFA8 = D_80114F38 + buf[2]; - D_8019EF9C = D_80114F24 + buf[0]; - D_8019EF9E = D_80114F28 + buf[1]; - D_8019EFA0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019EF4C; -extern SV4 D_8019EF54; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019EF54) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019EF4C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019EF54 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019EF54)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019EF4C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019EF54) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019EF74[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019EF74; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019EF2C; -extern s16 D_8019F2B0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019EF2C = D_8019EF2C + 1; - if (D_8019EF2C >= 0x1F) { - D_8019F2B0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019EF2C; -extern s16 D_8019F2B0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019EF2C = D_8019EF2C + 1; - if (0x18 < D_8019EF2C) { - func_8012A4BC(); - D_8019F2B0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019EF2C; -extern void (*D_8019EF70)(void); -extern short D_8019EFB4; -extern short D_8019EFB6; -extern short D_8019EFB8; -extern s16 D_8019F2B0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019EF2C = D_8019EF2C + 1; - if (D_8019EF2C >= 0x19) { - if (D_8019EF70 != 0) { - (*D_8019EF70)(); - } else { - D_80114F30 = D_80114F30 + D_8019EFB4; - D_80114F34 = D_80114F34 + D_8019EFB6; - D_80114F38 = D_80114F38 + D_8019EFB8; - D_80114F24 = D_80114F24 + D_8019EFB4; - D_80114F28 = D_80114F28 + D_8019EFB6; - D_80114F2C = D_80114F2C + D_8019EFB8; - func_8012A4BC(); - } - D_8019F2B0 = 0; - } -} - - - -extern void (*D_8018504C[])(void); - -void func_8017BE60(void *a0) { - D_8018504C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017CE68); - - -extern void (*D_80185064[])(void); - -void func_8017CFC4(void *a0) { - D_80185064[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D000); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D060); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D1FC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D400); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D7F4); - - -extern void (*D_80185340[])(void); - -void func_8017D974(void *a0) { - D_80185340[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017D9B0); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DA24); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DB00); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DD14); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DDE8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DEB8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017DF10); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E008); - - -extern void (*D_801853B4[])(void); - -void func_8017E048(void *a0) { - D_801853B4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E084); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E0C8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E0EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E12C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E1A8(void) { - func_800D1EBC(); - } - - - -extern void (*D_801853C8[])(void); - -void func_8017E1C8(void *a0) { - D_801853C8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E204); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E278); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E2A0); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E2C8); - - -extern void (*D_801853F4[])(void); - -void func_8017E36C(void *a0) { - D_801853F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E3A8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E440); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E5D8); - - -extern void (*D_80185484[])(void); - -void func_8017E730(void *a0) { - D_80185484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E76C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E79C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E808); - -extern s32 D_80126B8C; - void func_8017E90C(void) { - D_80126B8C = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017E91C); - - -s32 func_8017E9D4(void) { - return 95; -} - - - -extern void (*D_801854F8[])(void); - -void func_8017E9DC(void *a0) { - D_801854F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EA18); - -void func_8017EA7C(void) { -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern s32 D_801854E0; - -void func_8017EA84(void *arg0) { - ((void (*)(void *, void *))func_80178CBC)(arg0, &D_801854E0); - *(s16 *)((u8 *)arg0 + 0x2) = 0x3; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EABC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EAFC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EB58); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017EB78(void * arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 2); - } - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017EBA0(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0xc0; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EBC8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EC60); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017ECC4); - - -extern void (*D_80198728[])(void); - -void func_8017EDD8(void *a0) { - D_80198728[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EE14); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EEBC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EF0C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017EFD4); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017F0B8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017F188); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017F210); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017F9BC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8017FFC4); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801800F8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801804B8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801806FC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801807AC); - - -extern void (*D_8019AF58[])(void); - -void func_80180890(void *a0) { - D_8019AF58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801808CC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180930); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801809C4); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180AEC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180B1C); - -void func_80180B48(void) { -} - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180B50); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180C3C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180CBC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180D70); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180E50); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180EB8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180F18); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80180FA8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018101C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018106C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801810EC); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018118C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018125C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801812F0); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018132C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_80181414); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801814D8); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_8018158C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_801734BC", func_801815CC); - diff --git a/src/ov_SC05_004/ov_SC05_004_jr_80178D40.c b/src/ov_SC05_004/ov_SC05_004_jr_80178D40.c new file mode 100644 index 000000000..370a8b6be --- /dev/null +++ b/src/ov_SC05_004/ov_SC05_004_jr_80178D40.c @@ -0,0 +1,4482 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184854[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019E298; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184848[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018488C[]; +extern unsigned short D_80184894[]; +extern unsigned short D_8018489C[]; +extern unsigned char D_8019E2A0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019E298; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801848A4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019E3D4; +extern M2C_UNK D_8019E3D8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019E360; +extern void (*D_801848D4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019E3DC[]; +extern u8 D_8019E3E4[]; +extern u8 D_8019E394[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801848DC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801848F8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80184900[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184968[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018490C; +extern u8 D_80184918; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018499C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801849A4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801849F8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80184A2C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80184A1C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80184A48; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80184AC0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80184AC8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80184AD0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80184AD8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80184AE0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80184AE8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80184AF4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80184B00[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80184B0C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80184B1C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80184B2C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80184B34[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80184B3C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80184B44[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184B4C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80184B54[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184B5C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80184B64[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80184B6C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80184B74[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80184B7C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80184B84[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80184B8C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80184B94[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80184B9C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80184BA4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80184BAC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80184BB4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80184BBC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80184BC4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184BCC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80184BD4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80184BDC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80184C20[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80184BE4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184C50[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80184C8C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80184CE4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80184CF4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80184CFC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184E64[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184E70[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019D910; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019F2B0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019EB18; +extern short D_8019F324; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019F324) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019F324)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019EB18 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019F324) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019F280 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019F280 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019F324) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019F324) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019EF74[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019EB1C; + extern s32 D_8019EF30; + extern s16 D_8019EF34; + extern s16 D_8019EF38; + extern s16 D_8019EF3C; + extern s16 D_8019EF40; + extern s32 D_8019EF48; + extern s32 D_8019EF4C; + extern s32 D_8019EF5C; + extern s16 D_8019EF60; + extern s16 D_8019EF64; + extern s32 D_8019EF68; + extern s32 D_8019EF70; + extern s32 D_8019EF74[10]; + extern s32 D_8019F1C8; + extern s16 D_8019F280; + extern s32 D_8019F2AC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019F280; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019EF30); + D_8019EF30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019EF3C, D_8019EF40 ? 0x48 : 0x40); + (*(s16*)&D_8019F324) = 2; + break; + case 0: + func_80179B28(D_8019EF30); + D_8019EF30 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019EF34, D_8019EF38 ? 0x48 : 0x40); + (*(s16*)&D_8019F324) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019F1C8 != 0) { + func_80179B28(D_8019EF30); + D_8019EF30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019EF34, D_8019EF38 ? 0x48 : 0x40); + (*(s16*)&D_8019F324) = 1; + } else { + (*(s16*)&D_8019F324) = 3; + } + break; + case 0x32: + func_80179B28(D_8019EF30); + D_8019EF30 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019EF34, + D_8019EF38 ? 0x48 : 0x40); + (*(s16*)&D_8019F324) = 1; + break; + case 2: + func_80179B28(D_8019EF30); + if (D_8019EF48 != 0) { + D_8019EB18 = D_8019EF48; + D_8019EF48 = 0; + (*(s16*)&D_8019F324) = 3; + return; + } + (*(s16*)&D_8019F324) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019F324) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019F324) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019F324) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019F324) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019F324) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019F324) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019F324) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019F324) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019F324) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019F324) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019F324) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x1B: + D_8019EF68 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019F324) = 4; + D_8019EB1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019F324) = 5; + D_8019EF5C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019EF5C = (s32)func_8017A3B0; + (*(s16*)&D_8019F324) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x24: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019F324) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019F324) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019F324) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019F324) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019F324) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019F324) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019F324) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019F324) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019F324) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019EF4C); + (*(s16*)&D_8019F324) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019EF4C); + (*(s16*)&D_8019F324) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019EF4C); + (*(s16*)&D_8019F324) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019EF4C); + (*(s16*)&D_8019F324) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + break; + case 0x4E: + D_8019EF70 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x2B: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019F324) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019F2AC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019F324) = 3; + break; + case 0x34: + (*(s16*)&D_8019F324) = 3; + D_8019EB18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019EF48 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019F324) = 3; + D_8019EB18 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019F324) = 3; + D_8019EB18 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019EB18 = *(s32 *)(D_8019EB18 + 4); + return; + case 0x37: + (*(s16*)&D_8019F324) = 3; + D_8019EF34 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019EF38 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019F324) = 3; + D_8019EF3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019EF40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019F324) = 3; + D_8019EF34 = w1; + D_8019EF38 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019F324) = 3; + D_8019EF3C = w2; + D_8019EF40 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + case 0x43: + D_8019EF5C = (s32)func_8017A3D8; + D_8019EF64 = 0; + (*(s16*)&D_8019F324) = 5; + D_8019EF60 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019F324) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019F324) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019F324) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019EF74; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019F324) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019EF74; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019F324) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019EF74[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019F324) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019EF74; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019F324) = 3; + break; + default: + break; + } +Lend: + D_8019EB18 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019EF44; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019EF44 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019EF44; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019EF44 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019EF6C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019EF6C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019EF28; + +s32 func_8017A3B0(void) { + switch (D_8019EF28) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019EF64; +extern short D_8019EF60; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019EF64) { + case 0: + func_800D0CA0(1); + D_8019EF64 = D_8019EF64 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019EF60; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019EF64 = D_8019EF64 + 1; + if (D_8019EF64 < 0x1E) { + return 0; + } + D_8019EF64 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019EFA4; + extern s16 D_8019EFA6; + extern s16 D_8019EFA8; + extern s16 D_8019EF9C; + extern s16 D_8019EF9E; + extern s16 D_8019EFA0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019EFA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019EFA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019EFA8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019EF9C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019EF9E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019EFA0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019EF2C; +extern u16 D_8019EFAC; +extern u16 D_8019EFAE; +extern u16 D_8019EFB0; +extern s16 D_8019F2B0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019F2B0 = 0; + D_8019EF2C = 0; + D_8019EFAC = D_80126B5E; + D_8019EFAE = D_80126B62; + D_8019EFB0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184FAC[]; + extern s16 D_8019EFA4; + extern s16 D_8019EF9C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184FAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184FAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019EFA4; + s16 *p78C = &D_8019EF9C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019F2B0 = 1; + D_8019EF2C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019EF4C; + extern SV4_8017B368 D_8019EF54; + extern s16 D_8019EFA4; + extern s16 D_8019EF9C; + extern u16 D_80184FAC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019EF4C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019EF54; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80184FAC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80184FAC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019EFA4) = loc0; + (*(SV4_8017B368 *)&D_8019EF9C) = loc1; + D_8019F2B0 = 1; + D_8019EF2C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184FAC[]; + extern s16 D_8019EFA4; + extern s16 D_8019EFA6; + extern s16 D_8019EFA8; + extern s16 D_8019EF9C; + extern s16 D_8019EF9E; + extern s16 D_8019EFA0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184FAC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184FAC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019EFA4; + s16 *p78C = &D_8019EF9C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019EFA6; + v798 = D_8019EFA8; + v78C = *p78C; + v78E = D_8019EF9E; + v790 = D_8019EFA0; + __asm__ __volatile__(""); + D_8019F2B0 = 1; + D_8019EF2C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019EF2C; +extern s16 D_8019EFA4; +extern s16 D_8019EFA6; +extern s16 D_8019EFA8; +extern s16 D_8019EF9C; +extern s16 D_8019EF9E; +extern s16 D_8019EFA0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019EF2C = 0; + D_8019EFA4 = (s16) D_80114F30; + D_8019EFA6 = (s16) D_80114F34; + D_8019EFA8 = (s16) D_80114F38; + D_8019EF9C = (s16) D_80114F24; + D_8019EF9E = (s16) D_80114F28; + D_8019EFA0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019EFBC; +extern s16 D_8019EFBE; +extern s16 D_8019EFC0; +extern s16 D_8019EFC4; +extern s16 D_8019EFC6; +extern s16 D_8019EFC8; + +void func_8017B824(void) { + D_8019EFBC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019EFBE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019EFC0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019EFC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019EFC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019EFC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019EFBC; +extern s16 D_8019EFBE; +extern s16 D_8019EFC0; +extern s16 D_8019EFC4; +extern s16 D_8019EFC6; +extern s16 D_8019EFC8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019EFBC; + D_80114F34 = D_8019EFBE; + D_80114F38 = D_8019EFC0; + D_80114F24 = D_8019EFC4; + D_80114F28 = D_8019EFC6; + D_80114F2C = D_8019EFC8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019EFA4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019EF9C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019EFA4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019EF9C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019EFAC; +extern u16 D_8019EFAE; +extern u16 D_8019EFB0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019EF2C; +extern short D_8019EFB4; +extern short D_8019EFB6; +extern short D_8019EFB8; +extern s16 D_8019EFA4; +extern s16 D_8019EFA6; +extern s16 D_8019EFA8; +extern s16 D_8019EF9C; +extern s16 D_8019EF9E; +extern s16 D_8019EFA0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019EFAC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019EFAE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019EFB0); + (*(s16 *)&D_8019EFB4) = buf[0]; + (*(s16 *)&D_8019EFB6) = buf[1]; + (*(s16 *)&D_8019EFB8) = buf[2]; + D_8019EFA4 = D_80114F30 + buf[0]; + D_8019EF2C = 0; + D_8019EFA6 = D_80114F34 + buf[1]; + D_8019EFA8 = D_80114F38 + buf[2]; + D_8019EF9C = D_80114F24 + buf[0]; + D_8019EF9E = D_80114F28 + buf[1]; + D_8019EFA0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019EF4C; +extern SV4 D_8019EF54; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019EF54) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019EF4C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019EF54 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019EF54)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019EF4C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019EF54) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019EF74[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019EF74; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019EF2C; +extern s16 D_8019F2B0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019EF2C = D_8019EF2C + 1; + if (D_8019EF2C >= 0x1F) { + D_8019F2B0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019EF2C; +extern s16 D_8019F2B0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019EF2C = D_8019EF2C + 1; + if (0x18 < D_8019EF2C) { + func_8012A4BC(); + D_8019F2B0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019EF2C; +extern void (*D_8019EF70)(void); +extern short D_8019EFB4; +extern short D_8019EFB6; +extern short D_8019EFB8; +extern s16 D_8019F2B0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019EF2C = D_8019EF2C + 1; + if (D_8019EF2C >= 0x19) { + if (D_8019EF70 != 0) { + (*D_8019EF70)(); + } else { + D_80114F30 = D_80114F30 + D_8019EFB4; + D_80114F34 = D_80114F34 + D_8019EFB6; + D_80114F38 = D_80114F38 + D_8019EFB8; + D_80114F24 = D_80114F24 + D_8019EFB4; + D_80114F28 = D_80114F28 + D_8019EFB6; + D_80114F2C = D_80114F2C + D_8019EFB8; + func_8012A4BC(); + } + D_8019F2B0 = 0; + } +} + + + +extern void (*D_8018504C[])(void); + +void func_8017BE60(void *a0) { + D_8018504C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017CE68); + + +extern void (*D_80185064[])(void); + +void func_8017CFC4(void *a0) { + D_80185064[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D000); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D060); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D1FC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D400); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D7F4); + + +extern void (*D_80185340[])(void); + +void func_8017D974(void *a0) { + D_80185340[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017D9B0); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DA24); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DB00); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DD14); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DDE8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DEB8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017DF10); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E008); + + +extern void (*D_801853B4[])(void); + +void func_8017E048(void *a0) { + D_801853B4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E084); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E0C8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E0EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E12C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E1A8(void) { + func_800D1EBC(); + } + + + +extern void (*D_801853C8[])(void); + +void func_8017E1C8(void *a0) { + D_801853C8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E204); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E278); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E2A0); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E2C8); + + +extern void (*D_801853F4[])(void); + +void func_8017E36C(void *a0) { + D_801853F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E3A8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E440); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E5D8); + + +extern void (*D_80185484[])(void); + +void func_8017E730(void *a0) { + D_80185484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E76C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E79C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E808); + +extern s32 D_80126B8C; + void func_8017E90C(void) { + D_80126B8C = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017E91C); + + +s32 func_8017E9D4(void) { + return 95; +} + + + +extern void (*D_801854F8[])(void); + +void func_8017E9DC(void *a0) { + D_801854F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EA18); + +void func_8017EA7C(void) { +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern s32 D_801854E0; + +void func_8017EA84(void *arg0) { + ((void (*)(void *, void *))func_80178CBC)(arg0, &D_801854E0); + *(s16 *)((u8 *)arg0 + 0x2) = 0x3; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EABC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EAFC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EB58); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017EB78(void * arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 2); + } + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017EBA0(void *a0) { + *(s32 *)((char *)a0 + 0x1c) = 0xc0; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EBC8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EC60); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017ECC4); + + +extern void (*D_80198728[])(void); + +void func_8017EDD8(void *a0) { + D_80198728[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EE14); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EEBC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EF0C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017EFD4); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017F0B8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017F188); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017F210); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017F9BC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8017FFC4); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801800F8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801804B8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801806FC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801807AC); + + +extern void (*D_8019AF58[])(void); + +void func_80180890(void *a0) { + D_8019AF58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801808CC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180930); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801809C4); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180AEC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180B1C); + +void func_80180B48(void) { +} + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180B50); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180C3C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180CBC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180D70); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180E50); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180EB8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180F18); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80180FA8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018101C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018106C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801810EC); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018118C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018125C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801812F0); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018132C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_80181414); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801814D8); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_8018158C); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_80178D40", func_801815CC); + + diff --git a/src/ov_SC05_005/ov_SC05_005_jr_801734BC.c b/src/ov_SC05_005/ov_SC05_005_jr_801734BC.c index 8fee619f7..a80abf6a6 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_801734BC.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_801734BC.c @@ -3084,1134 +3084,3 @@ void func_80178D18(void) { D_801B202C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1BAC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B1BAC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1BAC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B1BAC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B1BD4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B1BD4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B1B90; - -s32 func_8017A3B0(void) { - switch (D_801B1B90) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B1BCC; -extern short D_801B1BC8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B1BCC) { - case 0: - func_800D0CA0(1); - D_801B1BCC = D_801B1BCC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B1BC8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B1BCC = D_801B1BCC + 1; - if (D_801B1BCC < 0x1E) { - return 0; - } - D_801B1BCC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B1C0C; - extern s16 D_801B1C0E; - extern s16 D_801B1C10; - extern s16 D_801B1C04; - extern s16 D_801B1C06; - extern s16 D_801B1C08; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B1C0C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B1C0E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B1C10, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B1C04, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B1C06, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B1C08, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B1B94; -extern u16 D_801B1C14; -extern u16 D_801B1C16; -extern u16 D_801B1C18; -extern s16 D_801B1FB8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B1FB8 = 0; - D_801B1B94 = 0; - D_801B1C14 = D_80126B5E; - D_801B1C16 = D_80126B62; - D_801B1C18 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185D80[]; - extern s16 D_801B1C0C; - extern s16 D_801B1C04; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185D80[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185D80[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B1C0C; - s16 *p78C = &D_801B1C04; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B1FB8 = 1; - D_801B1B94 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B1BB4; - extern SV4_8017B368 D_801B1BBC; - extern s16 D_801B1C0C; - extern s16 D_801B1C04; - extern u16 D_80185D80; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B1BB4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B1BBC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185D80)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185D80)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B1C0C) = loc0; - (*(SV4_8017B368 *)&D_801B1C04) = loc1; - D_801B1FB8 = 1; - D_801B1B94 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185D80[]; - extern s16 D_801B1C0C; - extern s16 D_801B1C0E; - extern s16 D_801B1C10; - extern s16 D_801B1C04; - extern s16 D_801B1C06; - extern s16 D_801B1C08; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185D80[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185D80[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B1C0C; - s16 *p78C = &D_801B1C04; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B1C0E; - v798 = D_801B1C10; - v78C = *p78C; - v78E = D_801B1C06; - v790 = D_801B1C08; - __asm__ __volatile__(""); - D_801B1FB8 = 1; - D_801B1B94 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B1B94; -extern s16 D_801B1C0C; -extern s16 D_801B1C0E; -extern s16 D_801B1C10; -extern s16 D_801B1C04; -extern s16 D_801B1C06; -extern s16 D_801B1C08; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B1B94 = 0; - D_801B1C0C = (s16) D_80114F30; - D_801B1C0E = (s16) D_80114F34; - D_801B1C10 = (s16) D_80114F38; - D_801B1C04 = (s16) D_80114F24; - D_801B1C06 = (s16) D_80114F28; - D_801B1C08 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B1C24; -extern s16 D_801B1C26; -extern s16 D_801B1C28; -extern s16 D_801B1C2C; -extern s16 D_801B1C2E; -extern s16 D_801B1C30; - -void func_8017B824(void) { - D_801B1C24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B1C26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B1C28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B1C2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B1C2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B1C30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B1C24; -extern s16 D_801B1C26; -extern s16 D_801B1C28; -extern s16 D_801B1C2C; -extern s16 D_801B1C2E; -extern s16 D_801B1C30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B1C24; - D_80114F34 = D_801B1C26; - D_80114F38 = D_801B1C28; - D_80114F24 = D_801B1C2C; - D_80114F28 = D_801B1C2E; - D_80114F2C = D_801B1C30; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B1C0C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B1C04) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B1C0C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B1C04) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B1C14; -extern u16 D_801B1C16; -extern u16 D_801B1C18; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B1B94; -extern short D_801B1C1C; -extern short D_801B1C1E; -extern short D_801B1C20; -extern s16 D_801B1C0C; -extern s16 D_801B1C0E; -extern s16 D_801B1C10; -extern s16 D_801B1C04; -extern s16 D_801B1C06; -extern s16 D_801B1C08; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B1C14); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B1C16); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B1C18); - (*(s16 *)&D_801B1C1C) = buf[0]; - (*(s16 *)&D_801B1C1E) = buf[1]; - (*(s16 *)&D_801B1C20) = buf[2]; - D_801B1C0C = D_80114F30 + buf[0]; - D_801B1B94 = 0; - D_801B1C0E = D_80114F34 + buf[1]; - D_801B1C10 = D_80114F38 + buf[2]; - D_801B1C04 = D_80114F24 + buf[0]; - D_801B1C06 = D_80114F28 + buf[1]; - D_801B1C08 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B1BB4; -extern SV4 D_801B1BBC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1BBC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B1BB4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B1BBC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1BBC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B1BB4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B1BBC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B1BDC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B1BDC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B1B94; -extern s16 D_801B1FB8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B1B94 = D_801B1B94 + 1; - if (D_801B1B94 >= 0x1F) { - D_801B1FB8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B1B94; -extern s16 D_801B1FB8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B1B94 = D_801B1B94 + 1; - if (0x18 < D_801B1B94) { - func_8012A4BC(); - D_801B1FB8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B1B94; -extern void (*D_801B1BD8)(void); -extern short D_801B1C1C; -extern short D_801B1C1E; -extern short D_801B1C20; -extern s16 D_801B1FB8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B1B94 = D_801B1B94 + 1; - if (D_801B1B94 >= 0x19) { - if (D_801B1BD8 != 0) { - (*D_801B1BD8)(); - } else { - D_80114F30 = D_80114F30 + D_801B1C1C; - D_80114F34 = D_80114F34 + D_801B1C1E; - D_80114F38 = D_80114F38 + D_801B1C20; - D_80114F24 = D_80114F24 + D_801B1C1C; - D_80114F28 = D_80114F28 + D_801B1C1E; - D_80114F2C = D_80114F2C + D_801B1C20; - func_8012A4BC(); - } - D_801B1FB8 = 0; - } -} - - - -extern void (*D_80185E20[])(void); - -void func_8017BE60(void *a0) { - D_80185E20[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017BEBC); - - -extern void (*D_80185E58[])(void); - -void func_8017BEF8(void *a0) { - D_80185E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017BF84); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017BFE0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C064); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C1CC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C218); - - -extern void (*D_80185E6C[])(void); - -void func_8017C524(void *a0) { - D_80185E6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C560); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C5A0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C610); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C69C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C770); - - -extern void (*D_80185E80[])(void); - -void func_8017C7C4(void *a0) { - D_80185E80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C800); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C8B4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017C910); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017CBB0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017CF3C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D1B4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D2FC); - - -extern void (*D_80185F98[])(void); - -void func_8017D47C(void *a0) { - D_80185F98[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D4B8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D504); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D5F8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D72C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D798); - -extern void func_8012C218(void *a0); - void func_8017D824(void) { - ((void (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D844); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017D898); - - -extern void (*D_80186014[])(void); - -void func_8017E778(void *a0) { - D_80186014[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E7B4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E7F8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E81C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E85C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E8D8); - - -extern void (*D_80186028[])(void); - -void func_8017E8F8(void *a0) { - D_80186028[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E934); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E9A8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E9D0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017E9F8); - - -extern void (*D_80186054[])(void); - -void func_8017EAB0(void *a0) { - D_80186054[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017EAEC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017EC98); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017EE64); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017EFF4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F0AC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F164); - - -extern void (*D_801860C0[])(void); - -void func_8017F1BC(void *a0) { - D_801860C0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_801860B0; - -void func_8017F1F8(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_801860B0 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_8017F274(void) { -} - - -s32 func_8017F27C(void) { - return 95; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F284); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F2E8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F448); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F62C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F6E8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F794); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F840); - - -extern void func_8012A828(s32 arg0, s32 arg1); -extern s32 D_801AB1CC; - -void func_8017F988(void *arg0) { - ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AB1CC); - *(s16 *)((u8 *)arg0 + 0x2) = 0x2; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017F9C0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FA1C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FABC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FCA4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FD44); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FE10); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FEC8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FF4C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8017FFC8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180068); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801802C8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180338); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801804C0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801805D4); - -void func_8018068C(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801806A0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801806EC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801808A4); - -extern void func_8002AC00(s32 arg); -extern void func_8002A04C(s32 a0); -extern void func_8012C098(void); - -void func_80180900(u8 *a0) { - func_8002AC00(0x19); - ((s32 (*)(u8 *))func_8002A04C)(a0); - ((void (*)(u8 *))func_8012C098)(a0); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8018093C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801809F0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180C0C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180D4C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180DF0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180E78); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180F3C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80180F60); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_8018104C); - - -extern void (*D_801A6294[])(void); - -void func_80181128(void *a0) { - D_801A6294[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181164); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181224); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801812F4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801813B4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181540); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801815E0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181648); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801816A8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181740); - -void func_80181798(void *a0) { - s32 v0; - v0 = *(s32 *)((s32)a0 + 0x1C); - v0 += 1; - *(s32 *)((s32)a0 + 0x1C) = v0; - if (v0 >= 0x40) { - *(u16 *)((s32)a0 + 0x2) += 1; - } - } - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801817CC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181828); - - -extern void (*D_801A62E8[])(void); - -void func_80181984(void *a0) { - D_801A62E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801819C0); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181B10); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181BB4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181D08); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181DE4); - -extern void (*D_801ABAB4[])(void); - -void func_80181F48(void *a0) { - D_801ABAB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181F84); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80181FCC); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80182120); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80182194); - - -extern void (*D_801ABB1C[])(void); - -void func_801821D4(void *a0) { - D_801ABB1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_80182210); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801822E8); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_801734BC", func_801823AC); - diff --git a/src/ov_SC05_005/ov_SC05_005_jr_80178D40.c b/src/ov_SC05_005/ov_SC05_005_jr_80178D40.c new file mode 100644 index 000000000..394da863f --- /dev/null +++ b/src/ov_SC05_005/ov_SC05_005_jr_80178D40.c @@ -0,0 +1,4580 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185628[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B0F00; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018561C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185660[]; +extern unsigned short D_80185668[]; +extern unsigned short D_80185670[]; +extern unsigned char D_801B0F08[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B0F00; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185678[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B103C; +extern M2C_UNK D_801B1040; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B0FC8; +extern void (*D_801856A8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B1044[]; +extern u8 D_801B104C[]; +extern u8 D_801B0FFC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801856B0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801856CC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801856D4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018573C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801856E0; +extern u8 D_801856EC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185770[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185778[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801857CC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185800[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801857F0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018581C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185894[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018589C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801858A4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801858AC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801858B4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801858BC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801858C8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801858D4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801858E0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801858F0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185900[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185908[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185910[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185918[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185920[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185928[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185930[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185938[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185940[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185948[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185950[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185958[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185960[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185968[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185970[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185978[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185980[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185988[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185990[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185998[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801859A0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801859A8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801859B0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801859F4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801859B8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185A24[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185A60[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185AB8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185AC8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185AD0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185C38[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185C44[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B05F8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B1FB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B1780; +extern short D_801B202C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B202C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B202C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B1780 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B202C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B1F88 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B1F88 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B202C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B202C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B1BDC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B1784; + extern s32 D_801B1B98; + extern s16 D_801B1B9C; + extern s16 D_801B1BA0; + extern s16 D_801B1BA4; + extern s16 D_801B1BA8; + extern s32 D_801B1BB0; + extern s32 D_801B1BB4; + extern s32 D_801B1BC4; + extern s16 D_801B1BC8; + extern s16 D_801B1BCC; + extern s32 D_801B1BD0; + extern s32 D_801B1BD8; + extern s32 D_801B1BDC[10]; + extern s32 D_801B1ED0; + extern s16 D_801B1F88; + extern s32 D_801B1FB4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B1F88; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B1B98); + D_801B1B98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B1BA4, D_801B1BA8 ? 0x48 : 0x40); + (*(s16*)&D_801B202C) = 2; + break; + case 0: + func_80179B28(D_801B1B98); + D_801B1B98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B1B9C, D_801B1BA0 ? 0x48 : 0x40); + (*(s16*)&D_801B202C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B1ED0 != 0) { + func_80179B28(D_801B1B98); + D_801B1B98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B1B9C, D_801B1BA0 ? 0x48 : 0x40); + (*(s16*)&D_801B202C) = 1; + } else { + (*(s16*)&D_801B202C) = 3; + } + break; + case 0x32: + func_80179B28(D_801B1B98); + D_801B1B98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B1B9C, + D_801B1BA0 ? 0x48 : 0x40); + (*(s16*)&D_801B202C) = 1; + break; + case 2: + func_80179B28(D_801B1B98); + if (D_801B1BB0 != 0) { + D_801B1780 = D_801B1BB0; + D_801B1BB0 = 0; + (*(s16*)&D_801B202C) = 3; + return; + } + (*(s16*)&D_801B202C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B202C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B202C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B202C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B202C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B202C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B202C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B202C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B202C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B202C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B202C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B202C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x1B: + D_801B1BD0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B202C) = 4; + D_801B1784 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B202C) = 5; + D_801B1BC4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B1BC4 = (s32)func_8017A3B0; + (*(s16*)&D_801B202C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x24: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B202C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B202C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B202C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B202C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B202C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B202C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B202C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B202C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B202C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B1BB4); + (*(s16*)&D_801B202C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B1BB4); + (*(s16*)&D_801B202C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B1BB4); + (*(s16*)&D_801B202C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B1BB4); + (*(s16*)&D_801B202C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + break; + case 0x4E: + D_801B1BD8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x2B: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B202C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B1FB4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B202C) = 3; + break; + case 0x34: + (*(s16*)&D_801B202C) = 3; + D_801B1780 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B1BB0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B202C) = 3; + D_801B1780 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B202C) = 3; + D_801B1780 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B1780 = *(s32 *)(D_801B1780 + 4); + return; + case 0x37: + (*(s16*)&D_801B202C) = 3; + D_801B1B9C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1BA0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B202C) = 3; + D_801B1BA4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1BA8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B202C) = 3; + D_801B1B9C = w1; + D_801B1BA0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B202C) = 3; + D_801B1BA4 = w2; + D_801B1BA8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + case 0x43: + D_801B1BC4 = (s32)func_8017A3D8; + D_801B1BCC = 0; + (*(s16*)&D_801B202C) = 5; + D_801B1BC8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B202C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B202C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B202C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B1BDC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B202C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B1BDC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B202C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B1BDC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B202C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B1BDC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B202C) = 3; + break; + default: + break; + } +Lend: + D_801B1780 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1BAC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B1BAC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1BAC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B1BAC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B1BD4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B1BD4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B1B90; + +s32 func_8017A3B0(void) { + switch (D_801B1B90) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B1BCC; +extern short D_801B1BC8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B1BCC) { + case 0: + func_800D0CA0(1); + D_801B1BCC = D_801B1BCC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B1BC8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B1BCC = D_801B1BCC + 1; + if (D_801B1BCC < 0x1E) { + return 0; + } + D_801B1BCC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B1C0C; + extern s16 D_801B1C0E; + extern s16 D_801B1C10; + extern s16 D_801B1C04; + extern s16 D_801B1C06; + extern s16 D_801B1C08; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B1C0C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B1C0E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B1C10, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B1C04, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B1C06, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B1C08, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B1B94; +extern u16 D_801B1C14; +extern u16 D_801B1C16; +extern u16 D_801B1C18; +extern s16 D_801B1FB8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B1FB8 = 0; + D_801B1B94 = 0; + D_801B1C14 = D_80126B5E; + D_801B1C16 = D_80126B62; + D_801B1C18 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185D80[]; + extern s16 D_801B1C0C; + extern s16 D_801B1C04; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185D80[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185D80[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B1C0C; + s16 *p78C = &D_801B1C04; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B1FB8 = 1; + D_801B1B94 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B1BB4; + extern SV4_8017B368 D_801B1BBC; + extern s16 D_801B1C0C; + extern s16 D_801B1C04; + extern u16 D_80185D80; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B1BB4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B1BBC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185D80)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185D80)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B1C0C) = loc0; + (*(SV4_8017B368 *)&D_801B1C04) = loc1; + D_801B1FB8 = 1; + D_801B1B94 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185D80[]; + extern s16 D_801B1C0C; + extern s16 D_801B1C0E; + extern s16 D_801B1C10; + extern s16 D_801B1C04; + extern s16 D_801B1C06; + extern s16 D_801B1C08; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185D80[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185D80[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B1C0C; + s16 *p78C = &D_801B1C04; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B1C0E; + v798 = D_801B1C10; + v78C = *p78C; + v78E = D_801B1C06; + v790 = D_801B1C08; + __asm__ __volatile__(""); + D_801B1FB8 = 1; + D_801B1B94 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B1B94; +extern s16 D_801B1C0C; +extern s16 D_801B1C0E; +extern s16 D_801B1C10; +extern s16 D_801B1C04; +extern s16 D_801B1C06; +extern s16 D_801B1C08; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B1B94 = 0; + D_801B1C0C = (s16) D_80114F30; + D_801B1C0E = (s16) D_80114F34; + D_801B1C10 = (s16) D_80114F38; + D_801B1C04 = (s16) D_80114F24; + D_801B1C06 = (s16) D_80114F28; + D_801B1C08 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B1C24; +extern s16 D_801B1C26; +extern s16 D_801B1C28; +extern s16 D_801B1C2C; +extern s16 D_801B1C2E; +extern s16 D_801B1C30; + +void func_8017B824(void) { + D_801B1C24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B1C26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B1C28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B1C2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B1C2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B1C30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B1C24; +extern s16 D_801B1C26; +extern s16 D_801B1C28; +extern s16 D_801B1C2C; +extern s16 D_801B1C2E; +extern s16 D_801B1C30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B1C24; + D_80114F34 = D_801B1C26; + D_80114F38 = D_801B1C28; + D_80114F24 = D_801B1C2C; + D_80114F28 = D_801B1C2E; + D_80114F2C = D_801B1C30; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B1C0C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B1C04) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B1C0C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B1C04) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B1C14; +extern u16 D_801B1C16; +extern u16 D_801B1C18; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B1B94; +extern short D_801B1C1C; +extern short D_801B1C1E; +extern short D_801B1C20; +extern s16 D_801B1C0C; +extern s16 D_801B1C0E; +extern s16 D_801B1C10; +extern s16 D_801B1C04; +extern s16 D_801B1C06; +extern s16 D_801B1C08; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B1C14); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B1C16); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B1C18); + (*(s16 *)&D_801B1C1C) = buf[0]; + (*(s16 *)&D_801B1C1E) = buf[1]; + (*(s16 *)&D_801B1C20) = buf[2]; + D_801B1C0C = D_80114F30 + buf[0]; + D_801B1B94 = 0; + D_801B1C0E = D_80114F34 + buf[1]; + D_801B1C10 = D_80114F38 + buf[2]; + D_801B1C04 = D_80114F24 + buf[0]; + D_801B1C06 = D_80114F28 + buf[1]; + D_801B1C08 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B1BB4; +extern SV4 D_801B1BBC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1BBC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B1BB4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B1BBC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1BBC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B1BB4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B1BBC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B1BDC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B1BDC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B1B94; +extern s16 D_801B1FB8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B1B94 = D_801B1B94 + 1; + if (D_801B1B94 >= 0x1F) { + D_801B1FB8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B1B94; +extern s16 D_801B1FB8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B1B94 = D_801B1B94 + 1; + if (0x18 < D_801B1B94) { + func_8012A4BC(); + D_801B1FB8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B1B94; +extern void (*D_801B1BD8)(void); +extern short D_801B1C1C; +extern short D_801B1C1E; +extern short D_801B1C20; +extern s16 D_801B1FB8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B1B94 = D_801B1B94 + 1; + if (D_801B1B94 >= 0x19) { + if (D_801B1BD8 != 0) { + (*D_801B1BD8)(); + } else { + D_80114F30 = D_80114F30 + D_801B1C1C; + D_80114F34 = D_80114F34 + D_801B1C1E; + D_80114F38 = D_80114F38 + D_801B1C20; + D_80114F24 = D_80114F24 + D_801B1C1C; + D_80114F28 = D_80114F28 + D_801B1C1E; + D_80114F2C = D_80114F2C + D_801B1C20; + func_8012A4BC(); + } + D_801B1FB8 = 0; + } +} + + + +extern void (*D_80185E20[])(void); + +void func_8017BE60(void *a0) { + D_80185E20[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017BEBC); + + +extern void (*D_80185E58[])(void); + +void func_8017BEF8(void *a0) { + D_80185E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017BF84); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017BFE0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C064); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C1CC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C218); + + +extern void (*D_80185E6C[])(void); + +void func_8017C524(void *a0) { + D_80185E6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C560); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C5A0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C610); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C69C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C770); + + +extern void (*D_80185E80[])(void); + +void func_8017C7C4(void *a0) { + D_80185E80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C800); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C8B4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017C910); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017CBB0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017CF3C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D1B4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D2FC); + + +extern void (*D_80185F98[])(void); + +void func_8017D47C(void *a0) { + D_80185F98[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D4B8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D504); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D5F8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D72C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D798); + +extern void func_8012C218(void *a0); + void func_8017D824(void) { + ((void (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D844); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017D898); + + +extern void (*D_80186014[])(void); + +void func_8017E778(void *a0) { + D_80186014[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E7B4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E7F8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E81C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E85C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E8D8); + + +extern void (*D_80186028[])(void); + +void func_8017E8F8(void *a0) { + D_80186028[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E934); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E9A8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E9D0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017E9F8); + + +extern void (*D_80186054[])(void); + +void func_8017EAB0(void *a0) { + D_80186054[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017EAEC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017EC98); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017EE64); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017EFF4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F0AC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F164); + + +extern void (*D_801860C0[])(void); + +void func_8017F1BC(void *a0) { + D_801860C0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_801860B0; + +void func_8017F1F8(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_801860B0 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_8017F274(void) { +} + + +s32 func_8017F27C(void) { + return 95; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F284); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F2E8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F448); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F62C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F6E8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F794); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F840); + + +extern void func_8012A828(s32 arg0, s32 arg1); +extern s32 D_801AB1CC; + +void func_8017F988(void *arg0) { + ((void (*)(void *, void *))func_8012A828)(arg0, &D_801AB1CC); + *(s16 *)((u8 *)arg0 + 0x2) = 0x2; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017F9C0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FA1C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FABC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FCA4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FD44); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FE10); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FEC8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FF4C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8017FFC8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180068); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801802C8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180338); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801804C0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801805D4); + +void func_8018068C(void *a0) { + *(s8 *)((s32)a0 + 0xc1) = 0; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = 0; + *(s16 *)((s32)a0 + 0x5e) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801806A0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801806EC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801808A4); + +extern void func_8002AC00(s32 arg); +extern void func_8002A04C(s32 a0); +extern void func_8012C098(void); + +void func_80180900(u8 *a0) { + func_8002AC00(0x19); + ((s32 (*)(u8 *))func_8002A04C)(a0); + ((void (*)(u8 *))func_8012C098)(a0); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8018093C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801809F0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180C0C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180D4C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180DF0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180E78); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180F3C); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80180F60); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_8018104C); + + +extern void (*D_801A6294[])(void); + +void func_80181128(void *a0) { + D_801A6294[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181164); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181224); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801812F4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801813B4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181540); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801815E0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181648); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801816A8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181740); + +void func_80181798(void *a0) { + s32 v0; + v0 = *(s32 *)((s32)a0 + 0x1C); + v0 += 1; + *(s32 *)((s32)a0 + 0x1C) = v0; + if (v0 >= 0x40) { + *(u16 *)((s32)a0 + 0x2) += 1; + } + } + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801817CC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181828); + + +extern void (*D_801A62E8[])(void); + +void func_80181984(void *a0) { + D_801A62E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801819C0); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181B10); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181BB4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181D08); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181DE4); + +extern void (*D_801ABAB4[])(void); + +void func_80181F48(void *a0) { + D_801ABAB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181F84); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80181FCC); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80182120); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80182194); + + +extern void (*D_801ABB1C[])(void); + +void func_801821D4(void *a0) { + D_801ABB1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_80182210); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801822E8); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_80178D40", func_801823AC); + + diff --git a/src/ov_SC05_006/ov_SC05_006_jr_801734BC.c b/src/ov_SC05_006/ov_SC05_006_jr_801734BC.c index 72a6f5e76..322dce848 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_801734BC.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_801734BC.c @@ -3084,952 +3084,3 @@ void func_80178D18(void) { D_8019015C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018FCE4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018FCE4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018FCE4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018FCE4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018FD0C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018FD0C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018FCC8; - -s32 func_8017A3B0(void) { - switch (D_8018FCC8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018FD04; -extern short D_8018FD00; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018FD04) { - case 0: - func_800D0CA0(1); - D_8018FD04 = D_8018FD04 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018FD00; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018FD04 = D_8018FD04 + 1; - if (D_8018FD04 < 0x1E) { - return 0; - } - D_8018FD04 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018FD44; - extern s16 D_8018FD46; - extern s16 D_8018FD48; - extern s16 D_8018FD3C; - extern s16 D_8018FD3E; - extern s16 D_8018FD40; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018FD44, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018FD46, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018FD48, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018FD3C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018FD3E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018FD40, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018FCCC; -extern u16 D_8018FD4C; -extern u16 D_8018FD4E; -extern u16 D_8018FD50; -extern s16 D_801900E8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801900E8 = 0; - D_8018FCCC = 0; - D_8018FD4C = D_80126B5E; - D_8018FD4E = D_80126B62; - D_8018FD50 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182DA0[]; - extern s16 D_8018FD44; - extern s16 D_8018FD3C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182DA0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182DA0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018FD44; - s16 *p78C = &D_8018FD3C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801900E8 = 1; - D_8018FCCC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018FCEC; - extern SV4_8017B368 D_8018FCF4; - extern s16 D_8018FD44; - extern s16 D_8018FD3C; - extern u16 D_80182DA0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018FCEC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018FCF4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182DA0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182DA0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018FD44) = loc0; - (*(SV4_8017B368 *)&D_8018FD3C) = loc1; - D_801900E8 = 1; - D_8018FCCC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182DA0[]; - extern s16 D_8018FD44; - extern s16 D_8018FD46; - extern s16 D_8018FD48; - extern s16 D_8018FD3C; - extern s16 D_8018FD3E; - extern s16 D_8018FD40; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182DA0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182DA0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018FD44; - s16 *p78C = &D_8018FD3C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018FD46; - v798 = D_8018FD48; - v78C = *p78C; - v78E = D_8018FD3E; - v790 = D_8018FD40; - __asm__ __volatile__(""); - D_801900E8 = 1; - D_8018FCCC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018FCCC; -extern s16 D_8018FD44; -extern s16 D_8018FD46; -extern s16 D_8018FD48; -extern s16 D_8018FD3C; -extern s16 D_8018FD3E; -extern s16 D_8018FD40; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018FCCC = 0; - D_8018FD44 = (s16) D_80114F30; - D_8018FD46 = (s16) D_80114F34; - D_8018FD48 = (s16) D_80114F38; - D_8018FD3C = (s16) D_80114F24; - D_8018FD3E = (s16) D_80114F28; - D_8018FD40 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018FD5C; -extern s16 D_8018FD5E; -extern s16 D_8018FD60; -extern s16 D_8018FD64; -extern s16 D_8018FD66; -extern s16 D_8018FD68; - -void func_8017B824(void) { - D_8018FD5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018FD5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018FD60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018FD64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018FD66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018FD68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018FD5C; -extern s16 D_8018FD5E; -extern s16 D_8018FD60; -extern s16 D_8018FD64; -extern s16 D_8018FD66; -extern s16 D_8018FD68; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018FD5C; - D_80114F34 = D_8018FD5E; - D_80114F38 = D_8018FD60; - D_80114F24 = D_8018FD64; - D_80114F28 = D_8018FD66; - D_80114F2C = D_8018FD68; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018FD44), src[8..15] -> (*(S8_8017B8E8 *)&D_8018FD3C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018FD44) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018FD3C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018FD4C; -extern u16 D_8018FD4E; -extern u16 D_8018FD50; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018FCCC; -extern short D_8018FD54; -extern short D_8018FD56; -extern short D_8018FD58; -extern s16 D_8018FD44; -extern s16 D_8018FD46; -extern s16 D_8018FD48; -extern s16 D_8018FD3C; -extern s16 D_8018FD3E; -extern s16 D_8018FD40; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018FD4C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018FD4E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018FD50); - (*(s16 *)&D_8018FD54) = buf[0]; - (*(s16 *)&D_8018FD56) = buf[1]; - (*(s16 *)&D_8018FD58) = buf[2]; - D_8018FD44 = D_80114F30 + buf[0]; - D_8018FCCC = 0; - D_8018FD46 = D_80114F34 + buf[1]; - D_8018FD48 = D_80114F38 + buf[2]; - D_8018FD3C = D_80114F24 + buf[0]; - D_8018FD3E = D_80114F28 + buf[1]; - D_8018FD40 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018FCEC; -extern SV4 D_8018FCF4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018FCF4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018FCEC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018FCF4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018FCF4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018FCEC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018FCF4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018FD14[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018FD14; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018FCCC; -extern s16 D_801900E8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018FCCC = D_8018FCCC + 1; - if (D_8018FCCC >= 0x1F) { - D_801900E8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018FCCC; -extern s16 D_801900E8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018FCCC = D_8018FCCC + 1; - if (0x18 < D_8018FCCC) { - func_8012A4BC(); - D_801900E8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018FCCC; -extern void (*D_8018FD10)(void); -extern short D_8018FD54; -extern short D_8018FD56; -extern short D_8018FD58; -extern s16 D_801900E8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018FCCC = D_8018FCCC + 1; - if (D_8018FCCC >= 0x19) { - if (D_8018FD10 != 0) { - (*D_8018FD10)(); - } else { - D_80114F30 = D_80114F30 + D_8018FD54; - D_80114F34 = D_80114F34 + D_8018FD56; - D_80114F38 = D_80114F38 + D_8018FD58; - D_80114F24 = D_80114F24 + D_8018FD54; - D_80114F28 = D_80114F28 + D_8018FD56; - D_80114F2C = D_80114F2C + D_8018FD58; - func_8012A4BC(); - } - D_801900E8 = 0; - } -} - - - -extern void (*D_80182E40[])(void); - -void func_8017BE60(void *a0) { - D_80182E40[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017CD9C); - - -extern void (*D_80182E78[])(void); - -void func_8017CDD8(void *a0) { - D_80182E78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017CE14); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017CE64); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017CEC0); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017CF44); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D0F8); - - -extern void (*D_80182E8C[])(void); - -void func_8017D404(void *a0) { - D_80182E8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D440); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D480); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D4F0); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D57C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D650); - - -extern void (*D_80182EA0[])(void); - -void func_8017D6A4(void *a0) { - D_80182EA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D6E0); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D794); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D7F0); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017D960); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017DA90); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017DE1C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E094); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E1DC); - - -extern void (*D_80182FB8[])(void); - -void func_8017E35C(void *a0) { - D_80182FB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E398); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E3E4); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E4D8); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E60C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E678); - -extern void func_8012C218(void *a0); - void func_8017E704(void) { - ((s32 (*)(void))func_8012C218)(); - } - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E724); - - -extern void (*D_80183034[])(void); - -void func_8017E778(void *a0) { - D_80183034[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E7B4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E7F8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E81C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E85C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E8D8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80183048[])(void); - -void func_8017E8F8(void *a0) { - D_80183048[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E934); - - -extern void (*D_80183054[])(void); - -void func_8017E9A8(void *a0) { - D_80183054[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017E9E4); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EA24); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EA4C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EA74); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EA9C); - - -extern void (*D_80183088[])(void); - -void func_8017EB38(void *a0) { - D_80183088[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EB74); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EC74); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EE0C); - - -extern void (*D_801830B0[])(void); - -void func_8017EF68(void *a0) { - D_801830B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017EFA4); - - -extern void (*D_801830B8[])(void); - -void func_8017F130(void *a0) { - D_801830B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017F16C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017F25C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_801734BC", func_8017F354); - - -s32 func_8017F40C(void) { - return 95; -} - - diff --git a/src/ov_SC05_006/ov_SC05_006_jr_80178D40.c b/src/ov_SC05_006/ov_SC05_006_jr_80178D40.c new file mode 100644 index 000000000..cc2af8d1f --- /dev/null +++ b/src/ov_SC05_006/ov_SC05_006_jr_80178D40.c @@ -0,0 +1,4398 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182648[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018F038; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018263C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182680[]; +extern unsigned short D_80182688[]; +extern unsigned short D_80182690[]; +extern unsigned char D_8018F040[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018F038; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182698[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018F174; +extern M2C_UNK D_8018F178; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018F100; +extern void (*D_801826C8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018F17C[]; +extern u8 D_8018F184[]; +extern u8 D_8018F134[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801826D0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801826EC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801826F4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018275C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182700; +extern u8 D_8018270C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182790[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182798[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801827EC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182820[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182810[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018283C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801828B4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801828BC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801828C4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801828CC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801828D4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801828DC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801828E8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801828F4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182900[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182910[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182920[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182928[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182930[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182938[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182940[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182948[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182950[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182958[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182960[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182968[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182970[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182978[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182980[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182988[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182990[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182998[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801829A0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801829A8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801829B0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801829B8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801829C0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801829C8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801829D0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182A14[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801829D8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80182A44[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182A80[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182AD8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182AE8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182AF0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182C58[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182C64[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E748; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801900E8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F8B8; +extern short D_8019015C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019015C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019015C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F8B8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019015C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801900B8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801900B8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019015C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019015C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018FD14[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F8BC; + extern s32 D_8018FCD0; + extern s16 D_8018FCD4; + extern s16 D_8018FCD8; + extern s16 D_8018FCDC; + extern s16 D_8018FCE0; + extern s32 D_8018FCE8; + extern s32 D_8018FCEC; + extern s32 D_8018FCFC; + extern s16 D_8018FD00; + extern s16 D_8018FD04; + extern s32 D_8018FD08; + extern s32 D_8018FD10; + extern s32 D_8018FD14[10]; + extern s32 D_80190000; + extern s16 D_801900B8; + extern s32 D_801900E4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801900B8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018FCD0); + D_8018FCD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018FCDC, D_8018FCE0 ? 0x48 : 0x40); + (*(s16*)&D_8019015C) = 2; + break; + case 0: + func_80179B28(D_8018FCD0); + D_8018FCD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018FCD4, D_8018FCD8 ? 0x48 : 0x40); + (*(s16*)&D_8019015C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80190000 != 0) { + func_80179B28(D_8018FCD0); + D_8018FCD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018FCD4, D_8018FCD8 ? 0x48 : 0x40); + (*(s16*)&D_8019015C) = 1; + } else { + (*(s16*)&D_8019015C) = 3; + } + break; + case 0x32: + func_80179B28(D_8018FCD0); + D_8018FCD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018FCD4, + D_8018FCD8 ? 0x48 : 0x40); + (*(s16*)&D_8019015C) = 1; + break; + case 2: + func_80179B28(D_8018FCD0); + if (D_8018FCE8 != 0) { + D_8018F8B8 = D_8018FCE8; + D_8018FCE8 = 0; + (*(s16*)&D_8019015C) = 3; + return; + } + (*(s16*)&D_8019015C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019015C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019015C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019015C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019015C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019015C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019015C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019015C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019015C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019015C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019015C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019015C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x1B: + D_8018FD08 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019015C) = 4; + D_8018F8BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019015C) = 5; + D_8018FCFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018FCFC = (s32)func_8017A3B0; + (*(s16*)&D_8019015C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x24: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019015C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019015C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019015C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019015C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019015C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019015C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019015C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019015C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019015C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018FCEC); + (*(s16*)&D_8019015C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018FCEC); + (*(s16*)&D_8019015C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018FCEC); + (*(s16*)&D_8019015C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018FCEC); + (*(s16*)&D_8019015C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + break; + case 0x4E: + D_8018FD10 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019015C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801900E4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019015C) = 3; + break; + case 0x34: + (*(s16*)&D_8019015C) = 3; + D_8018F8B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018FCE8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019015C) = 3; + D_8018F8B8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019015C) = 3; + D_8018F8B8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F8B8 = *(s32 *)(D_8018F8B8 + 4); + return; + case 0x37: + (*(s16*)&D_8019015C) = 3; + D_8018FCD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018FCD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019015C) = 3; + D_8018FCDC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018FCE0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019015C) = 3; + D_8018FCD4 = w1; + D_8018FCD8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019015C) = 3; + D_8018FCDC = w2; + D_8018FCE0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + case 0x43: + D_8018FCFC = (s32)func_8017A3D8; + D_8018FD04 = 0; + (*(s16*)&D_8019015C) = 5; + D_8018FD00 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019015C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019015C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019015C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018FD14; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019015C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018FD14; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019015C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018FD14[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019015C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018FD14; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019015C) = 3; + break; + default: + break; + } +Lend: + D_8018F8B8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018FCE4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018FCE4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018FCE4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018FCE4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018FD0C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018FD0C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018FCC8; + +s32 func_8017A3B0(void) { + switch (D_8018FCC8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018FD04; +extern short D_8018FD00; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018FD04) { + case 0: + func_800D0CA0(1); + D_8018FD04 = D_8018FD04 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018FD00; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018FD04 = D_8018FD04 + 1; + if (D_8018FD04 < 0x1E) { + return 0; + } + D_8018FD04 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018FD44; + extern s16 D_8018FD46; + extern s16 D_8018FD48; + extern s16 D_8018FD3C; + extern s16 D_8018FD3E; + extern s16 D_8018FD40; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018FD44, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018FD46, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018FD48, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018FD3C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018FD3E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018FD40, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018FCCC; +extern u16 D_8018FD4C; +extern u16 D_8018FD4E; +extern u16 D_8018FD50; +extern s16 D_801900E8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801900E8 = 0; + D_8018FCCC = 0; + D_8018FD4C = D_80126B5E; + D_8018FD4E = D_80126B62; + D_8018FD50 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182DA0[]; + extern s16 D_8018FD44; + extern s16 D_8018FD3C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182DA0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182DA0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018FD44; + s16 *p78C = &D_8018FD3C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801900E8 = 1; + D_8018FCCC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018FCEC; + extern SV4_8017B368 D_8018FCF4; + extern s16 D_8018FD44; + extern s16 D_8018FD3C; + extern u16 D_80182DA0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018FCEC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018FCF4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182DA0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182DA0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018FD44) = loc0; + (*(SV4_8017B368 *)&D_8018FD3C) = loc1; + D_801900E8 = 1; + D_8018FCCC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182DA0[]; + extern s16 D_8018FD44; + extern s16 D_8018FD46; + extern s16 D_8018FD48; + extern s16 D_8018FD3C; + extern s16 D_8018FD3E; + extern s16 D_8018FD40; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182DA0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182DA0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018FD44; + s16 *p78C = &D_8018FD3C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018FD46; + v798 = D_8018FD48; + v78C = *p78C; + v78E = D_8018FD3E; + v790 = D_8018FD40; + __asm__ __volatile__(""); + D_801900E8 = 1; + D_8018FCCC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018FCCC; +extern s16 D_8018FD44; +extern s16 D_8018FD46; +extern s16 D_8018FD48; +extern s16 D_8018FD3C; +extern s16 D_8018FD3E; +extern s16 D_8018FD40; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018FCCC = 0; + D_8018FD44 = (s16) D_80114F30; + D_8018FD46 = (s16) D_80114F34; + D_8018FD48 = (s16) D_80114F38; + D_8018FD3C = (s16) D_80114F24; + D_8018FD3E = (s16) D_80114F28; + D_8018FD40 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018FD5C; +extern s16 D_8018FD5E; +extern s16 D_8018FD60; +extern s16 D_8018FD64; +extern s16 D_8018FD66; +extern s16 D_8018FD68; + +void func_8017B824(void) { + D_8018FD5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018FD5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018FD60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018FD64 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018FD66 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018FD68 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018FD5C; +extern s16 D_8018FD5E; +extern s16 D_8018FD60; +extern s16 D_8018FD64; +extern s16 D_8018FD66; +extern s16 D_8018FD68; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018FD5C; + D_80114F34 = D_8018FD5E; + D_80114F38 = D_8018FD60; + D_80114F24 = D_8018FD64; + D_80114F28 = D_8018FD66; + D_80114F2C = D_8018FD68; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018FD44), src[8..15] -> (*(S8_8017B8E8 *)&D_8018FD3C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018FD44) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018FD3C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018FD4C; +extern u16 D_8018FD4E; +extern u16 D_8018FD50; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018FCCC; +extern short D_8018FD54; +extern short D_8018FD56; +extern short D_8018FD58; +extern s16 D_8018FD44; +extern s16 D_8018FD46; +extern s16 D_8018FD48; +extern s16 D_8018FD3C; +extern s16 D_8018FD3E; +extern s16 D_8018FD40; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018FD4C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018FD4E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018FD50); + (*(s16 *)&D_8018FD54) = buf[0]; + (*(s16 *)&D_8018FD56) = buf[1]; + (*(s16 *)&D_8018FD58) = buf[2]; + D_8018FD44 = D_80114F30 + buf[0]; + D_8018FCCC = 0; + D_8018FD46 = D_80114F34 + buf[1]; + D_8018FD48 = D_80114F38 + buf[2]; + D_8018FD3C = D_80114F24 + buf[0]; + D_8018FD3E = D_80114F28 + buf[1]; + D_8018FD40 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018FCEC; +extern SV4 D_8018FCF4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018FCF4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018FCEC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018FCF4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018FCF4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018FCEC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018FCF4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018FD14[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018FD14; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018FCCC; +extern s16 D_801900E8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018FCCC = D_8018FCCC + 1; + if (D_8018FCCC >= 0x1F) { + D_801900E8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018FCCC; +extern s16 D_801900E8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018FCCC = D_8018FCCC + 1; + if (0x18 < D_8018FCCC) { + func_8012A4BC(); + D_801900E8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018FCCC; +extern void (*D_8018FD10)(void); +extern short D_8018FD54; +extern short D_8018FD56; +extern short D_8018FD58; +extern s16 D_801900E8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018FCCC = D_8018FCCC + 1; + if (D_8018FCCC >= 0x19) { + if (D_8018FD10 != 0) { + (*D_8018FD10)(); + } else { + D_80114F30 = D_80114F30 + D_8018FD54; + D_80114F34 = D_80114F34 + D_8018FD56; + D_80114F38 = D_80114F38 + D_8018FD58; + D_80114F24 = D_80114F24 + D_8018FD54; + D_80114F28 = D_80114F28 + D_8018FD56; + D_80114F2C = D_80114F2C + D_8018FD58; + func_8012A4BC(); + } + D_801900E8 = 0; + } +} + + + +extern void (*D_80182E40[])(void); + +void func_8017BE60(void *a0) { + D_80182E40[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017CD9C); + + +extern void (*D_80182E78[])(void); + +void func_8017CDD8(void *a0) { + D_80182E78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017CE14); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017CE64); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017CEC0); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017CF44); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D0F8); + + +extern void (*D_80182E8C[])(void); + +void func_8017D404(void *a0) { + D_80182E8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D440); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D480); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D4F0); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D57C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D650); + + +extern void (*D_80182EA0[])(void); + +void func_8017D6A4(void *a0) { + D_80182EA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D6E0); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D794); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D7F0); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017D960); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017DA90); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017DE1C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E094); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E1DC); + + +extern void (*D_80182FB8[])(void); + +void func_8017E35C(void *a0) { + D_80182FB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E398); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E3E4); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E4D8); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E60C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E678); + +extern void func_8012C218(void *a0); + void func_8017E704(void) { + ((s32 (*)(void))func_8012C218)(); + } + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E724); + + +extern void (*D_80183034[])(void); + +void func_8017E778(void *a0) { + D_80183034[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E7B4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E7F8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E81C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E85C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017E8D8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80183048[])(void); + +void func_8017E8F8(void *a0) { + D_80183048[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E934); + + +extern void (*D_80183054[])(void); + +void func_8017E9A8(void *a0) { + D_80183054[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017E9E4); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EA24); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EA4C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EA74); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EA9C); + + +extern void (*D_80183088[])(void); + +void func_8017EB38(void *a0) { + D_80183088[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EB74); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EC74); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EE0C); + + +extern void (*D_801830B0[])(void); + +void func_8017EF68(void *a0) { + D_801830B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017EFA4); + + +extern void (*D_801830B8[])(void); + +void func_8017F130(void *a0) { + D_801830B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017F16C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017F25C); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_80178D40", func_8017F354); + + +s32 func_8017F40C(void) { + return 95; +} + + + diff --git a/src/ov_SC05_007/ov_SC05_007_jr_801734BC.c b/src/ov_SC05_007/ov_SC05_007_jr_801734BC.c index b5a1bda0d..af20a8b6f 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_801734BC.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_801734BC.c @@ -3084,1108 +3084,3 @@ void func_80178D18(void) { D_8019CEFC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019CCC4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019CCC4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019CCC4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019CCC4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019CCEC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019CCEC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019CCA8; - -s32 func_8017A3B0(void) { - switch (D_8019CCA8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019CCE4; -extern short D_8019CCE0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019CCE4) { - case 0: - func_800D0CA0(1); - D_8019CCE4 = D_8019CCE4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019CCE0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019CCE4 = D_8019CCE4 + 1; - if (D_8019CCE4 < 0x1E) { - return 0; - } - D_8019CCE4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019CD24; - extern s16 D_8019CD26; - extern s16 D_8019CD28; - extern s16 D_8019CD1C; - extern s16 D_8019CD1E; - extern s16 D_8019CD20; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019CD24, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019CD26, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019CD28, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019CD1C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019CD1E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019CD20, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019CCAC; -extern u16 D_8019CD2C; -extern u16 D_8019CD2E; -extern u16 D_8019CD30; -extern s16 D_8019CE88; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019CE88 = 0; - D_8019CCAC = 0; - D_8019CD2C = D_80126B5E; - D_8019CD2E = D_80126B62; - D_8019CD30 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018439C[]; - extern s16 D_8019CD24; - extern s16 D_8019CD1C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018439C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018439C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019CD24; - s16 *p78C = &D_8019CD1C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019CE88 = 1; - D_8019CCAC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019CCCC; - extern SV4_8017B368 D_8019CCD4; - extern s16 D_8019CD24; - extern s16 D_8019CD1C; - extern u16 D_8018439C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019CCCC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019CCD4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018439C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018439C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019CD24) = loc0; - (*(SV4_8017B368 *)&D_8019CD1C) = loc1; - D_8019CE88 = 1; - D_8019CCAC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018439C[]; - extern s16 D_8019CD24; - extern s16 D_8019CD26; - extern s16 D_8019CD28; - extern s16 D_8019CD1C; - extern s16 D_8019CD1E; - extern s16 D_8019CD20; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018439C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018439C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019CD24; - s16 *p78C = &D_8019CD1C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019CD26; - v798 = D_8019CD28; - v78C = *p78C; - v78E = D_8019CD1E; - v790 = D_8019CD20; - __asm__ __volatile__(""); - D_8019CE88 = 1; - D_8019CCAC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019CCAC; -extern s16 D_8019CD24; -extern s16 D_8019CD26; -extern s16 D_8019CD28; -extern s16 D_8019CD1C; -extern s16 D_8019CD1E; -extern s16 D_8019CD20; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019CCAC = 0; - D_8019CD24 = (s16) D_80114F30; - D_8019CD26 = (s16) D_80114F34; - D_8019CD28 = (s16) D_80114F38; - D_8019CD1C = (s16) D_80114F24; - D_8019CD1E = (s16) D_80114F28; - D_8019CD20 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019CD3C; -extern s16 D_8019CD3E; -extern s16 D_8019CD40; -extern s16 D_8019CD44; -extern s16 D_8019CD46; -extern s16 D_8019CD48; - -void func_8017B824(void) { - D_8019CD3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019CD3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019CD40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019CD44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019CD46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019CD48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019CD3C; -extern s16 D_8019CD3E; -extern s16 D_8019CD40; -extern s16 D_8019CD44; -extern s16 D_8019CD46; -extern s16 D_8019CD48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019CD3C; - D_80114F34 = D_8019CD3E; - D_80114F38 = D_8019CD40; - D_80114F24 = D_8019CD44; - D_80114F28 = D_8019CD46; - D_80114F2C = D_8019CD48; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019CD24), src[8..15] -> (*(S8_8017B8E8 *)&D_8019CD1C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019CD24) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019CD1C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019CD2C; -extern u16 D_8019CD2E; -extern u16 D_8019CD30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019CCAC; -extern short D_8019CD34; -extern short D_8019CD36; -extern short D_8019CD38; -extern s16 D_8019CD24; -extern s16 D_8019CD26; -extern s16 D_8019CD28; -extern s16 D_8019CD1C; -extern s16 D_8019CD1E; -extern s16 D_8019CD20; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019CD2C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019CD2E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019CD30); - (*(s16 *)&D_8019CD34) = buf[0]; - (*(s16 *)&D_8019CD36) = buf[1]; - (*(s16 *)&D_8019CD38) = buf[2]; - D_8019CD24 = D_80114F30 + buf[0]; - D_8019CCAC = 0; - D_8019CD26 = D_80114F34 + buf[1]; - D_8019CD28 = D_80114F38 + buf[2]; - D_8019CD1C = D_80114F24 + buf[0]; - D_8019CD1E = D_80114F28 + buf[1]; - D_8019CD20 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019CCCC; -extern SV4 D_8019CCD4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019CCD4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019CCCC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019CCD4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019CCD4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019CCCC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019CCD4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019CCF4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019CCF4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019CCAC; -extern s16 D_8019CE88; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019CCAC = D_8019CCAC + 1; - if (D_8019CCAC >= 0x1F) { - D_8019CE88 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019CCAC; -extern s16 D_8019CE88; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019CCAC = D_8019CCAC + 1; - if (0x18 < D_8019CCAC) { - func_8012A4BC(); - D_8019CE88 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019CCAC; -extern void (*D_8019CCF0)(void); -extern short D_8019CD34; -extern short D_8019CD36; -extern short D_8019CD38; -extern s16 D_8019CE88; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019CCAC = D_8019CCAC + 1; - if (D_8019CCAC >= 0x19) { - if (D_8019CCF0 != 0) { - (*D_8019CCF0)(); - } else { - D_80114F30 = D_80114F30 + D_8019CD34; - D_80114F34 = D_80114F34 + D_8019CD36; - D_80114F38 = D_80114F38 + D_8019CD38; - D_80114F24 = D_80114F24 + D_8019CD34; - D_80114F28 = D_80114F28 + D_8019CD36; - D_80114F2C = D_80114F2C + D_8019CD38; - func_8012A4BC(); - } - D_8019CE88 = 0; - } -} - - - -extern void (*D_8018443C[])(void); - -void func_8017BE60(void *a0) { - D_8018443C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017BEBC); - - -extern void (*D_80184498[])(void); - -void func_8017CD9C(void *a0) { - D_80184498[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801844A0[])(void); - -void func_8017CE40(void *a0) { - D_801844A0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017CE7C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEBC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017CF38); - - -extern void (*D_801844AC[])(void); - -void func_8017CF58(void *a0) { - D_801844AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017CF94); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D008); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D030); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D058); - - -extern void (*D_801844D8[])(void); - -void func_8017D0F4(void *a0) { - D_801844D8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D130); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D1E8); - - -extern void (*D_801844F8[])(void); - -void func_8017D380(void *a0) { - D_801844F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D3BC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D490); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D52C); - -void func_8017D58C(void) { -} - -void func_8017D594(void) { -} - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D59C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D5FC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D614); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D638); - -extern void func_80147324(s32 arg); - void func_8017D64C(void) { - func_80147324(0x7F1); - } - - -extern void func_80147324(s32 arg); - void func_8017D66C(void) { - func_80147324(0x7F0); - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D68C); - - -extern void (*D_80184634[])(void); - -void func_8017D764(void *a0) { - D_80184634[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D7A0); - -void func_8017D8FC(void) { -} - -extern s32 func_8017D904(void); - -s32 func_8017D904(void) { - return 0x5F; -} - - - -extern void (*D_8019092C[])(void); - -void func_8017D90C(void *a0) { - D_8019092C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D948); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017D990); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DAE4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DB58); - -extern void (*D_80190994[])(void); - -void func_8017DB98(void *a0) { - D_80190994[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DBD4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DCAC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DD70); - -extern void func_80174684(void *); - extern s32 func_8017DDE0; - void func_8017DDB8(void) { - func_80174684(&func_8017DDE0); - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DDE0); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DE1C); - -void func_8017DE70(void) { -} - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DE78); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DED0); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DF40); - -void func_8017DFBC(void) { -} - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DFC4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017DFEC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E078); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_80197498; - void func_8017E0F4(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_80197498); - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E124); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E1F4); - -extern s32 func_8012BEE8(s32 arg); - void func_8017E268(void *a0) { - if (func_8012BEE8((s32)a0)) { - *(s16 *)((s32)a0 + 0x2) = 0x5; - } - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E29C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E360); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E438); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E518); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E560); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E688); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E740); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E7D0); - - -extern s32 func_8012BEE8(s32 arg); - extern void func_8017F08C(s32 arg); - void func_8017E814(s32 arg0) { - if (!func_8012BEE8(arg0)) { - func_8017F08C(arg0); - } - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E84C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E874); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E8A4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E930); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017E9E8); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EAD8); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EB30); - - -void func_8017EBD4(s32 *a0) { - *(s32 *)((s32)a0 + 0x1C) = 6; - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EBE4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017ECCC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017ED28); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EDB0); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EE80); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017EF48); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F020); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F08C); - - -extern s32 rand(void); - void func_8017F188(s32 arg0) { - if ((rand() & 1) != 0) { - *(s16*)(arg0 + 0x2) = 0xA; - } else { - *(s16*)(arg0 + 0x2) = 0x3; - } - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F1C4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F230); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F42C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F568); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F5FC); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F678); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F738); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F860); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017F9D0); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017FB64); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017FDB8); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8017FEC4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80180060); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8018011C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_801801A8); - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_80197CF4[]; - s32 func_801801E0(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80197CF4[0], &D_80197CF4[8], 5) != 0; - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8018020C); - - -extern u8 D_80078EC1; - s32 func_801802B8(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_801802D0); - - -extern void (*D_8019A360[])(void); - -void func_8018033C(void *a0) { - D_8019A360[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80180378); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80180474); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80180704); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_80180898); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_801808F0); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_8018096C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_801734BC", func_801809B0); - diff --git a/src/ov_SC05_007/ov_SC05_007_jr_80178D40.c b/src/ov_SC05_007/ov_SC05_007_jr_80178D40.c new file mode 100644 index 000000000..7411691b5 --- /dev/null +++ b/src/ov_SC05_007/ov_SC05_007_jr_80178D40.c @@ -0,0 +1,4554 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183C44[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019C018; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80183C38[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183C7C[]; +extern unsigned short D_80183C84[]; +extern unsigned short D_80183C8C[]; +extern unsigned char D_8019C020[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019C018; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183C94[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C154; +extern M2C_UNK D_8019C158; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C0E0; +extern void (*D_80183CC4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019C15C[]; +extern u8 D_8019C164[]; +extern u8 D_8019C114[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80183CCC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80183CE8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80183CF0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80183D58[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80183CFC; +extern u8 D_80183D08; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183D8C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183D94[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80183DE8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80183E1C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80183E0C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80183E38; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183EB0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80183EB8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183EC0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80183EC8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80183ED0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80183ED8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80183EE4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80183EF0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80183EFC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80183F0C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80183F1C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80183F24[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80183F2C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183F34[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80183F3C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183F44[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80183F4C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80183F54[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80183F5C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183F64[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183F6C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183F74[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183F7C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183F84[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183F8C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183F94[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183F9C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183FA4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183FAC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183FB4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183FBC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183FC4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183FCC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80184010[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183FD4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184040[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018407C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801840D4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801840E4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801840EC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184254[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184260[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019B720; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019CE88; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019C898; +extern short D_8019CEFC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019CEFC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019CEFC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019C898 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019CEFC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019CE58 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019CE58 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019CEFC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019CEFC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019CCF4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019C89C; + extern s32 D_8019CCB0; + extern s16 D_8019CCB4; + extern s16 D_8019CCB8; + extern s16 D_8019CCBC; + extern s16 D_8019CCC0; + extern s32 D_8019CCC8; + extern s32 D_8019CCCC; + extern s32 D_8019CCDC; + extern s16 D_8019CCE0; + extern s16 D_8019CCE4; + extern s32 D_8019CCE8; + extern s32 D_8019CCF0; + extern s32 D_8019CCF4[10]; + extern s32 D_8019CDA0; + extern s16 D_8019CE58; + extern s32 D_8019CE84; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019CE58; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019CCB0); + D_8019CCB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019CCBC, D_8019CCC0 ? 0x48 : 0x40); + (*(s16*)&D_8019CEFC) = 2; + break; + case 0: + func_80179B28(D_8019CCB0); + D_8019CCB0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019CCB4, D_8019CCB8 ? 0x48 : 0x40); + (*(s16*)&D_8019CEFC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019CDA0 != 0) { + func_80179B28(D_8019CCB0); + D_8019CCB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019CCB4, D_8019CCB8 ? 0x48 : 0x40); + (*(s16*)&D_8019CEFC) = 1; + } else { + (*(s16*)&D_8019CEFC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019CCB0); + D_8019CCB0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019CCB4, + D_8019CCB8 ? 0x48 : 0x40); + (*(s16*)&D_8019CEFC) = 1; + break; + case 2: + func_80179B28(D_8019CCB0); + if (D_8019CCC8 != 0) { + D_8019C898 = D_8019CCC8; + D_8019CCC8 = 0; + (*(s16*)&D_8019CEFC) = 3; + return; + } + (*(s16*)&D_8019CEFC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019CEFC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019CEFC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019CEFC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x1B: + D_8019CCE8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019CEFC) = 4; + D_8019C89C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019CEFC) = 5; + D_8019CCDC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019CCDC = (s32)func_8017A3B0; + (*(s16*)&D_8019CEFC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x24: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019CEFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019CEFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019CEFC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019CEFC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019CEFC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019CEFC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019CEFC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019CCCC); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019CCCC); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019CCCC); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019CCCC); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x4E: + D_8019CCF0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019CEFC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019CE84 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x34: + (*(s16*)&D_8019CEFC) = 3; + D_8019C898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019CCC8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019CEFC) = 3; + D_8019C898 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019CEFC) = 3; + D_8019C898 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019C898 = *(s32 *)(D_8019C898 + 4); + return; + case 0x37: + (*(s16*)&D_8019CEFC) = 3; + D_8019CCB4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019CCB8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019CEFC) = 3; + D_8019CCBC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019CCC0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019CEFC) = 3; + D_8019CCB4 = w1; + D_8019CCB8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019CEFC) = 3; + D_8019CCBC = w2; + D_8019CCC0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x43: + D_8019CCDC = (s32)func_8017A3D8; + D_8019CCE4 = 0; + (*(s16*)&D_8019CEFC) = 5; + D_8019CCE0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019CEFC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019CEFC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019CCF4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019CEFC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019CCF4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019CEFC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019CCF4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019CEFC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019CCF4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019CEFC) = 3; + break; + default: + break; + } +Lend: + D_8019C898 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019CCC4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019CCC4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019CCC4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019CCC4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019CCEC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019CCEC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019CCA8; + +s32 func_8017A3B0(void) { + switch (D_8019CCA8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019CCE4; +extern short D_8019CCE0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019CCE4) { + case 0: + func_800D0CA0(1); + D_8019CCE4 = D_8019CCE4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019CCE0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019CCE4 = D_8019CCE4 + 1; + if (D_8019CCE4 < 0x1E) { + return 0; + } + D_8019CCE4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019CD24; + extern s16 D_8019CD26; + extern s16 D_8019CD28; + extern s16 D_8019CD1C; + extern s16 D_8019CD1E; + extern s16 D_8019CD20; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019CD24, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019CD26, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019CD28, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019CD1C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019CD1E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019CD20, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019CCAC; +extern u16 D_8019CD2C; +extern u16 D_8019CD2E; +extern u16 D_8019CD30; +extern s16 D_8019CE88; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019CE88 = 0; + D_8019CCAC = 0; + D_8019CD2C = D_80126B5E; + D_8019CD2E = D_80126B62; + D_8019CD30 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018439C[]; + extern s16 D_8019CD24; + extern s16 D_8019CD1C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018439C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018439C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019CD24; + s16 *p78C = &D_8019CD1C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019CE88 = 1; + D_8019CCAC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019CCCC; + extern SV4_8017B368 D_8019CCD4; + extern s16 D_8019CD24; + extern s16 D_8019CD1C; + extern u16 D_8018439C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019CCCC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019CCD4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018439C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018439C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019CD24) = loc0; + (*(SV4_8017B368 *)&D_8019CD1C) = loc1; + D_8019CE88 = 1; + D_8019CCAC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018439C[]; + extern s16 D_8019CD24; + extern s16 D_8019CD26; + extern s16 D_8019CD28; + extern s16 D_8019CD1C; + extern s16 D_8019CD1E; + extern s16 D_8019CD20; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018439C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018439C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019CD24; + s16 *p78C = &D_8019CD1C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019CD26; + v798 = D_8019CD28; + v78C = *p78C; + v78E = D_8019CD1E; + v790 = D_8019CD20; + __asm__ __volatile__(""); + D_8019CE88 = 1; + D_8019CCAC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019CCAC; +extern s16 D_8019CD24; +extern s16 D_8019CD26; +extern s16 D_8019CD28; +extern s16 D_8019CD1C; +extern s16 D_8019CD1E; +extern s16 D_8019CD20; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019CCAC = 0; + D_8019CD24 = (s16) D_80114F30; + D_8019CD26 = (s16) D_80114F34; + D_8019CD28 = (s16) D_80114F38; + D_8019CD1C = (s16) D_80114F24; + D_8019CD1E = (s16) D_80114F28; + D_8019CD20 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019CD3C; +extern s16 D_8019CD3E; +extern s16 D_8019CD40; +extern s16 D_8019CD44; +extern s16 D_8019CD46; +extern s16 D_8019CD48; + +void func_8017B824(void) { + D_8019CD3C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019CD3E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019CD40 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019CD44 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019CD46 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019CD48 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019CD3C; +extern s16 D_8019CD3E; +extern s16 D_8019CD40; +extern s16 D_8019CD44; +extern s16 D_8019CD46; +extern s16 D_8019CD48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019CD3C; + D_80114F34 = D_8019CD3E; + D_80114F38 = D_8019CD40; + D_80114F24 = D_8019CD44; + D_80114F28 = D_8019CD46; + D_80114F2C = D_8019CD48; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019CD24), src[8..15] -> (*(S8_8017B8E8 *)&D_8019CD1C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019CD24) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019CD1C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019CD2C; +extern u16 D_8019CD2E; +extern u16 D_8019CD30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019CCAC; +extern short D_8019CD34; +extern short D_8019CD36; +extern short D_8019CD38; +extern s16 D_8019CD24; +extern s16 D_8019CD26; +extern s16 D_8019CD28; +extern s16 D_8019CD1C; +extern s16 D_8019CD1E; +extern s16 D_8019CD20; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019CD2C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019CD2E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019CD30); + (*(s16 *)&D_8019CD34) = buf[0]; + (*(s16 *)&D_8019CD36) = buf[1]; + (*(s16 *)&D_8019CD38) = buf[2]; + D_8019CD24 = D_80114F30 + buf[0]; + D_8019CCAC = 0; + D_8019CD26 = D_80114F34 + buf[1]; + D_8019CD28 = D_80114F38 + buf[2]; + D_8019CD1C = D_80114F24 + buf[0]; + D_8019CD1E = D_80114F28 + buf[1]; + D_8019CD20 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019CCCC; +extern SV4 D_8019CCD4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019CCD4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019CCCC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019CCD4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019CCD4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019CCCC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019CCD4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019CCF4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019CCF4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019CCAC; +extern s16 D_8019CE88; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019CCAC = D_8019CCAC + 1; + if (D_8019CCAC >= 0x1F) { + D_8019CE88 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019CCAC; +extern s16 D_8019CE88; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019CCAC = D_8019CCAC + 1; + if (0x18 < D_8019CCAC) { + func_8012A4BC(); + D_8019CE88 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019CCAC; +extern void (*D_8019CCF0)(void); +extern short D_8019CD34; +extern short D_8019CD36; +extern short D_8019CD38; +extern s16 D_8019CE88; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019CCAC = D_8019CCAC + 1; + if (D_8019CCAC >= 0x19) { + if (D_8019CCF0 != 0) { + (*D_8019CCF0)(); + } else { + D_80114F30 = D_80114F30 + D_8019CD34; + D_80114F34 = D_80114F34 + D_8019CD36; + D_80114F38 = D_80114F38 + D_8019CD38; + D_80114F24 = D_80114F24 + D_8019CD34; + D_80114F28 = D_80114F28 + D_8019CD36; + D_80114F2C = D_80114F2C + D_8019CD38; + func_8012A4BC(); + } + D_8019CE88 = 0; + } +} + + + +extern void (*D_8018443C[])(void); + +void func_8017BE60(void *a0) { + D_8018443C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017BEBC); + + +extern void (*D_80184498[])(void); + +void func_8017CD9C(void *a0) { + D_80184498[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801844A0[])(void); + +void func_8017CE40(void *a0) { + D_801844A0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017CE7C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEBC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017CF38); + + +extern void (*D_801844AC[])(void); + +void func_8017CF58(void *a0) { + D_801844AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017CF94); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D008); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D030); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D058); + + +extern void (*D_801844D8[])(void); + +void func_8017D0F4(void *a0) { + D_801844D8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D130); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D1E8); + + +extern void (*D_801844F8[])(void); + +void func_8017D380(void *a0) { + D_801844F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D3BC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D490); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D52C); + +void func_8017D58C(void) { +} + +void func_8017D594(void) { +} + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D59C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D5FC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D614); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D638); + +extern void func_80147324(s32 arg); + void func_8017D64C(void) { + func_80147324(0x7F1); + } + + +extern void func_80147324(s32 arg); + void func_8017D66C(void) { + func_80147324(0x7F0); + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D68C); + + +extern void (*D_80184634[])(void); + +void func_8017D764(void *a0) { + D_80184634[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D7A0); + +void func_8017D8FC(void) { +} + +extern s32 func_8017D904(void); + +s32 func_8017D904(void) { + return 0x5F; +} + + + +extern void (*D_8019092C[])(void); + +void func_8017D90C(void *a0) { + D_8019092C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D948); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017D990); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DAE4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DB58); + +extern void (*D_80190994[])(void); + +void func_8017DB98(void *a0) { + D_80190994[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DBD4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DCAC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DD70); + +extern void func_80174684(void *); + extern s32 func_8017DDE0; + void func_8017DDB8(void) { + func_80174684(&func_8017DDE0); + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DDE0); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DE1C); + +void func_8017DE70(void) { +} + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DE78); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DED0); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DF40); + +void func_8017DFBC(void) { +} + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DFC4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017DFEC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E078); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_80197498; + void func_8017E0F4(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_80197498); + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E124); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E1F4); + +extern s32 func_8012BEE8(s32 arg); + void func_8017E268(void *a0) { + if (func_8012BEE8((s32)a0)) { + *(s16 *)((s32)a0 + 0x2) = 0x5; + } + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E29C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E360); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E438); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E518); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E560); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E688); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E740); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E7D0); + + +extern s32 func_8012BEE8(s32 arg); + extern void func_8017F08C(s32 arg); + void func_8017E814(s32 arg0) { + if (!func_8012BEE8(arg0)) { + func_8017F08C(arg0); + } + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E84C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E874); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E8A4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E930); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017E9E8); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EAD8); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EB30); + + +void func_8017EBD4(s32 *a0) { + *(s32 *)((s32)a0 + 0x1C) = 6; + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EBE4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017ECCC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017ED28); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EDB0); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EE80); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017EF48); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F020); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F08C); + + +extern s32 rand(void); + void func_8017F188(s32 arg0) { + if ((rand() & 1) != 0) { + *(s16*)(arg0 + 0x2) = 0xA; + } else { + *(s16*)(arg0 + 0x2) = 0x3; + } + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F1C4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F230); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F42C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F568); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F5FC); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F678); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F738); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F860); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017F9D0); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017FB64); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017FDB8); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8017FEC4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80180060); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8018011C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_801801A8); + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_80197CF4[]; + s32 func_801801E0(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80197CF4[0], &D_80197CF4[8], 5) != 0; + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8018020C); + + +extern u8 D_80078EC1; + s32 func_801802B8(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_801802D0); + + +extern void (*D_8019A360[])(void); + +void func_8018033C(void *a0) { + D_8019A360[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80180378); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80180474); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80180704); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_80180898); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_801808F0); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_8018096C); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_80178D40", func_801809B0); + + diff --git a/src/ov_SC05_008/ov_SC05_008_jr_801734BC.c b/src/ov_SC05_008/ov_SC05_008_jr_801734BC.c index 0b7da4afe..002de8a93 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_801734BC.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_801734BC.c @@ -3084,1310 +3084,3 @@ void func_80178D18(void) { D_801A12E8 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A0FF4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A0FF4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A0FF4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A0FF4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A101C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A101C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A0FD8; - -s32 func_8017A3B0(void) { - switch (D_801A0FD8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A1014; -extern short D_801A1010; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A1014) { - case 0: - func_800D0CA0(1); - D_801A1014 = D_801A1014 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A1010; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A1014 = D_801A1014 + 1; - if (D_801A1014 < 0x1E) { - return 0; - } - D_801A1014 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A1054; - extern s16 D_801A1056; - extern s16 D_801A1058; - extern s16 D_801A104C; - extern s16 D_801A104E; - extern s16 D_801A1050; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1054, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1056, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1058, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A104C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A104E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1050, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A0FDC; -extern u16 D_801A105C; -extern u16 D_801A105E; -extern u16 D_801A1060; -extern s16 D_801A1270; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A1270 = 0; - D_801A0FDC = 0; - D_801A105C = D_80126B5E; - D_801A105E = D_80126B62; - D_801A1060 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801862F4[]; - extern s16 D_801A1054; - extern s16 D_801A104C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801862F4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801862F4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1054; - s16 *p78C = &D_801A104C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A1270 = 1; - D_801A0FDC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A0FFC; - extern SV4_8017B368 D_801A1004; - extern s16 D_801A1054; - extern s16 D_801A104C; - extern u16 D_801862F4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A0FFC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A1004; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801862F4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801862F4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A1054) = loc0; - (*(SV4_8017B368 *)&D_801A104C) = loc1; - D_801A1270 = 1; - D_801A0FDC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801862F4[]; - extern s16 D_801A1054; - extern s16 D_801A1056; - extern s16 D_801A1058; - extern s16 D_801A104C; - extern s16 D_801A104E; - extern s16 D_801A1050; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801862F4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801862F4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1054; - s16 *p78C = &D_801A104C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A1056; - v798 = D_801A1058; - v78C = *p78C; - v78E = D_801A104E; - v790 = D_801A1050; - __asm__ __volatile__(""); - D_801A1270 = 1; - D_801A0FDC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A0FDC; -extern s16 D_801A1054; -extern s16 D_801A1056; -extern s16 D_801A1058; -extern s16 D_801A104C; -extern s16 D_801A104E; -extern s16 D_801A1050; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A0FDC = 0; - D_801A1054 = (s16) D_80114F30; - D_801A1056 = (s16) D_80114F34; - D_801A1058 = (s16) D_80114F38; - D_801A104C = (s16) D_80114F24; - D_801A104E = (s16) D_80114F28; - D_801A1050 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A106C; -extern s16 D_801A106E; -extern s16 D_801A1070; -extern s16 D_801A1074; -extern s16 D_801A1076; -extern s16 D_801A1078; - -void func_8017B824(void) { - D_801A106C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A106E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A1070 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A1074 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A1076 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A1078 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A106C; -extern s16 D_801A106E; -extern s16 D_801A1070; -extern s16 D_801A1074; -extern s16 D_801A1076; -extern s16 D_801A1078; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A106C; - D_80114F34 = D_801A106E; - D_80114F38 = D_801A1070; - D_80114F24 = D_801A1074; - D_80114F28 = D_801A1076; - D_80114F2C = D_801A1078; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A1054), src[8..15] -> (*(S8_8017B8E8 *)&D_801A104C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A1054) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A104C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A105C; -extern u16 D_801A105E; -extern u16 D_801A1060; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A0FDC; -extern short D_801A1064; -extern short D_801A1066; -extern short D_801A1068; -extern s16 D_801A1054; -extern s16 D_801A1056; -extern s16 D_801A1058; -extern s16 D_801A104C; -extern s16 D_801A104E; -extern s16 D_801A1050; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A105C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A105E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1060); - (*(s16 *)&D_801A1064) = buf[0]; - (*(s16 *)&D_801A1066) = buf[1]; - (*(s16 *)&D_801A1068) = buf[2]; - D_801A1054 = D_80114F30 + buf[0]; - D_801A0FDC = 0; - D_801A1056 = D_80114F34 + buf[1]; - D_801A1058 = D_80114F38 + buf[2]; - D_801A104C = D_80114F24 + buf[0]; - D_801A104E = D_80114F28 + buf[1]; - D_801A1050 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A0FFC; -extern SV4 D_801A1004; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A1004) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A0FFC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A1004 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A1004)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A0FFC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A1004) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A1024[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A1024; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A0FDC; -extern s16 D_801A1270; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A0FDC = D_801A0FDC + 1; - if (D_801A0FDC >= 0x1F) { - D_801A1270 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A0FDC; -extern s16 D_801A1270; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A0FDC = D_801A0FDC + 1; - if (0x18 < D_801A0FDC) { - func_8012A4BC(); - D_801A1270 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A0FDC; -extern void (*D_801A1020)(void); -extern short D_801A1064; -extern short D_801A1066; -extern short D_801A1068; -extern s16 D_801A1270; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A0FDC = D_801A0FDC + 1; - if (D_801A0FDC >= 0x19) { - if (D_801A1020 != 0) { - (*D_801A1020)(); - } else { - D_80114F30 = D_80114F30 + D_801A1064; - D_80114F34 = D_80114F34 + D_801A1066; - D_80114F38 = D_80114F38 + D_801A1068; - D_80114F24 = D_80114F24 + D_801A1064; - D_80114F28 = D_80114F28 + D_801A1066; - D_80114F2C = D_80114F2C + D_801A1068; - func_8012A4BC(); - } - D_801A1270 = 0; - } -} - - - -extern void (*D_80186394[])(void); - -void func_8017BE60(void *a0) { - D_80186394[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017BEBC); - - -extern void (*D_801863F0[])(void); - -void func_8017CD9C(void *a0) { - D_801863F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801863F8[])(void); - -void func_8017CE40(void *a0) { - D_801863F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017CE98); - -extern void func_800D1EBC(void); - void func_8017CF20(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017CF40); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017CF68); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D014); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D03C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D098); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D214); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D2AC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D3C0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D434); - -void func_8017D484(void) { -} - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D48C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D4E8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D60C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D668); - -extern s32 func_80171990(u8 *a0); -extern s32 D_80126B58; - -void func_8017D78C(void) { - ((void (*)(void *))func_80171990)(&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D7B4); - - -extern void (*D_801864DC[])(void); - -void func_8017D8C4(void *a0) { - D_801864DC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017DAB8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017DC50); - - -extern void (*D_80186524[])(void); - -void func_8017DE68(void *a0) { - D_80186524[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017DEA4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017DEC4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017DF68); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E230); - - -extern void (*D_8018653C[])(void); - -void func_8017E318(void *a0) { - D_8018653C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E354); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E464); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E6A4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E840); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017E850); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EAB0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EAE4); - - -extern void (*D_8018654C[])(void); - -void func_8017EB7C(void *a0) { - D_8018654C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EBB8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EEAC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EF50); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017EFE4); - - -extern void (*D_801865A4[])(void); - -void func_8017F0A8(void *a0) { - D_801865A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F0E4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F17C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F20C); - - -extern void (*D_80186614[])(void); - -void func_8017F24C(void *a0) { - D_80186614[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F288); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F438); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F554); - -extern s32 func_8012AD50(void *a0); - void func_8017F63C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F65C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F6A4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F724); - -extern s32 func_8012AD50(void *a0); - void func_8017F80C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F82C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F874); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F8F4); - -extern s32 func_8012AD50(void *a0); - void func_8017F9DC(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017F9FC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FA44); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FAC4); - -extern s32 func_8012AD50(void *a0); - void func_8017FBAC(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FBCC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FC14); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FC94); - -extern s32 func_8012AD50(void *a0); - void func_8017FD7C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FD9C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FDE4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FE64); - -extern s32 func_8012AD50(void *a0); - void func_8017FF10(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FF30); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8017FF80); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018000C); - - -extern s32 func_8012AD50(void *a0); - void func_801800B8(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801800D8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018012C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180164); - -extern s32 func_8012AD50(void *a0); - void func_80180210(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180230); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801802EC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801803B8); - -extern s32 func_8012AD50(void *a0); - void func_80180464(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180484); - -extern s32 func_80182334(void); - extern void func_8012C098(void); - void func_801804D8(s32 param_1) { - if (func_80182334() == 0) { - ((void (*)(s32))func_8012C098)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180510); - -extern s32 func_8012AD50(void *a0); - void func_801805BC(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801805DC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180698); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180764); - -extern s32 func_8012AD50(void *a0); - void func_80180810(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180830); - -extern s32 func_80182334(void); - extern void func_8012C098(void); - void func_80180884(s32 param_1) { - if (func_80182334() == 0) { - ((void (*)(s32))func_8012C098)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801808BC); - - -extern s32 func_8012AD50(void *a0); - void func_80180968(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180988); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801809DC); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180A14); - -extern s32 func_8012AD50(void *a0); - void func_80180AC0(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180AE0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180B34); - - -extern void (*D_801866B8[])(void); - -void func_80180B6C(void *a0) { - D_801866B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80180BA8(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - *(s16 *)((s32)a0 + 0xFE) = 0; - *(s16 *)((s32)a0 + 0x100) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180BD0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180CDC); - -extern s32 func_8012AD50(void *a0); - void func_80180D88(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180DA8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180E30); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180E84); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80180F84); - -extern s32 func_8012AD50(void *a0); - void func_80181030(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181050); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801810D8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018112C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018122C); - -extern s32 func_8012AD50(void *a0); - void func_801812D8(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801812F8); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181380); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801813D4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801814D4); - -extern s32 func_8012AD50(void *a0); - void func_80181580(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801815A0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181628); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018167C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018177C); - -extern s32 func_8012AD50(void *a0); - void func_80181828(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181848); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801818D4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181928); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801819D8); - -extern s32 func_8012AD50(void *a0); - void func_80181A84(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181AA4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181B30); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181B84); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181C38); - - -extern s32 func_8012AD50(void *a0); - void func_80181CE4(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181D04); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181D4C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181DBC); - -extern s32 func_8012AD50(void *a0); - void func_80181E68(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181E88); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181ED0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80181F40); - -extern s32 func_8012AD50(void *a0); - void func_80181FEC(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018200C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182054); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801820C0); - -extern s32 func_8012AD50(void *a0); - void func_8018216C(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018218C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801821D4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182240); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018227C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182334); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801823B8); - -extern s32 D_801151D4; - s32 func_80182478(void) { - return *(u16 *)(D_801151D4 + 0x38); - } - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182490); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182560); - -void func_8018264C(void) { -} - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182654); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182694); - - -extern void (*D_80186838[])(void); - -void func_80182758(void *a0) { - D_80186838[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_80182794); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_801828E0); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_801734BC", func_8018292C); - -extern s32 func_80182960(void); - -s32 func_80182960(void) { - return 0x43; -} - diff --git a/src/ov_SC05_008/ov_SC05_008_jr_80178D40.c b/src/ov_SC05_008/ov_SC05_008_jr_80178D40.c new file mode 100644 index 000000000..a6fcc48e8 --- /dev/null +++ b/src/ov_SC05_008/ov_SC05_008_jr_80178D40.c @@ -0,0 +1,4756 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185B9C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A0348; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185B90[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185BD4[]; +extern unsigned short D_80185BDC[]; +extern unsigned short D_80185BE4[]; +extern unsigned char D_801A0350[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A0348; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185BEC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0484; +extern M2C_UNK D_801A0488; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0410; +extern void (*D_80185C1C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A048C[]; +extern u8 D_801A0494[]; +extern u8 D_801A0444[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80185C24[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185C40[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185C48[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185CB0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80185C54; +extern u8 D_80185C60; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185CE4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185CEC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185D40[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185D74[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185D64[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185D90; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185E08[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80185E10[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185E18[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80185E20[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185E28[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185E30[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185E3C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185E48[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185E54[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185E64[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185E74[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185E7C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185E84[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185E8C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185E94[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185E9C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185EA4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185EAC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185EB4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185EBC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185EC4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185ECC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185ED4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185EDC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185EE4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185EEC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185EF4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185EFC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185F04[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185F0C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185F14[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185F1C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185F24[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185F68[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185F2C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185F98[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185FD4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018602C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018603C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80186044[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801861AC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801861B8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019FA54; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A1270; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A0BC8; +extern short D_801A12E8; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A12E8) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A12E8)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A0BC8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A12E8) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A1240 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A1240 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A12E8) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A12E8) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A1024[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A0BCC; + extern s32 D_801A0FE0; + extern s16 D_801A0FE4; + extern s16 D_801A0FE8; + extern s16 D_801A0FEC; + extern s16 D_801A0FF0; + extern s32 D_801A0FF8; + extern s32 D_801A0FFC; + extern s32 D_801A100C; + extern s16 D_801A1010; + extern s16 D_801A1014; + extern s32 D_801A1018; + extern s32 D_801A1020; + extern s32 D_801A1024[10]; + extern s32 D_801A1188; + extern s16 D_801A1240; + extern s32 D_801A126C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A1240; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A0FE0); + D_801A0FE0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A0FEC, D_801A0FF0 ? 0x48 : 0x40); + (*(s16*)&D_801A12E8) = 2; + break; + case 0: + func_80179B28(D_801A0FE0); + D_801A0FE0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A0FE4, D_801A0FE8 ? 0x48 : 0x40); + (*(s16*)&D_801A12E8) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A1188 != 0) { + func_80179B28(D_801A0FE0); + D_801A0FE0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A0FE4, D_801A0FE8 ? 0x48 : 0x40); + (*(s16*)&D_801A12E8) = 1; + } else { + (*(s16*)&D_801A12E8) = 3; + } + break; + case 0x32: + func_80179B28(D_801A0FE0); + D_801A0FE0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A0FE4, + D_801A0FE8 ? 0x48 : 0x40); + (*(s16*)&D_801A12E8) = 1; + break; + case 2: + func_80179B28(D_801A0FE0); + if (D_801A0FF8 != 0) { + D_801A0BC8 = D_801A0FF8; + D_801A0FF8 = 0; + (*(s16*)&D_801A12E8) = 3; + return; + } + (*(s16*)&D_801A12E8) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A12E8) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A12E8) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A12E8) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A12E8) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A12E8) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x1B: + D_801A1018 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A12E8) = 4; + D_801A0BCC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A12E8) = 5; + D_801A100C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A100C = (s32)func_8017A3B0; + (*(s16*)&D_801A12E8) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x24: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A12E8) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A12E8) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A12E8) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A12E8) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A12E8) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A12E8) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A12E8) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A12E8) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A12E8) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A0FFC); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A0FFC); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A0FFC); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A0FFC); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x4E: + D_801A1020 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x2B: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A12E8) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A126C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x34: + (*(s16*)&D_801A12E8) = 3; + D_801A0BC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A0FF8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A12E8) = 3; + D_801A0BC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A12E8) = 3; + D_801A0BC8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A0BC8 = *(s32 *)(D_801A0BC8 + 4); + return; + case 0x37: + (*(s16*)&D_801A12E8) = 3; + D_801A0FE4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A0FE8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A12E8) = 3; + D_801A0FEC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A0FF0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A12E8) = 3; + D_801A0FE4 = w1; + D_801A0FE8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A12E8) = 3; + D_801A0FEC = w2; + D_801A0FF0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x43: + D_801A100C = (s32)func_8017A3D8; + D_801A1014 = 0; + (*(s16*)&D_801A12E8) = 5; + D_801A1010 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A12E8) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A12E8) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A1024; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A12E8) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A1024; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A12E8) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A1024[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A12E8) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A1024; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A12E8) = 3; + break; + default: + break; + } +Lend: + D_801A0BC8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A0FF4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A0FF4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A0FF4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A0FF4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A101C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A101C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A0FD8; + +s32 func_8017A3B0(void) { + switch (D_801A0FD8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A1014; +extern short D_801A1010; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A1014) { + case 0: + func_800D0CA0(1); + D_801A1014 = D_801A1014 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A1010; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A1014 = D_801A1014 + 1; + if (D_801A1014 < 0x1E) { + return 0; + } + D_801A1014 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A1054; + extern s16 D_801A1056; + extern s16 D_801A1058; + extern s16 D_801A104C; + extern s16 D_801A104E; + extern s16 D_801A1050; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1054, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1056, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1058, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A104C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A104E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1050, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A0FDC; +extern u16 D_801A105C; +extern u16 D_801A105E; +extern u16 D_801A1060; +extern s16 D_801A1270; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A1270 = 0; + D_801A0FDC = 0; + D_801A105C = D_80126B5E; + D_801A105E = D_80126B62; + D_801A1060 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801862F4[]; + extern s16 D_801A1054; + extern s16 D_801A104C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801862F4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801862F4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1054; + s16 *p78C = &D_801A104C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A1270 = 1; + D_801A0FDC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A0FFC; + extern SV4_8017B368 D_801A1004; + extern s16 D_801A1054; + extern s16 D_801A104C; + extern u16 D_801862F4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A0FFC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A1004; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801862F4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801862F4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A1054) = loc0; + (*(SV4_8017B368 *)&D_801A104C) = loc1; + D_801A1270 = 1; + D_801A0FDC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801862F4[]; + extern s16 D_801A1054; + extern s16 D_801A1056; + extern s16 D_801A1058; + extern s16 D_801A104C; + extern s16 D_801A104E; + extern s16 D_801A1050; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801862F4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801862F4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1054; + s16 *p78C = &D_801A104C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A1056; + v798 = D_801A1058; + v78C = *p78C; + v78E = D_801A104E; + v790 = D_801A1050; + __asm__ __volatile__(""); + D_801A1270 = 1; + D_801A0FDC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A0FDC; +extern s16 D_801A1054; +extern s16 D_801A1056; +extern s16 D_801A1058; +extern s16 D_801A104C; +extern s16 D_801A104E; +extern s16 D_801A1050; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A0FDC = 0; + D_801A1054 = (s16) D_80114F30; + D_801A1056 = (s16) D_80114F34; + D_801A1058 = (s16) D_80114F38; + D_801A104C = (s16) D_80114F24; + D_801A104E = (s16) D_80114F28; + D_801A1050 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A106C; +extern s16 D_801A106E; +extern s16 D_801A1070; +extern s16 D_801A1074; +extern s16 D_801A1076; +extern s16 D_801A1078; + +void func_8017B824(void) { + D_801A106C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A106E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A1070 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A1074 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A1076 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A1078 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A106C; +extern s16 D_801A106E; +extern s16 D_801A1070; +extern s16 D_801A1074; +extern s16 D_801A1076; +extern s16 D_801A1078; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A106C; + D_80114F34 = D_801A106E; + D_80114F38 = D_801A1070; + D_80114F24 = D_801A1074; + D_80114F28 = D_801A1076; + D_80114F2C = D_801A1078; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A1054), src[8..15] -> (*(S8_8017B8E8 *)&D_801A104C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A1054) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A104C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A105C; +extern u16 D_801A105E; +extern u16 D_801A1060; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A0FDC; +extern short D_801A1064; +extern short D_801A1066; +extern short D_801A1068; +extern s16 D_801A1054; +extern s16 D_801A1056; +extern s16 D_801A1058; +extern s16 D_801A104C; +extern s16 D_801A104E; +extern s16 D_801A1050; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A105C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A105E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1060); + (*(s16 *)&D_801A1064) = buf[0]; + (*(s16 *)&D_801A1066) = buf[1]; + (*(s16 *)&D_801A1068) = buf[2]; + D_801A1054 = D_80114F30 + buf[0]; + D_801A0FDC = 0; + D_801A1056 = D_80114F34 + buf[1]; + D_801A1058 = D_80114F38 + buf[2]; + D_801A104C = D_80114F24 + buf[0]; + D_801A104E = D_80114F28 + buf[1]; + D_801A1050 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A0FFC; +extern SV4 D_801A1004; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A1004) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A0FFC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A1004 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A1004)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A0FFC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A1004) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A1024[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A1024; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A0FDC; +extern s16 D_801A1270; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A0FDC = D_801A0FDC + 1; + if (D_801A0FDC >= 0x1F) { + D_801A1270 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A0FDC; +extern s16 D_801A1270; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A0FDC = D_801A0FDC + 1; + if (0x18 < D_801A0FDC) { + func_8012A4BC(); + D_801A1270 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A0FDC; +extern void (*D_801A1020)(void); +extern short D_801A1064; +extern short D_801A1066; +extern short D_801A1068; +extern s16 D_801A1270; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A0FDC = D_801A0FDC + 1; + if (D_801A0FDC >= 0x19) { + if (D_801A1020 != 0) { + (*D_801A1020)(); + } else { + D_80114F30 = D_80114F30 + D_801A1064; + D_80114F34 = D_80114F34 + D_801A1066; + D_80114F38 = D_80114F38 + D_801A1068; + D_80114F24 = D_80114F24 + D_801A1064; + D_80114F28 = D_80114F28 + D_801A1066; + D_80114F2C = D_80114F2C + D_801A1068; + func_8012A4BC(); + } + D_801A1270 = 0; + } +} + + + +extern void (*D_80186394[])(void); + +void func_8017BE60(void *a0) { + D_80186394[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017BEBC); + + +extern void (*D_801863F0[])(void); + +void func_8017CD9C(void *a0) { + D_801863F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801863F8[])(void); + +void func_8017CE40(void *a0) { + D_801863F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017CE98); + +extern void func_800D1EBC(void); + void func_8017CF20(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017CF40); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017CF68); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D014); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D03C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D098); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D214); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D2AC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D3C0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D434); + +void func_8017D484(void) { +} + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D48C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D4E8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D60C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D668); + +extern s32 func_80171990(u8 *a0); +extern s32 D_80126B58; + +void func_8017D78C(void) { + ((void (*)(void *))func_80171990)(&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D7B4); + + +extern void (*D_801864DC[])(void); + +void func_8017D8C4(void *a0) { + D_801864DC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017DAB8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017DC50); + + +extern void (*D_80186524[])(void); + +void func_8017DE68(void *a0) { + D_80186524[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017DEA4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017DEC4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017DF68); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E230); + + +extern void (*D_8018653C[])(void); + +void func_8017E318(void *a0) { + D_8018653C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E354); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E464); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E6A4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E840); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017E850); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EAB0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EAE4); + + +extern void (*D_8018654C[])(void); + +void func_8017EB7C(void *a0) { + D_8018654C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EBB8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EEAC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EF50); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017EFE4); + + +extern void (*D_801865A4[])(void); + +void func_8017F0A8(void *a0) { + D_801865A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F0E4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F17C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F20C); + + +extern void (*D_80186614[])(void); + +void func_8017F24C(void *a0) { + D_80186614[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F288); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F438); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F554); + +extern s32 func_8012AD50(void *a0); + void func_8017F63C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F65C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F6A4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F724); + +extern s32 func_8012AD50(void *a0); + void func_8017F80C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F82C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F874); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F8F4); + +extern s32 func_8012AD50(void *a0); + void func_8017F9DC(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017F9FC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FA44); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FAC4); + +extern s32 func_8012AD50(void *a0); + void func_8017FBAC(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FBCC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FC14); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FC94); + +extern s32 func_8012AD50(void *a0); + void func_8017FD7C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FD9C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FDE4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FE64); + +extern s32 func_8012AD50(void *a0); + void func_8017FF10(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FF30); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8017FF80); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018000C); + + +extern s32 func_8012AD50(void *a0); + void func_801800B8(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801800D8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018012C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180164); + +extern s32 func_8012AD50(void *a0); + void func_80180210(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180230); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801802EC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801803B8); + +extern s32 func_8012AD50(void *a0); + void func_80180464(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180484); + +extern s32 func_80182334(void); + extern void func_8012C098(void); + void func_801804D8(s32 param_1) { + if (func_80182334() == 0) { + ((void (*)(s32))func_8012C098)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180510); + +extern s32 func_8012AD50(void *a0); + void func_801805BC(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801805DC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180698); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180764); + +extern s32 func_8012AD50(void *a0); + void func_80180810(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180830); + +extern s32 func_80182334(void); + extern void func_8012C098(void); + void func_80180884(s32 param_1) { + if (func_80182334() == 0) { + ((void (*)(s32))func_8012C098)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801808BC); + + +extern s32 func_8012AD50(void *a0); + void func_80180968(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180988); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801809DC); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180A14); + +extern s32 func_8012AD50(void *a0); + void func_80180AC0(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180AE0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180B34); + + +extern void (*D_801866B8[])(void); + +void func_80180B6C(void *a0) { + D_801866B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80180BA8(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + *(s16 *)((s32)a0 + 0xFE) = 0; + *(s16 *)((s32)a0 + 0x100) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180BD0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180CDC); + +extern s32 func_8012AD50(void *a0); + void func_80180D88(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180DA8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180E30); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180E84); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80180F84); + +extern s32 func_8012AD50(void *a0); + void func_80181030(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181050); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801810D8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018112C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018122C); + +extern s32 func_8012AD50(void *a0); + void func_801812D8(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801812F8); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181380); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801813D4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801814D4); + +extern s32 func_8012AD50(void *a0); + void func_80181580(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801815A0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181628); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018167C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018177C); + +extern s32 func_8012AD50(void *a0); + void func_80181828(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181848); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801818D4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181928); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801819D8); + +extern s32 func_8012AD50(void *a0); + void func_80181A84(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181AA4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181B30); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181B84); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181C38); + + +extern s32 func_8012AD50(void *a0); + void func_80181CE4(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181D04); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181D4C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181DBC); + +extern s32 func_8012AD50(void *a0); + void func_80181E68(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181E88); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181ED0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80181F40); + +extern s32 func_8012AD50(void *a0); + void func_80181FEC(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018200C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182054); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801820C0); + +extern s32 func_8012AD50(void *a0); + void func_8018216C(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018218C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801821D4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182240); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018227C); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182334); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801823B8); + +extern s32 D_801151D4; + s32 func_80182478(void) { + return *(u16 *)(D_801151D4 + 0x38); + } + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182490); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182560); + +void func_8018264C(void) { +} + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182654); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182694); + + +extern void (*D_80186838[])(void); + +void func_80182758(void *a0) { + D_80186838[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_80182794); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_801828E0); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_80178D40", func_8018292C); + +extern s32 func_80182960(void); + +s32 func_80182960(void) { + return 0x43; +} + + diff --git a/src/ov_SC05_009/ov_SC05_009_jr_801734BC.c b/src/ov_SC05_009/ov_SC05_009_jr_801734BC.c index b52e90f74..0f71c34ed 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_801734BC.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_801734BC.c @@ -3084,982 +3084,3 @@ void func_80178D18(void) { D_80196C44 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_80196A04; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_80196A04 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_80196A04; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_80196A04 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80196A2C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80196A2C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801969E8; - -s32 func_8017A3B0(void) { - switch (D_801969E8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_80196A24; -extern short D_80196A20; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_80196A24) { - case 0: - func_800D0CA0(1); - D_80196A24 = D_80196A24 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80196A20; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_80196A24 = D_80196A24 + 1; - if (D_80196A24 < 0x1E) { - return 0; - } - D_80196A24 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80196A64; - extern s16 D_80196A66; - extern s16 D_80196A68; - extern s16 D_80196A5C; - extern s16 D_80196A5E; - extern s16 D_80196A60; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80196A64, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80196A66, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80196A68, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80196A5C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80196A5E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80196A60, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801969EC; -extern u16 D_80196A6C; -extern u16 D_80196A6E; -extern u16 D_80196A70; -extern s16 D_80196BD0; - -void func_8017B1D8(void) { - func_8012A418(); - D_80196BD0 = 0; - D_801969EC = 0; - D_80196A6C = D_80126B5E; - D_80196A6E = D_80126B62; - D_80196A70 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182404[]; - extern s16 D_80196A64; - extern s16 D_80196A5C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80196A64; - s16 *p78C = &D_80196A5C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80196BD0 = 1; - D_801969EC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80196A0C; - extern SV4_8017B368 D_80196A14; - extern s16 D_80196A64; - extern s16 D_80196A5C; - extern u16 D_80182404; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80196A0C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_80196A14; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182404)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182404)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80196A64) = loc0; - (*(SV4_8017B368 *)&D_80196A5C) = loc1; - D_80196BD0 = 1; - D_801969EC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182404[]; - extern s16 D_80196A64; - extern s16 D_80196A66; - extern s16 D_80196A68; - extern s16 D_80196A5C; - extern s16 D_80196A5E; - extern s16 D_80196A60; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80196A64; - s16 *p78C = &D_80196A5C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80196A66; - v798 = D_80196A68; - v78C = *p78C; - v78E = D_80196A5E; - v790 = D_80196A60; - __asm__ __volatile__(""); - D_80196BD0 = 1; - D_801969EC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801969EC; -extern s16 D_80196A64; -extern s16 D_80196A66; -extern s16 D_80196A68; -extern s16 D_80196A5C; -extern s16 D_80196A5E; -extern s16 D_80196A60; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801969EC = 0; - D_80196A64 = (s16) D_80114F30; - D_80196A66 = (s16) D_80114F34; - D_80196A68 = (s16) D_80114F38; - D_80196A5C = (s16) D_80114F24; - D_80196A5E = (s16) D_80114F28; - D_80196A60 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_80196A7C; -extern s16 D_80196A7E; -extern s16 D_80196A80; -extern s16 D_80196A84; -extern s16 D_80196A86; -extern s16 D_80196A88; - -void func_8017B824(void) { - D_80196A7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_80196A7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80196A80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80196A84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80196A86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80196A88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_80196A7C; -extern s16 D_80196A7E; -extern s16 D_80196A80; -extern s16 D_80196A84; -extern s16 D_80196A86; -extern s16 D_80196A88; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_80196A7C; - D_80114F34 = D_80196A7E; - D_80114F38 = D_80196A80; - D_80114F24 = D_80196A84; - D_80114F28 = D_80196A86; - D_80114F2C = D_80196A88; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80196A64), src[8..15] -> (*(S8_8017B8E8 *)&D_80196A5C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80196A64) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_80196A5C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_80196A6C; -extern u16 D_80196A6E; -extern u16 D_80196A70; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801969EC; -extern short D_80196A74; -extern short D_80196A76; -extern short D_80196A78; -extern s16 D_80196A64; -extern s16 D_80196A66; -extern s16 D_80196A68; -extern s16 D_80196A5C; -extern s16 D_80196A5E; -extern s16 D_80196A60; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80196A6C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80196A6E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80196A70); - (*(s16 *)&D_80196A74) = buf[0]; - (*(s16 *)&D_80196A76) = buf[1]; - (*(s16 *)&D_80196A78) = buf[2]; - D_80196A64 = D_80114F30 + buf[0]; - D_801969EC = 0; - D_80196A66 = D_80114F34 + buf[1]; - D_80196A68 = D_80114F38 + buf[2]; - D_80196A5C = D_80114F24 + buf[0]; - D_80196A5E = D_80114F28 + buf[1]; - D_80196A60 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80196A0C; -extern SV4 D_80196A14; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80196A14) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80196A0C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_80196A14 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80196A14)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80196A0C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_80196A14) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80196A34[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80196A34; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801969EC; -extern s16 D_80196BD0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801969EC = D_801969EC + 1; - if (D_801969EC >= 0x1F) { - D_80196BD0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801969EC; -extern s16 D_80196BD0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801969EC = D_801969EC + 1; - if (0x18 < D_801969EC) { - func_8012A4BC(); - D_80196BD0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801969EC; -extern void (*D_80196A30)(void); -extern short D_80196A74; -extern short D_80196A76; -extern short D_80196A78; -extern s16 D_80196BD0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801969EC = D_801969EC + 1; - if (D_801969EC >= 0x19) { - if (D_80196A30 != 0) { - (*D_80196A30)(); - } else { - D_80114F30 = D_80114F30 + D_80196A74; - D_80114F34 = D_80114F34 + D_80196A76; - D_80114F38 = D_80114F38 + D_80196A78; - D_80114F24 = D_80114F24 + D_80196A74; - D_80114F28 = D_80114F28 + D_80196A76; - D_80114F2C = D_80114F2C + D_80196A78; - func_8012A4BC(); - } - D_80196BD0 = 0; - } -} - - - -extern void (*D_801824A4[])(void); - -void func_8017BE60(void *a0) { - D_801824A4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CDBC); - - -extern void (*D_80182524[])(void); - -void func_8017CDE4(void *a0) { - D_80182524[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CE20); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE64(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018252C[])(void); - -void func_8017CE88(void *a0) { - D_8018252C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CEC4); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF04(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CF80); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CFA0); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017CFC8); - -extern s32 D_80196A90; - void func_8017CFF0(s32 arg0) { - D_80196A90 = arg0; - } - - -extern s32 D_80196A90; - s32 func_8017D000(void) { - return D_80196A90; - } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D010); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D148); - - -extern void (*D_80182544[])(void); - -void func_8017D1D4(void *a0) { - D_80182544[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D210); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D2B0); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D2F8); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D340); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D4D8); - - -extern void (*D_80182580[])(void); - -void func_8017D670(void *a0) { - D_80182580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D6AC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D840); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D888); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D8D4); - -void func_8017D90C(void) { -} - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D914); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D950); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017D9F0); - - -extern void (*D_801825DC[])(void); - -void func_8017DAB8(void *a0) { - D_801825DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DAF4); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DCB0); - -extern s32 func_8017DD20(void); - -s32 func_8017DD20(void) { - return 0x6A; -} - - -extern void func_80174684(void *); - extern s32 func_8017DD50; - void func_8017DD28(void) { - func_80174684(&func_8017DD50); - } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DD50); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DD8C); - -void func_8017DDE0(void) { -} - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DDE8); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DE40); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DEB0); - -void func_8017DF2C(void) { -} - -extern void func_80171A1C(u8 *a0); -extern s32 D_80126B58; - -void func_8017DF34(void) { - ((void (*)(void *))func_80171A1C)(&D_80126B58); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017DF5C); - - -extern void (*D_80193894[])(void); - -void func_8017E0B8(void *a0) { - D_80193894[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E0F4); - -extern void (*D_8019389C[])(void); - -void func_8017E280(void *a0) { - D_8019389C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E2BC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E3AC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E4A4); - - -extern void (*D_801939C4[])(void); - -void func_8017E55C(void *a0) { - D_801939C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E598); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E670); - -void func_8017E698(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80193974; - void func_8017E6A0(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80193974); - } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E6CC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E70C); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E7CC); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E838); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E848); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E858); - -extern void func_800296F8(void); - s32 func_8017E870(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E894); - -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_801734BC", func_8017E9E8); - diff --git a/src/ov_SC05_009/ov_SC05_009_jr_80178D40.c b/src/ov_SC05_009/ov_SC05_009_jr_80178D40.c new file mode 100644 index 000000000..a7bde3c31 --- /dev/null +++ b/src/ov_SC05_009/ov_SC05_009_jr_80178D40.c @@ -0,0 +1,4428 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181CAC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80195D58; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181CA0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181CE4[]; +extern unsigned short D_80181CEC[]; +extern unsigned short D_80181CF4[]; +extern unsigned char D_80195D60[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80195D58; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181CFC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80195E94; +extern M2C_UNK D_80195E98; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80195E20; +extern void (*D_80181D2C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80195E9C[]; +extern u8 D_80195EA4[]; +extern u8 D_80195E54[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181D34[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181D50[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181D58[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181DC0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181D64; +extern u8 D_80181D70; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181DF4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181DFC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181E50[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181E84[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181E74[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181EA0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181F18[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181F20[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181F28[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181F30[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181F38[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181F40[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181F4C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181F58[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181F64[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181F74[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181F84[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181F8C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181F94[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181F9C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181FA4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181FAC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181FB4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181FBC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181FC4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181FCC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181FD4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181FDC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181FE4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181FEC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181FF4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181FFC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80182004[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018200C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80182014[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018201C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80182024[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018202C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80182034[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182078[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018203C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801820A8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801820E4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018213C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018214C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182154[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801822BC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801822C8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80195468; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80196BD0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801965D8; +extern short D_80196C44; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_80196C44) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_80196C44)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801965D8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_80196C44) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80196BA0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80196BA0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_80196C44) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_80196C44) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80196A34[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801965DC; + extern s32 D_801969F0; + extern s16 D_801969F4; + extern s16 D_801969F8; + extern s16 D_801969FC; + extern s16 D_80196A00; + extern s32 D_80196A08; + extern s32 D_80196A0C; + extern s32 D_80196A1C; + extern s16 D_80196A20; + extern s16 D_80196A24; + extern s32 D_80196A28; + extern s32 D_80196A30; + extern s32 D_80196A34[10]; + extern s32 D_80196AE8; + extern s16 D_80196BA0; + extern s32 D_80196BCC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80196BA0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801969F0); + D_801969F0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801969FC, D_80196A00 ? 0x48 : 0x40); + (*(s16*)&D_80196C44) = 2; + break; + case 0: + func_80179B28(D_801969F0); + D_801969F0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801969F4, D_801969F8 ? 0x48 : 0x40); + (*(s16*)&D_80196C44) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_80196AE8 != 0) { + func_80179B28(D_801969F0); + D_801969F0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801969F4, D_801969F8 ? 0x48 : 0x40); + (*(s16*)&D_80196C44) = 1; + } else { + (*(s16*)&D_80196C44) = 3; + } + break; + case 0x32: + func_80179B28(D_801969F0); + D_801969F0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801969F4, + D_801969F8 ? 0x48 : 0x40); + (*(s16*)&D_80196C44) = 1; + break; + case 2: + func_80179B28(D_801969F0); + if (D_80196A08 != 0) { + D_801965D8 = D_80196A08; + D_80196A08 = 0; + (*(s16*)&D_80196C44) = 3; + return; + } + (*(s16*)&D_80196C44) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_80196C44) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_80196C44) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80196C44) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_80196C44) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80196C44) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_80196C44) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80196C44) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80196C44) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_80196C44) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_80196C44) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_80196C44) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x1B: + D_80196A28 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_80196C44) = 4; + D_801965DC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_80196C44) = 5; + D_80196A1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80196A1C = (s32)func_8017A3B0; + (*(s16*)&D_80196C44) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x24: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80196C44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80196C44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_80196C44) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196C44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196C44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196C44) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80196C44) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80196C44) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_80196C44) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80196A0C); + (*(s16*)&D_80196C44) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80196A0C); + (*(s16*)&D_80196C44) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80196A0C); + (*(s16*)&D_80196C44) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80196A0C); + (*(s16*)&D_80196C44) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + break; + case 0x4E: + D_80196A30 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x2B: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_80196C44) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80196BCC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_80196C44) = 3; + break; + case 0x34: + (*(s16*)&D_80196C44) = 3; + D_801965D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80196A08 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_80196C44) = 3; + D_801965D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_80196C44) = 3; + D_801965D8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801965D8 = *(s32 *)(D_801965D8 + 4); + return; + case 0x37: + (*(s16*)&D_80196C44) = 3; + D_801969F4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801969F8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_80196C44) = 3; + D_801969FC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80196A00 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_80196C44) = 3; + D_801969F4 = w1; + D_801969F8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_80196C44) = 3; + D_801969FC = w2; + D_80196A00 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + case 0x43: + D_80196A1C = (s32)func_8017A3D8; + D_80196A24 = 0; + (*(s16*)&D_80196C44) = 5; + D_80196A20 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196C44) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196C44) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196C44) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80196A34; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_80196C44) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80196A34; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_80196C44) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80196A34[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_80196C44) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80196A34; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_80196C44) = 3; + break; + default: + break; + } +Lend: + D_801965D8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_80196A04; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_80196A04 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_80196A04; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_80196A04 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80196A2C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80196A2C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801969E8; + +s32 func_8017A3B0(void) { + switch (D_801969E8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_80196A24; +extern short D_80196A20; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_80196A24) { + case 0: + func_800D0CA0(1); + D_80196A24 = D_80196A24 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80196A20; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_80196A24 = D_80196A24 + 1; + if (D_80196A24 < 0x1E) { + return 0; + } + D_80196A24 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80196A64; + extern s16 D_80196A66; + extern s16 D_80196A68; + extern s16 D_80196A5C; + extern s16 D_80196A5E; + extern s16 D_80196A60; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80196A64, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80196A66, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80196A68, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_80196A5C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_80196A5E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80196A60, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801969EC; +extern u16 D_80196A6C; +extern u16 D_80196A6E; +extern u16 D_80196A70; +extern s16 D_80196BD0; + +void func_8017B1D8(void) { + func_8012A418(); + D_80196BD0 = 0; + D_801969EC = 0; + D_80196A6C = D_80126B5E; + D_80196A6E = D_80126B62; + D_80196A70 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182404[]; + extern s16 D_80196A64; + extern s16 D_80196A5C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80196A64; + s16 *p78C = &D_80196A5C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80196BD0 = 1; + D_801969EC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80196A0C; + extern SV4_8017B368 D_80196A14; + extern s16 D_80196A64; + extern s16 D_80196A5C; + extern u16 D_80182404; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80196A0C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_80196A14; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182404)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182404)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80196A64) = loc0; + (*(SV4_8017B368 *)&D_80196A5C) = loc1; + D_80196BD0 = 1; + D_801969EC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182404[]; + extern s16 D_80196A64; + extern s16 D_80196A66; + extern s16 D_80196A68; + extern s16 D_80196A5C; + extern s16 D_80196A5E; + extern s16 D_80196A60; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182404[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182404[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80196A64; + s16 *p78C = &D_80196A5C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80196A66; + v798 = D_80196A68; + v78C = *p78C; + v78E = D_80196A5E; + v790 = D_80196A60; + __asm__ __volatile__(""); + D_80196BD0 = 1; + D_801969EC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801969EC; +extern s16 D_80196A64; +extern s16 D_80196A66; +extern s16 D_80196A68; +extern s16 D_80196A5C; +extern s16 D_80196A5E; +extern s16 D_80196A60; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801969EC = 0; + D_80196A64 = (s16) D_80114F30; + D_80196A66 = (s16) D_80114F34; + D_80196A68 = (s16) D_80114F38; + D_80196A5C = (s16) D_80114F24; + D_80196A5E = (s16) D_80114F28; + D_80196A60 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_80196A7C; +extern s16 D_80196A7E; +extern s16 D_80196A80; +extern s16 D_80196A84; +extern s16 D_80196A86; +extern s16 D_80196A88; + +void func_8017B824(void) { + D_80196A7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_80196A7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80196A80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80196A84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80196A86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80196A88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_80196A7C; +extern s16 D_80196A7E; +extern s16 D_80196A80; +extern s16 D_80196A84; +extern s16 D_80196A86; +extern s16 D_80196A88; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_80196A7C; + D_80114F34 = D_80196A7E; + D_80114F38 = D_80196A80; + D_80114F24 = D_80196A84; + D_80114F28 = D_80196A86; + D_80114F2C = D_80196A88; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80196A64), src[8..15] -> (*(S8_8017B8E8 *)&D_80196A5C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80196A64) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_80196A5C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80196A6C; +extern u16 D_80196A6E; +extern u16 D_80196A70; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801969EC; +extern short D_80196A74; +extern short D_80196A76; +extern short D_80196A78; +extern s16 D_80196A64; +extern s16 D_80196A66; +extern s16 D_80196A68; +extern s16 D_80196A5C; +extern s16 D_80196A5E; +extern s16 D_80196A60; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_80196A6C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_80196A6E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80196A70); + (*(s16 *)&D_80196A74) = buf[0]; + (*(s16 *)&D_80196A76) = buf[1]; + (*(s16 *)&D_80196A78) = buf[2]; + D_80196A64 = D_80114F30 + buf[0]; + D_801969EC = 0; + D_80196A66 = D_80114F34 + buf[1]; + D_80196A68 = D_80114F38 + buf[2]; + D_80196A5C = D_80114F24 + buf[0]; + D_80196A5E = D_80114F28 + buf[1]; + D_80196A60 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80196A0C; +extern SV4 D_80196A14; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_80196A14) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80196A0C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_80196A14 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_80196A14)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80196A0C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_80196A14) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80196A34[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80196A34; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801969EC; +extern s16 D_80196BD0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801969EC = D_801969EC + 1; + if (D_801969EC >= 0x1F) { + D_80196BD0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801969EC; +extern s16 D_80196BD0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801969EC = D_801969EC + 1; + if (0x18 < D_801969EC) { + func_8012A4BC(); + D_80196BD0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801969EC; +extern void (*D_80196A30)(void); +extern short D_80196A74; +extern short D_80196A76; +extern short D_80196A78; +extern s16 D_80196BD0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801969EC = D_801969EC + 1; + if (D_801969EC >= 0x19) { + if (D_80196A30 != 0) { + (*D_80196A30)(); + } else { + D_80114F30 = D_80114F30 + D_80196A74; + D_80114F34 = D_80114F34 + D_80196A76; + D_80114F38 = D_80114F38 + D_80196A78; + D_80114F24 = D_80114F24 + D_80196A74; + D_80114F28 = D_80114F28 + D_80196A76; + D_80114F2C = D_80114F2C + D_80196A78; + func_8012A4BC(); + } + D_80196BD0 = 0; + } +} + + + +extern void (*D_801824A4[])(void); + +void func_8017BE60(void *a0) { + D_801824A4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CDBC); + + +extern void (*D_80182524[])(void); + +void func_8017CDE4(void *a0) { + D_80182524[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CE20); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE64(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018252C[])(void); + +void func_8017CE88(void *a0) { + D_8018252C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CEC4); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF04(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CF80); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CFA0); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017CFC8); + +extern s32 D_80196A90; + void func_8017CFF0(s32 arg0) { + D_80196A90 = arg0; + } + + +extern s32 D_80196A90; + s32 func_8017D000(void) { + return D_80196A90; + } + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D010); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D148); + + +extern void (*D_80182544[])(void); + +void func_8017D1D4(void *a0) { + D_80182544[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D210); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D2B0); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D2F8); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D340); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D4D8); + + +extern void (*D_80182580[])(void); + +void func_8017D670(void *a0) { + D_80182580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D6AC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D840); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D888); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D8D4); + +void func_8017D90C(void) { +} + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D914); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D950); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017D9F0); + + +extern void (*D_801825DC[])(void); + +void func_8017DAB8(void *a0) { + D_801825DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DAF4); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DCB0); + +extern s32 func_8017DD20(void); + +s32 func_8017DD20(void) { + return 0x6A; +} + + +extern void func_80174684(void *); + extern s32 func_8017DD50; + void func_8017DD28(void) { + func_80174684(&func_8017DD50); + } + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DD50); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DD8C); + +void func_8017DDE0(void) { +} + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DDE8); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DE40); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DEB0); + +void func_8017DF2C(void) { +} + +extern void func_80171A1C(u8 *a0); +extern s32 D_80126B58; + +void func_8017DF34(void) { + ((void (*)(void *))func_80171A1C)(&D_80126B58); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017DF5C); + + +extern void (*D_80193894[])(void); + +void func_8017E0B8(void *a0) { + D_80193894[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E0F4); + +extern void (*D_8019389C[])(void); + +void func_8017E280(void *a0) { + D_8019389C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E2BC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E3AC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E4A4); + + +extern void (*D_801939C4[])(void); + +void func_8017E55C(void *a0) { + D_801939C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E598); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E670); + +void func_8017E698(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80193974; + void func_8017E6A0(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80193974); + } + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E6CC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E70C); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E7CC); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E838); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E848); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E858); + +extern void func_800296F8(void); + s32 func_8017E870(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E894); + +INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_80178D40", func_8017E9E8); + + diff --git a/src/ov_SC05_010/ov_SC05_010_jr_801734BC.c b/src/ov_SC05_010/ov_SC05_010_jr_801734BC.c index a044ec112..335b537d8 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_801734BC.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_801734BC.c @@ -3084,1417 +3084,3 @@ void func_80178D18(void) { D_801C802C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C6E54; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801C6E54 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801C6E54; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801C6E54 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801C6E7C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801C6E7C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801C6E38; - -s32 func_8017A3B0(void) { - switch (D_801C6E38) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801C6E74; -extern short D_801C6E70; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801C6E74) { - case 0: - func_800D0CA0(1); - D_801C6E74 = D_801C6E74 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801C6E70; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801C6E74 = D_801C6E74 + 1; - if (D_801C6E74 < 0x1E) { - return 0; - } - D_801C6E74 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801C6EB4; - extern s16 D_801C6EB6; - extern s16 D_801C6EB8; - extern s16 D_801C6EAC; - extern s16 D_801C6EAE; - extern s16 D_801C6EB0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C6EB4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C6EB6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C6EB8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C6EAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C6EAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C6EB0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801C6E3C; -extern u16 D_801C6EBC; -extern u16 D_801C6EBE; -extern u16 D_801C6EC0; -extern s16 D_801C7FB8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801C7FB8 = 0; - D_801C6E3C = 0; - D_801C6EBC = D_80126B5E; - D_801C6EBE = D_80126B62; - D_801C6EC0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018C2E0[]; - extern s16 D_801C6EB4; - extern s16 D_801C6EAC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C6EB4; - s16 *p78C = &D_801C6EAC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801C7FB8 = 1; - D_801C6E3C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801C6E5C; - extern SV4_8017B368 D_801C6E64; - extern s16 D_801C6EB4; - extern s16 D_801C6EAC; - extern u16 D_8018C2E0; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801C6E5C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801C6E64; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018C2E0)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018C2E0)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801C6EB4) = loc0; - (*(SV4_8017B368 *)&D_801C6EAC) = loc1; - D_801C7FB8 = 1; - D_801C6E3C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018C2E0[]; - extern s16 D_801C6EB4; - extern s16 D_801C6EB6; - extern s16 D_801C6EB8; - extern s16 D_801C6EAC; - extern s16 D_801C6EAE; - extern s16 D_801C6EB0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801C6EB4; - s16 *p78C = &D_801C6EAC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801C6EB6; - v798 = D_801C6EB8; - v78C = *p78C; - v78E = D_801C6EAE; - v790 = D_801C6EB0; - __asm__ __volatile__(""); - D_801C7FB8 = 1; - D_801C6E3C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C6E3C; -extern s16 D_801C6EB4; -extern s16 D_801C6EB6; -extern s16 D_801C6EB8; -extern s16 D_801C6EAC; -extern s16 D_801C6EAE; -extern s16 D_801C6EB0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801C6E3C = 0; - D_801C6EB4 = (s16) D_80114F30; - D_801C6EB6 = (s16) D_80114F34; - D_801C6EB8 = (s16) D_80114F38; - D_801C6EAC = (s16) D_80114F24; - D_801C6EAE = (s16) D_80114F28; - D_801C6EB0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801C6ECC; -extern s16 D_801C6ECE; -extern s16 D_801C6ED0; -extern s16 D_801C6ED4; -extern s16 D_801C6ED6; -extern s16 D_801C6ED8; - -void func_8017B824(void) { - D_801C6ECC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801C6ECE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801C6ED0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801C6ED4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801C6ED6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801C6ED8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801C6ECC; -extern s16 D_801C6ECE; -extern s16 D_801C6ED0; -extern s16 D_801C6ED4; -extern s16 D_801C6ED6; -extern s16 D_801C6ED8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801C6ECC; - D_80114F34 = D_801C6ECE; - D_80114F38 = D_801C6ED0; - D_80114F24 = D_801C6ED4; - D_80114F28 = D_801C6ED6; - D_80114F2C = D_801C6ED8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801C6EB4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C6EAC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801C6EB4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801C6EAC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801C6EBC; -extern u16 D_801C6EBE; -extern u16 D_801C6EC0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801C6E3C; -extern short D_801C6EC4; -extern short D_801C6EC6; -extern short D_801C6EC8; -extern s16 D_801C6EB4; -extern s16 D_801C6EB6; -extern s16 D_801C6EB8; -extern s16 D_801C6EAC; -extern s16 D_801C6EAE; -extern s16 D_801C6EB0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C6EBC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C6EBE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C6EC0); - (*(s16 *)&D_801C6EC4) = buf[0]; - (*(s16 *)&D_801C6EC6) = buf[1]; - (*(s16 *)&D_801C6EC8) = buf[2]; - D_801C6EB4 = D_80114F30 + buf[0]; - D_801C6E3C = 0; - D_801C6EB6 = D_80114F34 + buf[1]; - D_801C6EB8 = D_80114F38 + buf[2]; - D_801C6EAC = D_80114F24 + buf[0]; - D_801C6EAE = D_80114F28 + buf[1]; - D_801C6EB0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801C6E5C; -extern SV4 D_801C6E64; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C6E64) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801C6E5C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801C6E64 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C6E64)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801C6E5C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801C6E64) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801C6E84[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801C6E84; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801C6E3C; -extern s16 D_801C7FB8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801C6E3C = D_801C6E3C + 1; - if (D_801C6E3C >= 0x1F) { - D_801C7FB8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801C6E3C; -extern s16 D_801C7FB8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C6E3C = D_801C6E3C + 1; - if (0x18 < D_801C6E3C) { - func_8012A4BC(); - D_801C7FB8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801C6E3C; -extern void (*D_801C6E80)(void); -extern short D_801C6EC4; -extern short D_801C6EC6; -extern short D_801C6EC8; -extern s16 D_801C7FB8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801C6E3C = D_801C6E3C + 1; - if (D_801C6E3C >= 0x19) { - if (D_801C6E80 != 0) { - (*D_801C6E80)(); - } else { - D_80114F30 = D_80114F30 + D_801C6EC4; - D_80114F34 = D_80114F34 + D_801C6EC6; - D_80114F38 = D_80114F38 + D_801C6EC8; - D_80114F24 = D_80114F24 + D_801C6EC4; - D_80114F28 = D_80114F28 + D_801C6EC6; - D_80114F2C = D_80114F2C + D_801C6EC8; - func_8012A4BC(); - } - D_801C7FB8 = 0; - } -} - - - -extern void (*D_8018C380[])(void); - -void func_8017BE60(void *a0) { - D_8018C380[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017C068); - - -extern void (*D_8018C3E0[])(void); - -void func_8017C114(void *a0) { - D_8018C3E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017C8D0); - - -extern void (*D_8018C498[])(void); - -void func_8017D7B0(void *a0) { - D_8018C498[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D7EC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D82C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D8A8); - -void func_8017D908(void) { -} - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D910); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D938); - -extern s16 D_80126B0C; - s32 func_8017D954(void) { - return D_80126B0C; - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D964); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017D9C4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DA90); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DC5C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DCB8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DD14); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DD78); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DE28); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DEEC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017DFAC); - - -extern void (*D_8018C530[])(void); - -void func_8017DFF0(void *a0) { - D_8018C530[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E02C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E1D4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E368); - - -extern void (*D_80192258[])(void); - -void func_8017E620(void *a0) { - D_80192258[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E65C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E6A0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -extern void (*D_80192260[])(void); - -void func_8017E6C4(void *a0) { - D_80192260[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E700); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E740); - -extern s32 func_800167F0(s32 arg); -extern void func_800CFBCC(s32 arg); - -s32 func_8017E7BC(void) { - if ((func_800167F0(0x4) & 0xFFFF) == 0) { - return 0; - } else { - func_800CFBCC(0x5); - return 1; - } -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8019226C; - -void func_8017E7F4(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019226C, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E81C); - -extern s32 func_80147054(void *a0); - extern void func_80171928(void *a0); - void func_8017E844(s32 a0) { - ((void (*)(s32 *))func_80147054)((s32 *)a0); - ((s32 (*)(s32))func_80171928)(a0); - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E874); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017E910); - -extern void func_8012A100(s8 a0); - void func_8017E9B4(void) { - ((s32 (*)(s32))func_8012A100)(0); - } - - - -extern void (*D_8019227C[])(void); - -void func_8017E9D4(void *a0) { - D_8019227C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EAB0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EAE4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EC7C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017ECE4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EDEC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EE68); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017EFC8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017F15C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017F5B8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017F9B4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017FAF4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017FDE0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8017FFA8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180108); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180214); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180450); - - -extern void (*D_80192568[])(void); - -void func_801805D0(void *a0) { - D_80192568[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018060C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801806A0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180854); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180AA0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180B44); - - -extern void (*D_801927B8[])(void); - -void func_80180DEC(void *a0) { - D_801927B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180E28); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80180F84); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801813F4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801814AC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80181670); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80181B4C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80181CDC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801828E0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801829F0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80182AC0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80182BD0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80182CA0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80182E78); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80182FD4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80183098); - - -extern void (*D_80192B68[])(void); - -void func_80183238(void *a0) { - D_80192B68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80183274); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018340C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018388C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80183C84); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80183D5C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184084); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184100); - - -extern void (*D_80192DE0[])(void); - -void func_801841A8(void *a0) { - D_80192DE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801841E4); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80184214(void *a0) { - *(s8 *)((s32)a0 + 0xFC) = 0x8; - ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018423C); - - -extern void (*D_80192DE8[])(void); - -void func_8018425C(void *a0) { - D_80192DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192DF8[])(void); - -void func_80184298(void *a0) { - D_80192DF8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192E34[])(void); - -void func_801842D4(void *a0) { - D_80192E34[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192E50[])(void); - -void func_80184310(void *a0) { - D_80192E50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192E6C[])(void); - -void func_8018434C(void *a0) { - D_80192E6C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019426C[])(void); - -void func_80184388(void *a0) { - D_8019426C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801843C4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801844AC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018473C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184934); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184988); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801849DC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184AA4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80184E4C); - - -extern void (*D_801942B4[])(void); - -void func_80185020(void *a0) { - D_801942B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018505C); - - -extern void (*D_801942CC[])(void); - -void func_80185288(void *a0) { - D_801942CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801852C4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018531C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185344); - -extern u16 D_80126B62; - void func_80185378(void) { - *(s16 *)((s32)&D_80126B62 + 0x0) += 0xC; - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185394); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801853B0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801854B8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185570); - -void func_80185684(void) { -} - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018568C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185744); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801857EC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185894); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185920); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185990); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185AAC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185B20); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185BD8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185C80); - -void func_80185CF8(void) { -} - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185D00); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185D98); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185EA0); - -extern void func_8017ECE4(void); - void func_80185F08(s32 arg0) { - if (*(u16 *)arg0 != 0) { - ((void (*)(void))func_8017ECE4)(); - } - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185F38); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185FB4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80185FFC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801860F4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186124); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801861D0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018624C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801862D8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186384); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801863E0); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018645C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801864E4); - -extern void func_8012CBCC(s32 a0); - extern void func_8012C218(void *a0); - void func_801865E8(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - ((void (*)(s32))func_8012C218)((s32)a0); - } - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186624); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018672C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801867E4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801868EC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186A00); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186AA8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186AF4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186BD8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186C44); - -void func_80186D38(void) { -} - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186D40); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186E1C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186E94); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80186F7C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187074); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187144); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187198); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801872BC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018738C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187404); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187438); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801874DC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187540); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187600); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187644); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801876EC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801877A8); - -extern void func_8013373C(s32 arg0); - void func_80187854(void) { - func_8013373C(0); - } - - - -extern void func_8013C08C(void *a0, void *a1); -extern s32 D_801C7FC0; -extern s32 D_801988EC; - -void func_80187874(void) { - func_8013C08C(&D_801C7FC0, &D_801988EC); -} - - -s32 func_801878A4(void) { - return 0x6C; - } - - - -extern void (*D_801C3CF0[])(void); - -void func_801878AC(void *a0) { - D_801C3CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801878E8); - -extern void func_80187B28(); - void func_80187AE8(void) { - func_80187B28(); - } - - -extern void func_80146C3C(void); - void func_80187B08(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187B28); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187B80); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187BAC); - - -extern void (*D_801C3CFC[])(void); - -void func_80187BF0(void *a0) { - D_801C3CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187C2C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187C74); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187D00); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187D70); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187E48); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187E9C); - - -extern void (*D_801C3D18[])(void); - -void func_80187EDC(void *a0) { - D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80187F48(s32 arg); -extern void func_80146CA0(void *a0); - -void func_80187F18(s32 arg) { - func_80187F48(arg); - ((void (*)(s32))func_80146CA0)(arg); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187F48); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80187FCC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801880FC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188168); - - -extern void (*D_801C3D3C[])(void); - -void func_801881B0(void *a0) { - D_801C3D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801881EC); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188234); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188334); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188468); - - -extern void (*D_801C3DD8[])(void); - -void func_801884A8(void *a0) { - D_801C3DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801884E4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018852C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188680); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_801886F4); - - -extern void (*D_801C3E40[])(void); - -void func_80188734(void *a0) { - D_801C3E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188770); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_80188848); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_801734BC", func_8018890C); - diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80178D40.c b/src/ov_SC05_010/ov_SC05_010_jr_80178D40.c new file mode 100644 index 000000000..0196214c9 --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_80178D40.c @@ -0,0 +1,4863 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018BB88[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C61A8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018BB7C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018BBC0[]; +extern unsigned short D_8018BBC8[]; +extern unsigned short D_8018BBD0[]; +extern unsigned char D_801C61B0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C61A8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018BBD8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C62E4; +extern M2C_UNK D_801C62E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C6270; +extern void (*D_8018BC08[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C62EC[]; +extern u8 D_801C62F4[]; +extern u8 D_801C62A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018BC10[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018BC2C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018BC34[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018BC9C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018BC40; +extern u8 D_8018BC4C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018BCD0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018BCD8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018BD2C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018BD60[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018BD50[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018BD7C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018BDF4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018BDFC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018BE04[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018BE0C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018BE14[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018BE1C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018BE28[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018BE34[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018BE40[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018BE50[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018BE60[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018BE68[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018BE70[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018BE78[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018BE80[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018BE88[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018BE90[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018BE98[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018BEA0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018BEA8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018BEB0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018BEB8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018BEC0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018BEC8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018BED0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018BED8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018BEE0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018BEE8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018BEF0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018BEF8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018BF00[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018BF08[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018BF10[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018BF54[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018BF18; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018BF84[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018BFC0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018C018[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018C028[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018C030[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018C198[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018C1A4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C569C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801C7FB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C6A28; +extern short D_801C802C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801C802C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801C802C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801C6A28 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801C802C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801C7F88 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801C7F88 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801C802C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801C802C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801C6E84[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801C6A2C; + extern s32 D_801C6E40; + extern s16 D_801C6E44; + extern s16 D_801C6E48; + extern s16 D_801C6E4C; + extern s16 D_801C6E50; + extern s32 D_801C6E58; + extern s32 D_801C6E5C; + extern s32 D_801C6E6C; + extern s16 D_801C6E70; + extern s16 D_801C6E74; + extern s32 D_801C6E78; + extern s32 D_801C6E80; + extern s32 D_801C6E84[10]; + extern s32 D_801C7ED0; + extern s16 D_801C7F88; + extern s32 D_801C7FB4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801C7F88; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801C6E40); + D_801C6E40 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C6E4C, D_801C6E50 ? 0x48 : 0x40); + (*(s16*)&D_801C802C) = 2; + break; + case 0: + func_80179B28(D_801C6E40); + D_801C6E40 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801C6E44, D_801C6E48 ? 0x48 : 0x40); + (*(s16*)&D_801C802C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801C7ED0 != 0) { + func_80179B28(D_801C6E40); + D_801C6E40 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801C6E44, D_801C6E48 ? 0x48 : 0x40); + (*(s16*)&D_801C802C) = 1; + } else { + (*(s16*)&D_801C802C) = 3; + } + break; + case 0x32: + func_80179B28(D_801C6E40); + D_801C6E40 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801C6E44, + D_801C6E48 ? 0x48 : 0x40); + (*(s16*)&D_801C802C) = 1; + break; + case 2: + func_80179B28(D_801C6E40); + if (D_801C6E58 != 0) { + D_801C6A28 = D_801C6E58; + D_801C6E58 = 0; + (*(s16*)&D_801C802C) = 3; + return; + } + (*(s16*)&D_801C802C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801C802C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801C802C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C802C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801C802C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801C802C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801C802C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C802C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801C802C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801C802C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801C802C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801C802C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x1B: + D_801C6E78 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801C802C) = 4; + D_801C6A2C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801C802C) = 5; + D_801C6E6C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801C6E6C = (s32)func_8017A3B0; + (*(s16*)&D_801C802C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x24: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C802C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801C802C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801C802C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C802C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C802C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801C802C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C802C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801C802C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801C802C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C6E5C); + (*(s16*)&D_801C802C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801C6E5C); + (*(s16*)&D_801C802C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C6E5C); + (*(s16*)&D_801C802C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801C6E5C); + (*(s16*)&D_801C802C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + break; + case 0x4E: + D_801C6E80 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x2B: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801C802C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801C7FB4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801C802C) = 3; + break; + case 0x34: + (*(s16*)&D_801C802C) = 3; + D_801C6A28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801C6E58 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801C802C) = 3; + D_801C6A28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801C802C) = 3; + D_801C6A28 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801C6A28 = *(s32 *)(D_801C6A28 + 4); + return; + case 0x37: + (*(s16*)&D_801C802C) = 3; + D_801C6E44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C6E48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801C802C) = 3; + D_801C6E4C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801C6E50 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801C802C) = 3; + D_801C6E44 = w1; + D_801C6E48 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801C802C) = 3; + D_801C6E4C = w2; + D_801C6E50 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + case 0x43: + D_801C6E6C = (s32)func_8017A3D8; + D_801C6E74 = 0; + (*(s16*)&D_801C802C) = 5; + D_801C6E70 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801C802C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801C802C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801C802C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801C6E84; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801C802C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801C6E84; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801C802C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801C6E84[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801C802C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801C6E84; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801C802C) = 3; + break; + default: + break; + } +Lend: + D_801C6A28 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C6E54; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801C6E54 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801C6E54; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801C6E54 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801C6E7C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801C6E7C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801C6E38; + +s32 func_8017A3B0(void) { + switch (D_801C6E38) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801C6E74; +extern short D_801C6E70; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801C6E74) { + case 0: + func_800D0CA0(1); + D_801C6E74 = D_801C6E74 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801C6E70; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801C6E74 = D_801C6E74 + 1; + if (D_801C6E74 < 0x1E) { + return 0; + } + D_801C6E74 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801C6EB4; + extern s16 D_801C6EB6; + extern s16 D_801C6EB8; + extern s16 D_801C6EAC; + extern s16 D_801C6EAE; + extern s16 D_801C6EB0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801C6EB4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801C6EB6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801C6EB8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801C6EAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801C6EAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801C6EB0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801C6E3C; +extern u16 D_801C6EBC; +extern u16 D_801C6EBE; +extern u16 D_801C6EC0; +extern s16 D_801C7FB8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801C7FB8 = 0; + D_801C6E3C = 0; + D_801C6EBC = D_80126B5E; + D_801C6EBE = D_80126B62; + D_801C6EC0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018C2E0[]; + extern s16 D_801C6EB4; + extern s16 D_801C6EAC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C6EB4; + s16 *p78C = &D_801C6EAC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801C7FB8 = 1; + D_801C6E3C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801C6E5C; + extern SV4_8017B368 D_801C6E64; + extern s16 D_801C6EB4; + extern s16 D_801C6EAC; + extern u16 D_8018C2E0; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801C6E5C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801C6E64; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018C2E0)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018C2E0)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801C6EB4) = loc0; + (*(SV4_8017B368 *)&D_801C6EAC) = loc1; + D_801C7FB8 = 1; + D_801C6E3C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018C2E0[]; + extern s16 D_801C6EB4; + extern s16 D_801C6EB6; + extern s16 D_801C6EB8; + extern s16 D_801C6EAC; + extern s16 D_801C6EAE; + extern s16 D_801C6EB0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018C2E0[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801C6EB4; + s16 *p78C = &D_801C6EAC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801C6EB6; + v798 = D_801C6EB8; + v78C = *p78C; + v78E = D_801C6EAE; + v790 = D_801C6EB0; + __asm__ __volatile__(""); + D_801C7FB8 = 1; + D_801C6E3C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C6E3C; +extern s16 D_801C6EB4; +extern s16 D_801C6EB6; +extern s16 D_801C6EB8; +extern s16 D_801C6EAC; +extern s16 D_801C6EAE; +extern s16 D_801C6EB0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801C6E3C = 0; + D_801C6EB4 = (s16) D_80114F30; + D_801C6EB6 = (s16) D_80114F34; + D_801C6EB8 = (s16) D_80114F38; + D_801C6EAC = (s16) D_80114F24; + D_801C6EAE = (s16) D_80114F28; + D_801C6EB0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801C6ECC; +extern s16 D_801C6ECE; +extern s16 D_801C6ED0; +extern s16 D_801C6ED4; +extern s16 D_801C6ED6; +extern s16 D_801C6ED8; + +void func_8017B824(void) { + D_801C6ECC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801C6ECE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801C6ED0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801C6ED4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801C6ED6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801C6ED8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801C6ECC; +extern s16 D_801C6ECE; +extern s16 D_801C6ED0; +extern s16 D_801C6ED4; +extern s16 D_801C6ED6; +extern s16 D_801C6ED8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801C6ECC; + D_80114F34 = D_801C6ECE; + D_80114F38 = D_801C6ED0; + D_80114F24 = D_801C6ED4; + D_80114F28 = D_801C6ED6; + D_80114F2C = D_801C6ED8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801C6EB4), src[8..15] -> (*(S8_8017B8E8 *)&D_801C6EAC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801C6EB4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801C6EAC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801C6EBC; +extern u16 D_801C6EBE; +extern u16 D_801C6EC0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801C6E3C; +extern short D_801C6EC4; +extern short D_801C6EC6; +extern short D_801C6EC8; +extern s16 D_801C6EB4; +extern s16 D_801C6EB6; +extern s16 D_801C6EB8; +extern s16 D_801C6EAC; +extern s16 D_801C6EAE; +extern s16 D_801C6EB0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801C6EBC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801C6EBE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801C6EC0); + (*(s16 *)&D_801C6EC4) = buf[0]; + (*(s16 *)&D_801C6EC6) = buf[1]; + (*(s16 *)&D_801C6EC8) = buf[2]; + D_801C6EB4 = D_80114F30 + buf[0]; + D_801C6E3C = 0; + D_801C6EB6 = D_80114F34 + buf[1]; + D_801C6EB8 = D_80114F38 + buf[2]; + D_801C6EAC = D_80114F24 + buf[0]; + D_801C6EAE = D_80114F28 + buf[1]; + D_801C6EB0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801C6E5C; +extern SV4 D_801C6E64; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801C6E64) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801C6E5C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801C6E64 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801C6E64)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801C6E5C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801C6E64) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801C6E84[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801C6E84; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801C6E3C; +extern s16 D_801C7FB8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801C6E3C = D_801C6E3C + 1; + if (D_801C6E3C >= 0x1F) { + D_801C7FB8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801C6E3C; +extern s16 D_801C7FB8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C6E3C = D_801C6E3C + 1; + if (0x18 < D_801C6E3C) { + func_8012A4BC(); + D_801C7FB8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801C6E3C; +extern void (*D_801C6E80)(void); +extern short D_801C6EC4; +extern short D_801C6EC6; +extern short D_801C6EC8; +extern s16 D_801C7FB8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801C6E3C = D_801C6E3C + 1; + if (D_801C6E3C >= 0x19) { + if (D_801C6E80 != 0) { + (*D_801C6E80)(); + } else { + D_80114F30 = D_80114F30 + D_801C6EC4; + D_80114F34 = D_80114F34 + D_801C6EC6; + D_80114F38 = D_80114F38 + D_801C6EC8; + D_80114F24 = D_80114F24 + D_801C6EC4; + D_80114F28 = D_80114F28 + D_801C6EC6; + D_80114F2C = D_80114F2C + D_801C6EC8; + func_8012A4BC(); + } + D_801C7FB8 = 0; + } +} + + + +extern void (*D_8018C380[])(void); + +void func_8017BE60(void *a0) { + D_8018C380[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017C068); + + +extern void (*D_8018C3E0[])(void); + +void func_8017C114(void *a0) { + D_8018C3E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017C8D0); + + +extern void (*D_8018C498[])(void); + +void func_8017D7B0(void *a0) { + D_8018C498[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D7EC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D82C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D8A8); + +void func_8017D908(void) { +} + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D910); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D938); + +extern s16 D_80126B0C; + s32 func_8017D954(void) { + return D_80126B0C; + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D964); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017D9C4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DA90); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DC5C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DCB8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DD14); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DD78); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DE28); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DEEC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017DFAC); + + +extern void (*D_8018C530[])(void); + +void func_8017DFF0(void *a0) { + D_8018C530[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E02C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E1D4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E368); + + +extern void (*D_80192258[])(void); + +void func_8017E620(void *a0) { + D_80192258[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E65C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E6A0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +extern void (*D_80192260[])(void); + +void func_8017E6C4(void *a0) { + D_80192260[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E700); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E740); + +extern s32 func_800167F0(s32 arg); +extern void func_800CFBCC(s32 arg); + +s32 func_8017E7BC(void) { + if ((func_800167F0(0x4) & 0xFFFF) == 0) { + return 0; + } else { + func_800CFBCC(0x5); + return 1; + } +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8019226C; + +void func_8017E7F4(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019226C, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E81C); + +extern s32 func_80147054(void *a0); + extern void func_80171928(void *a0); + void func_8017E844(s32 a0) { + ((void (*)(s32 *))func_80147054)((s32 *)a0); + ((s32 (*)(s32))func_80171928)(a0); + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E874); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017E910); + +extern void func_8012A100(s8 a0); + void func_8017E9B4(void) { + ((s32 (*)(s32))func_8012A100)(0); + } + + + +extern void (*D_8019227C[])(void); + +void func_8017E9D4(void *a0) { + D_8019227C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EAB0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EAE4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EC7C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017ECE4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EDEC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EE68); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017EFC8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017F15C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017F5B8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017F9B4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017FAF4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017FDE0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8017FFA8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180108); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180214); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180450); + + +extern void (*D_80192568[])(void); + +void func_801805D0(void *a0) { + D_80192568[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018060C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801806A0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180854); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180AA0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180B44); + + +extern void (*D_801927B8[])(void); + +void func_80180DEC(void *a0) { + D_801927B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180E28); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80180F84); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801813F4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801814AC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80181670); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80181B4C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80181CDC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801828E0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801829F0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80182AC0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80182BD0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80182CA0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80182E78); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80182FD4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80183098); + + +extern void (*D_80192B68[])(void); + +void func_80183238(void *a0) { + D_80192B68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80183274); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018340C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018388C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80183C84); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80183D5C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184084); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184100); + + +extern void (*D_80192DE0[])(void); + +void func_801841A8(void *a0) { + D_80192DE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801841E4); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80184214(void *a0) { + *(s8 *)((s32)a0 + 0xFC) = 0x8; + ((void (*)(s32, s32))func_8012AD44)((s32)a0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018423C); + + +extern void (*D_80192DE8[])(void); + +void func_8018425C(void *a0) { + D_80192DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192DF8[])(void); + +void func_80184298(void *a0) { + D_80192DF8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192E34[])(void); + +void func_801842D4(void *a0) { + D_80192E34[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192E50[])(void); + +void func_80184310(void *a0) { + D_80192E50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192E6C[])(void); + +void func_8018434C(void *a0) { + D_80192E6C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019426C[])(void); + +void func_80184388(void *a0) { + D_8019426C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801843C4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801844AC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018473C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184934); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184988); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801849DC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184AA4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80184E4C); + + +extern void (*D_801942B4[])(void); + +void func_80185020(void *a0) { + D_801942B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018505C); + + +extern void (*D_801942CC[])(void); + +void func_80185288(void *a0) { + D_801942CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801852C4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018531C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185344); + +extern u16 D_80126B62; + void func_80185378(void) { + *(s16 *)((s32)&D_80126B62 + 0x0) += 0xC; + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185394); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801853B0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801854B8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185570); + +void func_80185684(void) { +} + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018568C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185744); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801857EC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185894); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185920); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185990); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185AAC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185B20); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185BD8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185C80); + +void func_80185CF8(void) { +} + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185D00); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185D98); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185EA0); + +extern void func_8017ECE4(void); + void func_80185F08(s32 arg0) { + if (*(u16 *)arg0 != 0) { + ((void (*)(void))func_8017ECE4)(); + } + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185F38); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185FB4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80185FFC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801860F4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186124); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801861D0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018624C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801862D8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186384); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801863E0); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018645C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801864E4); + +extern void func_8012CBCC(s32 a0); + extern void func_8012C218(void *a0); + void func_801865E8(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + ((void (*)(s32))func_8012C218)((s32)a0); + } + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186624); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018672C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801867E4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801868EC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186A00); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186AA8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186AF4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186BD8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186C44); + +void func_80186D38(void) { +} + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186D40); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186E1C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186E94); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80186F7C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187074); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187144); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187198); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801872BC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018738C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187404); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187438); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801874DC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187540); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187600); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187644); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801876EC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801877A8); + +extern void func_8013373C(s32 arg0); + void func_80187854(void) { + func_8013373C(0); + } + + + +extern void func_8013C08C(void *a0, void *a1); +extern s32 D_801C7FC0; +extern s32 D_801988EC; + +void func_80187874(void) { + func_8013C08C(&D_801C7FC0, &D_801988EC); +} + + +s32 func_801878A4(void) { + return 0x6C; + } + + + +extern void (*D_801C3CF0[])(void); + +void func_801878AC(void *a0) { + D_801C3CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801878E8); + +extern void func_80187B28(); + void func_80187AE8(void) { + func_80187B28(); + } + + +extern void func_80146C3C(void); + void func_80187B08(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187B28); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187B80); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187BAC); + + +extern void (*D_801C3CFC[])(void); + +void func_80187BF0(void *a0) { + D_801C3CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187C2C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187C74); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187D00); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187D70); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187E48); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187E9C); + + +extern void (*D_801C3D18[])(void); + +void func_80187EDC(void *a0) { + D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_80187F48(s32 arg); +extern void func_80146CA0(void *a0); + +void func_80187F18(s32 arg) { + func_80187F48(arg); + ((void (*)(s32))func_80146CA0)(arg); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187F48); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80187FCC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801880FC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188168); + + +extern void (*D_801C3D3C[])(void); + +void func_801881B0(void *a0) { + D_801C3D3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801881EC); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188234); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188334); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188468); + + +extern void (*D_801C3DD8[])(void); + +void func_801884A8(void *a0) { + D_801C3DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801884E4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018852C); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188680); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_801886F4); + + +extern void (*D_801C3E40[])(void); + +void func_80188734(void *a0) { + D_801C3E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188770); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_80188848); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80178D40", func_8018890C); + + diff --git a/src/ov_SC05_011/ov_SC05_011_jr_801734BC.c b/src/ov_SC05_011/ov_SC05_011_jr_801734BC.c index 61cac73f9..22fcc164f 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_801734BC.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_801734BC.c @@ -3084,924 +3084,3 @@ void func_80178D18(void) { D_8019D1DC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019CFDC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019CFDC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019CFDC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019CFDC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019D004; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019D004 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019CFC0; - -s32 func_8017A3B0(void) { - switch (D_8019CFC0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019CFFC; -extern short D_8019CFF8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019CFFC) { - case 0: - func_800D0CA0(1); - D_8019CFFC = D_8019CFFC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019CFF8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019CFFC = D_8019CFFC + 1; - if (D_8019CFFC < 0x1E) { - return 0; - } - D_8019CFFC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019D03C; - extern s16 D_8019D03E; - extern s16 D_8019D040; - extern s16 D_8019D034; - extern s16 D_8019D036; - extern s16 D_8019D038; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019D03C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019D03E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019D040, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019D034, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019D036, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019D038, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019CFC4; -extern u16 D_8019D044; -extern u16 D_8019D046; -extern u16 D_8019D048; -extern s16 D_8019D168; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019D168 = 0; - D_8019CFC4 = 0; - D_8019D044 = D_80126B5E; - D_8019D046 = D_80126B62; - D_8019D048 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181658[]; - extern s16 D_8019D03C; - extern s16 D_8019D034; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181658[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181658[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019D03C; - s16 *p78C = &D_8019D034; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019D168 = 1; - D_8019CFC4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019CFE4; - extern SV4_8017B368 D_8019CFEC; - extern s16 D_8019D03C; - extern s16 D_8019D034; - extern u16 D_80181658; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019CFE4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019CFEC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181658)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181658)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019D03C) = loc0; - (*(SV4_8017B368 *)&D_8019D034) = loc1; - D_8019D168 = 1; - D_8019CFC4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181658[]; - extern s16 D_8019D03C; - extern s16 D_8019D03E; - extern s16 D_8019D040; - extern s16 D_8019D034; - extern s16 D_8019D036; - extern s16 D_8019D038; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181658[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181658[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019D03C; - s16 *p78C = &D_8019D034; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019D03E; - v798 = D_8019D040; - v78C = *p78C; - v78E = D_8019D036; - v790 = D_8019D038; - __asm__ __volatile__(""); - D_8019D168 = 1; - D_8019CFC4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019CFC4; -extern s16 D_8019D03C; -extern s16 D_8019D03E; -extern s16 D_8019D040; -extern s16 D_8019D034; -extern s16 D_8019D036; -extern s16 D_8019D038; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019CFC4 = 0; - D_8019D03C = (s16) D_80114F30; - D_8019D03E = (s16) D_80114F34; - D_8019D040 = (s16) D_80114F38; - D_8019D034 = (s16) D_80114F24; - D_8019D036 = (s16) D_80114F28; - D_8019D038 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019D054; -extern s16 D_8019D056; -extern s16 D_8019D058; -extern s16 D_8019D05C; -extern s16 D_8019D05E; -extern s16 D_8019D060; - -void func_8017B824(void) { - D_8019D054 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019D056 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019D058 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019D05C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019D05E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019D060 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019D054; -extern s16 D_8019D056; -extern s16 D_8019D058; -extern s16 D_8019D05C; -extern s16 D_8019D05E; -extern s16 D_8019D060; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019D054; - D_80114F34 = D_8019D056; - D_80114F38 = D_8019D058; - D_80114F24 = D_8019D05C; - D_80114F28 = D_8019D05E; - D_80114F2C = D_8019D060; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019D03C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019D034) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019D03C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019D034) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019D044; -extern u16 D_8019D046; -extern u16 D_8019D048; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019CFC4; -extern short D_8019D04C; -extern short D_8019D04E; -extern short D_8019D050; -extern s16 D_8019D03C; -extern s16 D_8019D03E; -extern s16 D_8019D040; -extern s16 D_8019D034; -extern s16 D_8019D036; -extern s16 D_8019D038; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019D044); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019D046); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019D048); - (*(s16 *)&D_8019D04C) = buf[0]; - (*(s16 *)&D_8019D04E) = buf[1]; - (*(s16 *)&D_8019D050) = buf[2]; - D_8019D03C = D_80114F30 + buf[0]; - D_8019CFC4 = 0; - D_8019D03E = D_80114F34 + buf[1]; - D_8019D040 = D_80114F38 + buf[2]; - D_8019D034 = D_80114F24 + buf[0]; - D_8019D036 = D_80114F28 + buf[1]; - D_8019D038 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019CFE4; -extern SV4 D_8019CFEC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019CFEC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019CFE4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019CFEC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019CFEC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019CFE4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019CFEC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019D00C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019D00C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019CFC4; -extern s16 D_8019D168; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019CFC4 = D_8019CFC4 + 1; - if (D_8019CFC4 >= 0x1F) { - D_8019D168 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019CFC4; -extern s16 D_8019D168; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019CFC4 = D_8019CFC4 + 1; - if (0x18 < D_8019CFC4) { - func_8012A4BC(); - D_8019D168 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019CFC4; -extern void (*D_8019D008)(void); -extern short D_8019D04C; -extern short D_8019D04E; -extern short D_8019D050; -extern s16 D_8019D168; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019CFC4 = D_8019CFC4 + 1; - if (D_8019CFC4 >= 0x19) { - if (D_8019D008 != 0) { - (*D_8019D008)(); - } else { - D_80114F30 = D_80114F30 + D_8019D04C; - D_80114F34 = D_80114F34 + D_8019D04E; - D_80114F38 = D_80114F38 + D_8019D050; - D_80114F24 = D_80114F24 + D_8019D04C; - D_80114F28 = D_80114F28 + D_8019D04E; - D_80114F2C = D_80114F2C + D_8019D050; - func_8012A4BC(); - } - D_8019D168 = 0; - } -} - - - -extern void (*D_801816F8[])(void); - -void func_8017BE60(void *a0) { - D_801816F8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017BEBC); - - -extern void (*D_80181754[])(void); - -void func_8017CD9C(void *a0) { - D_80181754[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018175C[])(void); - -void func_8017CE40(void *a0) { - D_8018175C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CE7C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CEBC); - - -extern s32 func_800167F0(s32 arg); -extern void func_800CFBCC(s32 arg); - -s32 func_8017CF38(void) { - if ((func_800167F0(0x4) & 0xFFFF) == 0) { - return 0; - } else { - func_800CFBCC(0x4); - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CF70); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CF98); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017CFC0); - - -extern void (*D_80181778[])(void); - -void func_8017D010(void *a0) { - D_80181778[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D04C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D0EC); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D25C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D4A4); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D610); - - -extern void (*D_801823B0[])(void); - -void func_8017D7DC(void *a0) { - D_801823B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017D818); - -void func_8017D8A0(void *a0) { - *(short *)(*(int *)((char *)a0 + 0xcc) + 0x10a) = -0x7800; - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181808; - void func_8017D8B0(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80181808); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801818A0; - void func_8017D8DC(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801818A0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_801819B0; - void func_8017D908(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801819B0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181A40; - void func_8017D934(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181A40); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181B20; - void func_8017D960(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181B20); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181B48; - void func_8017D98C(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181B48); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181D80; - void func_8017D9B8(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181D80); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181CA0; - void func_8017D9E4(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181CA0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181EF0; - void func_8017DA10(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181EF0); - } - - - -extern s32 func_8012A828(void *a0, void *a1); - extern s32 D_80181FB8; - void func_8017DA3C(void *arg0) { - ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181FB8); - } - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017DA68); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017DB54); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_801734BC", func_8017DC50); - -void func_8017DCA4(void) { -} - -extern void func_8017D818(); - void func_8017DCAC(void) { - func_8017D818(); - } - diff --git a/src/ov_SC05_011/ov_SC05_011_jr_80178D40.c b/src/ov_SC05_011/ov_SC05_011_jr_80178D40.c new file mode 100644 index 000000000..917f331b7 --- /dev/null +++ b/src/ov_SC05_011/ov_SC05_011_jr_80178D40.c @@ -0,0 +1,4370 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80180F00[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019C330; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80180EF4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80180F38[]; +extern unsigned short D_80180F40[]; +extern unsigned short D_80180F48[]; +extern unsigned char D_8019C338[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019C330; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80180F50[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C46C; +extern M2C_UNK D_8019C470; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C3F8; +extern void (*D_80180F80[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019C474[]; +extern u8 D_8019C47C[]; +extern u8 D_8019C42C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80180F88[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80180FA4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80180FAC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181014[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80180FB8; +extern u8 D_80180FC4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181048[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181050[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801810A4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801810D8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801810C8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801810F4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018116C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181174[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018117C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181184[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018118C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181194[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801811A0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801811AC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801811B8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801811C8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801811D8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801811E0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801811E8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801811F0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801811F8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181200[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181208[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181210[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181218[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181220[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181228[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181230[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181238[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181240[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181248[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181250[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181258[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181260[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181268[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181270[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181278[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181280[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181288[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801812CC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80181290; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801812FC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80181338[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80181390[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801813A0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801813A8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80181510[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018151C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019BA00; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019D168; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019CBB0; +extern short D_8019D1DC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019D1DC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019D1DC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019CBB0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019D1DC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019D138 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019D138 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019D1DC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019D1DC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019D00C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019CBB4; + extern s32 D_8019CFC8; + extern s16 D_8019CFCC; + extern s16 D_8019CFD0; + extern s16 D_8019CFD4; + extern s16 D_8019CFD8; + extern s32 D_8019CFE0; + extern s32 D_8019CFE4; + extern s32 D_8019CFF4; + extern s16 D_8019CFF8; + extern s16 D_8019CFFC; + extern s32 D_8019D000; + extern s32 D_8019D008; + extern s32 D_8019D00C[10]; + extern s32 D_8019D080; + extern s16 D_8019D138; + extern s32 D_8019D164; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019D138; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019CFC8); + D_8019CFC8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019CFD4, D_8019CFD8 ? 0x48 : 0x40); + (*(s16*)&D_8019D1DC) = 2; + break; + case 0: + func_80179B28(D_8019CFC8); + D_8019CFC8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019CFCC, D_8019CFD0 ? 0x48 : 0x40); + (*(s16*)&D_8019D1DC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019D080 != 0) { + func_80179B28(D_8019CFC8); + D_8019CFC8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019CFCC, D_8019CFD0 ? 0x48 : 0x40); + (*(s16*)&D_8019D1DC) = 1; + } else { + (*(s16*)&D_8019D1DC) = 3; + } + break; + case 0x32: + func_80179B28(D_8019CFC8); + D_8019CFC8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019CFCC, + D_8019CFD0 ? 0x48 : 0x40); + (*(s16*)&D_8019D1DC) = 1; + break; + case 2: + func_80179B28(D_8019CFC8); + if (D_8019CFE0 != 0) { + D_8019CBB0 = D_8019CFE0; + D_8019CFE0 = 0; + (*(s16*)&D_8019D1DC) = 3; + return; + } + (*(s16*)&D_8019D1DC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019D1DC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019D1DC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019D1DC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x1B: + D_8019D000 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019D1DC) = 4; + D_8019CBB4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019D1DC) = 5; + D_8019CFF4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019CFF4 = (s32)func_8017A3B0; + (*(s16*)&D_8019D1DC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x24: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019D1DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019D1DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019D1DC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D1DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D1DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D1DC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019D1DC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019CFE4); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019CFE4); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019CFE4); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019CFE4); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x4E: + D_8019D008 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x2B: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019D1DC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019D164 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x34: + (*(s16*)&D_8019D1DC) = 3; + D_8019CBB0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019CFE0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019D1DC) = 3; + D_8019CBB0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019D1DC) = 3; + D_8019CBB0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019CBB0 = *(s32 *)(D_8019CBB0 + 4); + return; + case 0x37: + (*(s16*)&D_8019D1DC) = 3; + D_8019CFCC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019CFD0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019D1DC) = 3; + D_8019CFD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019CFD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019D1DC) = 3; + D_8019CFCC = w1; + D_8019CFD0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019D1DC) = 3; + D_8019CFD4 = w2; + D_8019CFD8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x43: + D_8019CFF4 = (s32)func_8017A3D8; + D_8019CFFC = 0; + (*(s16*)&D_8019D1DC) = 5; + D_8019CFF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D1DC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D1DC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019D00C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019D1DC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019D00C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019D1DC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019D00C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019D1DC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019D00C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019D1DC) = 3; + break; + default: + break; + } +Lend: + D_8019CBB0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019CFDC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019CFDC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019CFDC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019CFDC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019D004; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019D004 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019CFC0; + +s32 func_8017A3B0(void) { + switch (D_8019CFC0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019CFFC; +extern short D_8019CFF8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019CFFC) { + case 0: + func_800D0CA0(1); + D_8019CFFC = D_8019CFFC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019CFF8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019CFFC = D_8019CFFC + 1; + if (D_8019CFFC < 0x1E) { + return 0; + } + D_8019CFFC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019D03C; + extern s16 D_8019D03E; + extern s16 D_8019D040; + extern s16 D_8019D034; + extern s16 D_8019D036; + extern s16 D_8019D038; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019D03C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019D03E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019D040, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019D034, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019D036, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019D038, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019CFC4; +extern u16 D_8019D044; +extern u16 D_8019D046; +extern u16 D_8019D048; +extern s16 D_8019D168; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019D168 = 0; + D_8019CFC4 = 0; + D_8019D044 = D_80126B5E; + D_8019D046 = D_80126B62; + D_8019D048 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181658[]; + extern s16 D_8019D03C; + extern s16 D_8019D034; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181658[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181658[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019D03C; + s16 *p78C = &D_8019D034; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019D168 = 1; + D_8019CFC4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019CFE4; + extern SV4_8017B368 D_8019CFEC; + extern s16 D_8019D03C; + extern s16 D_8019D034; + extern u16 D_80181658; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019CFE4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019CFEC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181658)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181658)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019D03C) = loc0; + (*(SV4_8017B368 *)&D_8019D034) = loc1; + D_8019D168 = 1; + D_8019CFC4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181658[]; + extern s16 D_8019D03C; + extern s16 D_8019D03E; + extern s16 D_8019D040; + extern s16 D_8019D034; + extern s16 D_8019D036; + extern s16 D_8019D038; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181658[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181658[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019D03C; + s16 *p78C = &D_8019D034; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019D03E; + v798 = D_8019D040; + v78C = *p78C; + v78E = D_8019D036; + v790 = D_8019D038; + __asm__ __volatile__(""); + D_8019D168 = 1; + D_8019CFC4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019CFC4; +extern s16 D_8019D03C; +extern s16 D_8019D03E; +extern s16 D_8019D040; +extern s16 D_8019D034; +extern s16 D_8019D036; +extern s16 D_8019D038; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019CFC4 = 0; + D_8019D03C = (s16) D_80114F30; + D_8019D03E = (s16) D_80114F34; + D_8019D040 = (s16) D_80114F38; + D_8019D034 = (s16) D_80114F24; + D_8019D036 = (s16) D_80114F28; + D_8019D038 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019D054; +extern s16 D_8019D056; +extern s16 D_8019D058; +extern s16 D_8019D05C; +extern s16 D_8019D05E; +extern s16 D_8019D060; + +void func_8017B824(void) { + D_8019D054 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019D056 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019D058 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019D05C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019D05E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019D060 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019D054; +extern s16 D_8019D056; +extern s16 D_8019D058; +extern s16 D_8019D05C; +extern s16 D_8019D05E; +extern s16 D_8019D060; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019D054; + D_80114F34 = D_8019D056; + D_80114F38 = D_8019D058; + D_80114F24 = D_8019D05C; + D_80114F28 = D_8019D05E; + D_80114F2C = D_8019D060; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019D03C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019D034) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019D03C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019D034) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019D044; +extern u16 D_8019D046; +extern u16 D_8019D048; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019CFC4; +extern short D_8019D04C; +extern short D_8019D04E; +extern short D_8019D050; +extern s16 D_8019D03C; +extern s16 D_8019D03E; +extern s16 D_8019D040; +extern s16 D_8019D034; +extern s16 D_8019D036; +extern s16 D_8019D038; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019D044); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019D046); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019D048); + (*(s16 *)&D_8019D04C) = buf[0]; + (*(s16 *)&D_8019D04E) = buf[1]; + (*(s16 *)&D_8019D050) = buf[2]; + D_8019D03C = D_80114F30 + buf[0]; + D_8019CFC4 = 0; + D_8019D03E = D_80114F34 + buf[1]; + D_8019D040 = D_80114F38 + buf[2]; + D_8019D034 = D_80114F24 + buf[0]; + D_8019D036 = D_80114F28 + buf[1]; + D_8019D038 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019CFE4; +extern SV4 D_8019CFEC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019CFEC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019CFE4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019CFEC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019CFEC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019CFE4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019CFEC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019D00C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019D00C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019CFC4; +extern s16 D_8019D168; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019CFC4 = D_8019CFC4 + 1; + if (D_8019CFC4 >= 0x1F) { + D_8019D168 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019CFC4; +extern s16 D_8019D168; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019CFC4 = D_8019CFC4 + 1; + if (0x18 < D_8019CFC4) { + func_8012A4BC(); + D_8019D168 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019CFC4; +extern void (*D_8019D008)(void); +extern short D_8019D04C; +extern short D_8019D04E; +extern short D_8019D050; +extern s16 D_8019D168; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019CFC4 = D_8019CFC4 + 1; + if (D_8019CFC4 >= 0x19) { + if (D_8019D008 != 0) { + (*D_8019D008)(); + } else { + D_80114F30 = D_80114F30 + D_8019D04C; + D_80114F34 = D_80114F34 + D_8019D04E; + D_80114F38 = D_80114F38 + D_8019D050; + D_80114F24 = D_80114F24 + D_8019D04C; + D_80114F28 = D_80114F28 + D_8019D04E; + D_80114F2C = D_80114F2C + D_8019D050; + func_8012A4BC(); + } + D_8019D168 = 0; + } +} + + + +extern void (*D_801816F8[])(void); + +void func_8017BE60(void *a0) { + D_801816F8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017BEBC); + + +extern void (*D_80181754[])(void); + +void func_8017CD9C(void *a0) { + D_80181754[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018175C[])(void); + +void func_8017CE40(void *a0) { + D_8018175C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CE7C); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CEBC); + + +extern s32 func_800167F0(s32 arg); +extern void func_800CFBCC(s32 arg); + +s32 func_8017CF38(void) { + if ((func_800167F0(0x4) & 0xFFFF) == 0) { + return 0; + } else { + func_800CFBCC(0x4); + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CF70); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CF98); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017CFC0); + + +extern void (*D_80181778[])(void); + +void func_8017D010(void *a0) { + D_80181778[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D04C); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D0EC); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D25C); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D4A4); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D610); + + +extern void (*D_801823B0[])(void); + +void func_8017D7DC(void *a0) { + D_801823B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017D818); + +void func_8017D8A0(void *a0) { + *(short *)(*(int *)((char *)a0 + 0xcc) + 0x10a) = -0x7800; + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181808; + void func_8017D8B0(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xCC), &D_80181808); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801818A0; + void func_8017D8DC(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801818A0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_801819B0; + void func_8017D908(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_801819B0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181A40; + void func_8017D934(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181A40); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181B20; + void func_8017D960(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181B20); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181B48; + void func_8017D98C(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD0), &D_80181B48); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181D80; + void func_8017D9B8(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181D80); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181CA0; + void func_8017D9E4(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181CA0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181EF0; + void func_8017DA10(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181EF0); + } + + + +extern s32 func_8012A828(void *a0, void *a1); + extern s32 D_80181FB8; + void func_8017DA3C(void *arg0) { + ((void (*)(s32, s32))func_8012A828)(M2C_FIELD(arg0, s32 *, 0xD4), &D_80181FB8); + } + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017DA68); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017DB54); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_80178D40", func_8017DC50); + +void func_8017DCA4(void) { +} + +extern void func_8017D818(); + void func_8017DCAC(void) { + func_8017D818(); + } + + diff --git a/src/ov_SC05_017/ov_SC05_017_jr_801734BC.c b/src/ov_SC05_017/ov_SC05_017_jr_801734BC.c index dd7f75131..0200b0c6a 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_801734BC.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_801734BC.c @@ -3084,2564 +3084,3 @@ void func_80178D18(void) { D_801ED984 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ECB1C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801ECB1C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ECB1C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801ECB1C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801ECB44; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801ECB44 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801ECB00; - -s32 func_8017A3B0(void) { - switch (D_801ECB00) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801ECB3C; -extern short D_801ECB38; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801ECB3C) { - case 0: - func_800D0CA0(1); - D_801ECB3C = D_801ECB3C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801ECB38; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801ECB3C = D_801ECB3C + 1; - if (D_801ECB3C < 0x1E) { - return 0; - } - D_801ECB3C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801ECB7C; - extern s16 D_801ECB7E; - extern s16 D_801ECB80; - extern s16 D_801ECB74; - extern s16 D_801ECB76; - extern s16 D_801ECB78; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ECB7C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ECB7E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ECB80, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ECB74, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ECB76, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ECB78, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801ECB04; -extern u16 D_801ECB84; -extern u16 D_801ECB86; -extern u16 D_801ECB88; -extern s16 D_801ED910; - -void func_8017B1D8(void) { - func_8012A418(); - D_801ED910 = 0; - D_801ECB04 = 0; - D_801ECB84 = D_80126B5E; - D_801ECB86 = D_80126B62; - D_801ECB88 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B18[]; - extern s16 D_801ECB7C; - extern s16 D_801ECB74; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B18[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B18[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ECB7C; - s16 *p78C = &D_801ECB74; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801ED910 = 1; - D_801ECB04 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801ECB24; - extern SV4_8017B368 D_801ECB2C; - extern s16 D_801ECB7C; - extern s16 D_801ECB74; - extern u16 D_80190B18; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801ECB24; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801ECB2C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B18)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B18)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801ECB7C) = loc0; - (*(SV4_8017B368 *)&D_801ECB74) = loc1; - D_801ED910 = 1; - D_801ECB04 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190B18[]; - extern s16 D_801ECB7C; - extern s16 D_801ECB7E; - extern s16 D_801ECB80; - extern s16 D_801ECB74; - extern s16 D_801ECB76; - extern s16 D_801ECB78; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190B18[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190B18[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ECB7C; - s16 *p78C = &D_801ECB74; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801ECB7E; - v798 = D_801ECB80; - v78C = *p78C; - v78E = D_801ECB76; - v790 = D_801ECB78; - __asm__ __volatile__(""); - D_801ED910 = 1; - D_801ECB04 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ECB04; -extern s16 D_801ECB7C; -extern s16 D_801ECB7E; -extern s16 D_801ECB80; -extern s16 D_801ECB74; -extern s16 D_801ECB76; -extern s16 D_801ECB78; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801ECB04 = 0; - D_801ECB7C = (s16) D_80114F30; - D_801ECB7E = (s16) D_80114F34; - D_801ECB80 = (s16) D_80114F38; - D_801ECB74 = (s16) D_80114F24; - D_801ECB76 = (s16) D_80114F28; - D_801ECB78 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801ECB94; -extern s16 D_801ECB96; -extern s16 D_801ECB98; -extern s16 D_801ECB9C; -extern s16 D_801ECB9E; -extern s16 D_801ECBA0; - -void func_8017B824(void) { - D_801ECB94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801ECB96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801ECB98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801ECB9C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801ECB9E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801ECBA0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801ECB94; -extern s16 D_801ECB96; -extern s16 D_801ECB98; -extern s16 D_801ECB9C; -extern s16 D_801ECB9E; -extern s16 D_801ECBA0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801ECB94; - D_80114F34 = D_801ECB96; - D_80114F38 = D_801ECB98; - D_80114F24 = D_801ECB9C; - D_80114F28 = D_801ECB9E; - D_80114F2C = D_801ECBA0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801ECB7C), src[8..15] -> (*(S8_8017B8E8 *)&D_801ECB74) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801ECB7C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801ECB74) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801ECB84; -extern u16 D_801ECB86; -extern u16 D_801ECB88; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ECB04; -extern short D_801ECB8C; -extern short D_801ECB8E; -extern short D_801ECB90; -extern s16 D_801ECB7C; -extern s16 D_801ECB7E; -extern s16 D_801ECB80; -extern s16 D_801ECB74; -extern s16 D_801ECB76; -extern s16 D_801ECB78; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ECB84); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ECB86); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ECB88); - (*(s16 *)&D_801ECB8C) = buf[0]; - (*(s16 *)&D_801ECB8E) = buf[1]; - (*(s16 *)&D_801ECB90) = buf[2]; - D_801ECB7C = D_80114F30 + buf[0]; - D_801ECB04 = 0; - D_801ECB7E = D_80114F34 + buf[1]; - D_801ECB80 = D_80114F38 + buf[2]; - D_801ECB74 = D_80114F24 + buf[0]; - D_801ECB76 = D_80114F28 + buf[1]; - D_801ECB78 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801ECB24; -extern SV4 D_801ECB2C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ECB2C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801ECB24 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801ECB2C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ECB2C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801ECB24) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801ECB2C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801ECB4C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801ECB4C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801ECB04; -extern s16 D_801ED910; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801ECB04 = D_801ECB04 + 1; - if (D_801ECB04 >= 0x1F) { - D_801ED910 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801ECB04; -extern s16 D_801ED910; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ECB04 = D_801ECB04 + 1; - if (0x18 < D_801ECB04) { - func_8012A4BC(); - D_801ED910 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801ECB04; -extern void (*D_801ECB48)(void); -extern short D_801ECB8C; -extern short D_801ECB8E; -extern short D_801ECB90; -extern s16 D_801ED910; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ECB04 = D_801ECB04 + 1; - if (D_801ECB04 >= 0x19) { - if (D_801ECB48 != 0) { - (*D_801ECB48)(); - } else { - D_80114F30 = D_80114F30 + D_801ECB8C; - D_80114F34 = D_80114F34 + D_801ECB8E; - D_80114F38 = D_80114F38 + D_801ECB90; - D_80114F24 = D_80114F24 + D_801ECB8C; - D_80114F28 = D_80114F28 + D_801ECB8E; - D_80114F2C = D_80114F2C + D_801ECB90; - func_8012A4BC(); - } - D_801ED910 = 0; - } -} - - - -extern void (*D_80190BB8[])(void); - -void func_8017BE60(void *a0) { - D_80190BB8[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_80190C58[])(void); - -void func_8017BE9C(void *a0) { - D_80190C58[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190C60[])(void); - -void func_8017BED8(void *a0) { - D_80190C60[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190C68[])(void); - -void func_8017BF14(void *a0) { - D_80190C68[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017BF50); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C094); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C100); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C1AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C1EC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C2B0); - - -extern void (*D_80190C88[])(void); - -void func_8017C338(void *a0) { - D_80190C88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C374); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C538); - - -extern void (*D_80190C90[])(void); - -void func_8017C5CC(void *a0) { - D_80190C90[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80190C7C; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80190C7C, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C6AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017C710); - - -extern void (*D_80190CA8[])(void); - -void func_8017D5F0(void *a0) { - D_80190CA8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_80190C98; - -void func_8017D62C(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190C98 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ - - -extern void (*D_80190CE0[])(void); - -void func_8017D6B0(void *a0) { - D_80190CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017D6EC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017D77C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017D9B8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DA08); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DAC4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DBDC); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801ECE40; -extern u16 D_80190CE8[]; -extern u16 D_801ECE44[]; -extern s32 D_80190D08; - -extern void func_800183E0(s32 a0); - -void func_8017DC0C(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80190CE8; - base = D_801ECE40 >> 8; - p = D_801ECE44; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80190D08); - D_801ECE40 = D_801ECE40 + 0x100; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DC98); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017DCE8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DD0C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DE2C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DE4C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017DEA0); - - -extern void (*D_80190D28[])(void); - -void func_8017DF4C(void *a0) { - D_80190D28[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D30[])(void); - -void func_8017DF88(void *a0) { - D_80190D30[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D3C[])(void); - -void func_8017DFC4(void *a0) { - D_80190D3C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80190D48[])(void); - -void func_8017E000(void *a0) { - D_80190D48[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E03C(void) { - D_80127050 = 1; - } - - - -extern void (*D_80190FFC[])(void); - -void func_8017E050(void *a0) { - D_80190FFC[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E08C(u8 *a0) { - *(s8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E0A0); - - -extern void (*D_80191004[])(void); - -void func_8017E0D8(void *a0) { - D_80191004[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E114(void *a0) { - *(s8 *)((s32)a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8017E128(void) { - func_8016F0E4(); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E148); - - -extern void (*D_8019100C[])(void); - -void func_8017E20C(void *a0) { - D_8019100C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E248); - -void func_8017E27C(u8 *a0) { - *(s8 *)(a0 + 0xA0) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E284); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E3C4); - - -extern void (*D_80191158[])(void); - -void func_8017E5B8(void *a0) { - D_80191158[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E5F4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E614); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E6D8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E7EC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E85C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E8CC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017E92C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EA6C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EAE0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EB30); - - -extern void (*D_801912B8[])(void); - -void func_8017ED1C(void *a0) { - D_801912B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017ED58); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017ED94); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_8017EDD4(void) { - if ((func_80029178(0x110) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EE10); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EEC8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EF20); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EF78); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017EFFC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F04C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F0C0); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_8017F174(void) { - func_80029124(0x110, 1); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F198); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F274); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F308); - -extern void func_801849B8(s32 *a0, s32 a1); - extern short D_801912E8; - void func_8017F398(short *a0) { - *(short *)((char *)a0 + 0x2) = 2; - func_801849B8((s32 *)a0, (s32)&D_801912E8); - } - - - -extern void (*D_80191350[])(void); - -void func_8017F3C4(void *a0) { - D_80191350[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern short D_80191318; - -void func_8017F400(short *param) { - param[1] = 4; - func_80178CBC((int)param, (int)&D_80191318); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F42C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F46C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F4C8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F53C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F58C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F650); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F6C8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F73C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F794); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F81C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F848); - - -extern void (*D_801913FC[])(void); - -void func_8017F98C(void *a0) { - D_801913FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017F9C8); - -extern void func_80178CBC(s32 arg0, s32 arg1); -extern short D_8019139C; - -void func_8017FA2C(void *arg0) { - *(short *)((char *)arg0 + 0x2) = 0x7; - ((void (*)(s32 *, s32))func_80178CBC)(arg0, &D_8019139C); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FA58); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FA98); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FB10); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FC00); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FCA0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FD34); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FDB8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FE28); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FEBC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FF6C); - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801913D4; - void func_8017FFBC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 11; - func_80178CBC((int)arg0, (int)&D_801913D4); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8017FFE8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180048); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801800BC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180124); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180188); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801801B4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180240); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018026C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801802B8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801803D8); - - -extern void (*D_80191504[])(void); - -void func_801804F0(void *a0) { - D_80191504[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018052C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018058C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801805CC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801805F0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180664); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801806BC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180748); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180788); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180894); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801808D4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801809E0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180A20); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180A94); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180AEC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180BA8); - -extern void func_801849B8(s32 *a0, s32 a1); - extern short D_80191530; - void func_80180C30(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_801849B8((s32 *)a0, (s32)&D_80191530); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180C5C); - - -extern void (*D_8019187C[])(void); - -void func_80180DA4(void *a0) { - D_8019187C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180DE0); - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191568; - void func_80180ED0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC((s32 *)a0, (s32)&D_80191568); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180EFC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180F3C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80180FB4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801810A4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181144); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801811D8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181268); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801812D8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181364); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181414); - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191840; - void func_80181464(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 11; - func_80178CBC((int)arg0, (int)&D_80191840); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181490); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801814F0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181564); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801815BC); - - -extern void (*D_80191990[])(void); - -void func_80181630(void *a0) { - D_80191990[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018166C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801816CC); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_801816DC(void) { - if ((func_80029178(0x113) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181718); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181758); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801817F0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181830); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801818A0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018193C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181A4C); - -extern void func_801849B8(s32 *a0, s32 a1); - extern short D_801919AC; - void func_80181B04(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_801849B8((s32 *)a0, (s32)&D_801919AC); - } - - - -extern void (*D_80191AA4[])(void); - -void func_80181B30(void *a0) { - D_80191AA4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191A54; - void func_80181B6C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80191A54); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181B98); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181BD8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181C1C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181C60); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181CA4); - - -void func_80181CF0(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181D00); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181D50); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181E0C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181F00); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181F60); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80181FC0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182034); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182084); - - -extern void (*D_80191C18[])(void); - -void func_80182234(void *a0) { - D_80191C18[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191B18; - void func_80182270(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 5; - func_80178CBC((int)arg0, (int)&D_80191B18); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018229C); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_801822DC(void) { - if ((func_80029178(0x115) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182318); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801823D0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182410); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182448); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801824AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801824FC); - -extern void func_80029124(s32 arg0, s32 arg1); - void func_80182540(void) { - func_80029124(0x115, 1); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182564); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018268C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182750); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801827E4); - -extern void func_801849B8(s32 *a0, s32 a1); - extern short D_80191C44; - void func_80182874(short *param_1) { - *(short *)((char *)param_1 + 2) = 1; - ((void (*)(int, int))func_801849B8)((int)param_1, &D_80191C44); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801828A0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801828EC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182A28); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182A74); - - -extern void (*D_80191E84[])(void); - -void func_80182BB0(void *a0) { - D_80191E84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182BEC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182C2C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182C6C); - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80182CAC(void) { - if ((func_80029178(0x116) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); - return 1; - } - return 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182CE8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182D0C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182D3C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182D6C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182D9C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182DCC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182E18); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182E68); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182EB4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182F04); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182F50); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80182FA8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183004); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018305C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183100); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801831C8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801832C4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183328); - - -extern void (*D_80191F98[])(void); - -void func_80183380(void *a0) { - D_80191F98[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80191F38; - void func_801833BC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_80191F38); - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191F70; - void func_801833E8(short *param) { - param[1] = 0x7; - func_80178CBC((int)param, (int)&D_80191F70); - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191F70; - void func_80183414(short *param) { - param[1] = 0xD; - func_80178CBC((int)param, (int)&D_80191F70); - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80191F70; - void func_80183440(short *param) { - param[1] = 0xA; - func_80178CBC((int)param, (int)&D_80191F70); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018346C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801834A4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801834F8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183558); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801835FC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801836A4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183724); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183774); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801837D4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183830); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801838A0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183980); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801839AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183A08); - - -extern void (*D_80192140[])(void); - -void func_80183CC0(void *a0) { - D_80192140[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801920BC; - void func_80183CFC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801920BC); - } - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_80192110; - void func_80183D28(short *a0) { - *(short *)((char *)a0 + 2) = 0x7; - func_80178CBC((s32 *)a0, (s32)&D_80192110); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183D54); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183DB8); - -extern void func_8014AD7C(s32 arg); - void func_80183DEC(void) { - func_8014AD7C(0x3C); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183E0C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183E44); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183ED4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183EF8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80183F44); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184004); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184054); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801840DC); - -extern void func_801849B8(s32 *a0, s32 a1); - extern short D_80192160; - void func_801841B8(short *param_1) { - *(short *)((char *)param_1 + 0x2) = 2; - func_801849B8((s32 *)param_1, (s32)&D_80192160); - } - - - -extern void (*D_801921D8[])(void); - -void func_801841E4(void *a0) { - D_801921D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 arg0, s32 arg1); - extern short D_801921A0; - void func_80184220(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801921A0); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018424C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184284); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801842C4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184310); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184360); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801843E0); - - -void func_8018449C(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - - -void func_801844AC(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801844BC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184558); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184584); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801845B0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801845DC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184660); - -extern s32 func_80184660(s32 arg); - extern void func_801847C4(void *a0); - void func_80184790(void *a0) { - *(s32 *)((u8 *)a0 + 0xe0) = func_80184660((s32)a0); - func_801847C4(a0); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801847C4); - - -extern short D_800BA2BA; - s32 func_80184804(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801B86DC[])(void); - -void func_8018482C(void *a0) { - D_801B86DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184868(void) { -} - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184870); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801848AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801848D0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184928); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184990); - -void func_801849B0(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801849B8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184A00); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184A5C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184AD0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184B44); - -extern s32 func_80029504(void); -extern void func_80029514(s32 arg); - -void func_80184BA0(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184BD4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184CA4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184E6C); - - -extern void (*D_801B86FC[])(void); - -void func_80184EB4(void *a0) { - D_801B86FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184EF0(void) { -} - -void func_80184EF8(void) { -} - -void func_80184F00(void) { -} - -void func_80184F08(void) { -} - -void func_80184F10(void) { -} - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184F18); - -void func_80184F5C(void) { -} - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184F64); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80184FEC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801851C4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185364); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801853E0); - -extern s32 func_80185BEC(void); - void func_801854AC(void) { - func_80185BEC(); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801854CC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018559C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185604); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185678); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801856D8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185758); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801857B0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185810); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185858); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801858A8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801858E0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018596C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185A10); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185A70); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185BEC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185C20); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185C54); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185CB8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185D2C); - - -extern void (*D_801B89F8[])(void); - -void func_80185D84(void *a0) { - D_801B89F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185DC0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185E3C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185F5C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80185FA8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801860B4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80186110); - -extern s16 D_801ECE90; - s32 func_80186150(void) { - return D_801ECE90; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80186160); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801861AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018621C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80186270); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80186B24); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801874B0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801875E8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80187DEC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80188128); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80188478); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_801886B8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80188884); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80188B1C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80188F14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189240); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189ADC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189B14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189B54); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189BA0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189DB4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189E68); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189ED0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189F24); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_80189FE0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018A3C8); - - -extern void (*D_801E67B0[])(void); - -void func_8018A440(void *a0) { - D_801E67B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018A47C); - - -extern void (*D_801E67DC[])(void); - -void func_8018A598(void *a0) { - D_801E67DC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E67E4[])(void); - -void func_8018A5D4(void *a0) { - D_801E67E4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E67F4[])(void); - -void func_8018A610(void *a0) { - D_801E67F4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801E6804[])(void); - -void func_8018A64C(void *a0) { - D_801E6804[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018A688(void) { -} - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018A690); - - -extern void (*D_801E6814[])(void); - -void func_8018A83C(void *a0) { - D_801E6814[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018A878); - -extern s32 D_801E64B0; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018A9D4(void) { - D_801ED7E0 = &D_801E64B0; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E64E8; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA08(void) { - D_801ED7E0 = &D_801E64E8; - func_80189E68(0x474, 0x4EC); -} - - - -extern s32 D_801E6520; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA3C(void) { - D_801ED7E0 = &D_801E6520; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6548; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AA70(void) { - D_801ED7E0 = &D_801E6548; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6580; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AAA4(void) { - D_801ED7E0 = &D_801E6580; - func_80189E68(0x474, 0x528); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AAD8); - - -extern s32 D_801E65F8; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AB4C(void) { - D_801ED7E0 = &D_801E65F8; - func_80189E68(0x474, 0x1A4); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AB80); - -extern s32 D_801E6650; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018ABCC(void) { - D_801ED7E0 = &D_801E6650; - func_80189E68(0x12C, 0x1A4); -} - - - -extern s32 D_801E66A0; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AC00(void) { - D_801ED7E0 = &D_801E66A0; - func_80189E68(0x474, 0x4B0); -} - - - -extern s32 D_801E6700; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018AC34(void) { - D_801ED7E0 = &D_801E6700; - func_80189E68(0x474, 0x4B0); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AC68); - - -extern s32 D_801E6748; -extern s32 D_801ED7E0; -extern void func_80189E68(s32 arg0, s32 arg1); - -void func_8018ACB4(void) { - D_801ED7E0 = &D_801E6748; - func_80189E68(0x564, 0x1A4); -} - - - -s32 func_8018ACE8(void) { - return -1; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018ACF0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018ADAC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AE58); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AE9C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018AFB8); - - -extern void func_8012B414(int a0); - void func_8018B054(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B088); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B100); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B148); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B1EC); - -void func_8018B264(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E682C[])(void); - -void func_8018B270(void *a0) { - D_801E682C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B2AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B314); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B360); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B3A0); - -void func_8018B3E8(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E6840[])(void); - -void func_8018B3F4(void *a0) { - D_801E6840[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B430); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B498); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B4FC); - -void func_8018B568(void *a0) { - M2C_FIELD(a0, s16 *, 0x2) = 2; - } - - - -extern void (*D_801E6854[])(void); - -void func_8018B574(void *a0) { - D_801E6854[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B5B0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B604); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B648); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B688); - -void func_8018B6D0(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x2; - } - - - -extern void (*D_801E6868[])(void); - -void func_8018B6DC(void *a0) { - D_801E6868[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B718); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B780); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B7E4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B850); - - -extern void (*D_801E6874[])(void); - -void func_8018B93C(void *a0) { - D_801E6874[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B978); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018B9DC); - - -extern void (*D_801E687C[])(void); - -void func_8018BA58(void *a0) { - D_801E687C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_8018BA94(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BAA4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BAE0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BB0C); - - -extern void (*D_801E6950[])(void); - -void func_8018BB38(void *a0) { - D_801E6950[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BB74); - -extern s32 func_8014CB1C(void); - s32 func_8018BBE8(void) { - return func_8014CB1C() != 0; - } - - -extern void func_8014B2A8(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8018BC08(void) { - func_8014B2A8(); - ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BC34); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BC64); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BCCC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BD38); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BDB0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BE14); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BEE0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BF4C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018BF78); - - -extern void (*D_801E6A3C[])(void); - -void func_8018C068(void *a0) { - D_801E6A3C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801E69CC; - void func_8018C0A4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801E69CC); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C0D0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C0F0); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C194); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C218); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C2AC); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C2FC); - -extern void func_8012B2CC(s32 arg); - void func_8018C360(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -extern void func_8012B2CC(s32 arg0); - void func_8018C390(u8 *param_1) { - s32 p; - *(short *)(param_1 + 0x2) = 4; - p = *(s32 *)(param_1 + 0x20); - *(short *)(p + 0x12) = 0x600; - func_8012B2CC((s32)param_1); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C3C0); - - -extern void (*D_801E9920[])(void); - -void func_8018C530(void *a0) { - D_801E9920[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C56C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C5E8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C658); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8018C670(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C694); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C7C8); - -void func_8018C830(void) { -} - -void func_8018C838(void) { -} - - -extern void (*D_801E9A58[])(void); - -void func_8018C840(void *a0) { - D_801E9A58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C87C); - -void func_8018C8E0(void) { -} - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C8E8); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C934); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018C974); - - -extern void (*D_801E9B20[])(void); - -void func_8018C9D0(void *a0) { - D_801E9B20[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801E9B00[]; - -void func_8018CA0C(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801E9B00[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801E9B00)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801E9B00[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801E9B34[])(void); - -void func_8018CAD0(void *a0) { - D_801E9B34[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_8018CA0C(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_8018CB0C(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_8018CA0C(param_1, -0x80); - func_8018CA0C(param_1, -0x30); - func_8018CA0C(param_1, 0x20); - func_8018CA0C(param_1, 0x70); - func_8018CA0C(param_1, 0xc0); - } - if (1 < uVar1) { - func_8018CA0C(param_1, -0x58); - func_8018CA0C(param_1, -0x8); - func_8018CA0C(param_1, 0x48); - func_8018CA0C(param_1, 0x98); - func_8018CA0C(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_8018CA0C(s32, s32); - -void func_8018CBF4(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_8018CA0C(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801E9B28; - -void func_8018CC34(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801E9B28, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_8018CCBC(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018CD04); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801734BC", func_8018CDB0); - diff --git a/src/ov_SC05_017/ov_SC05_017_jr_80178D40.c b/src/ov_SC05_017/ov_SC05_017_jr_80178D40.c new file mode 100644 index 000000000..5ff19d498 --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_80178D40.c @@ -0,0 +1,6010 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801903C0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801EBE70; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801903B4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801903F8[]; +extern unsigned short D_80190400[]; +extern unsigned short D_80190408[]; +extern unsigned char D_801EBE78[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801EBE70; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80190410[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801EBFAC; +extern M2C_UNK D_801EBFB0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801EBF38; +extern void (*D_80190440[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801EBFB4[]; +extern u8 D_801EBFBC[]; +extern u8 D_801EBF6C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190448[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80190464[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8019046C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801904D4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80190478; +extern u8 D_80190484; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190508[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80190510[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80190564[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80190598[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80190588[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801905B4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8019062C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190634[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8019063C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190644[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8019064C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190654[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80190660[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8019066C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80190678[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80190688[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80190698[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801906A0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801906A8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801906B0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801906B8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801906C0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801906C8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801906D0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801906D8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801906E0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801906E8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801906F0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801906F8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80190700[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190708[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80190710[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190718[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80190720[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190728[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80190730[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190738[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80190740[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190748[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8019078C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80190750; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801907BC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801907F8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80190850[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80190860[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80190868[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801909D0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801909DC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801EB0E8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801ED910; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801EC6F0; +extern short D_801ED984; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801ED984) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801ED984)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801EC6F0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801ED984) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801ED8C8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801ED8C8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801ED984) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801ED984) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801ECB4C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801EC6F4; + extern s32 D_801ECB08; + extern s16 D_801ECB0C; + extern s16 D_801ECB10; + extern s16 D_801ECB14; + extern s16 D_801ECB18; + extern s32 D_801ECB20; + extern s32 D_801ECB24; + extern s32 D_801ECB34; + extern s16 D_801ECB38; + extern s16 D_801ECB3C; + extern s32 D_801ECB40; + extern s32 D_801ECB48; + extern s32 D_801ECB4C[10]; + extern s32 D_801ED7F8; + extern s16 D_801ED8C8; + extern s32 D_801ED90C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801ED8C8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801ECB08); + D_801ECB08 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ECB14, D_801ECB18 ? 0x48 : 0x40); + (*(s16*)&D_801ED984) = 2; + break; + case 0: + func_80179B28(D_801ECB08); + D_801ECB08 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ECB0C, D_801ECB10 ? 0x48 : 0x40); + (*(s16*)&D_801ED984) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801ED7F8 != 0) { + func_80179B28(D_801ECB08); + D_801ECB08 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801ECB0C, D_801ECB10 ? 0x48 : 0x40); + (*(s16*)&D_801ED984) = 1; + } else { + (*(s16*)&D_801ED984) = 3; + } + break; + case 0x32: + func_80179B28(D_801ECB08); + D_801ECB08 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801ECB0C, + D_801ECB10 ? 0x48 : 0x40); + (*(s16*)&D_801ED984) = 1; + break; + case 2: + func_80179B28(D_801ECB08); + if (D_801ECB20 != 0) { + D_801EC6F0 = D_801ECB20; + D_801ECB20 = 0; + (*(s16*)&D_801ED984) = 3; + return; + } + (*(s16*)&D_801ED984) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801ED984) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801ED984) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ED984) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801ED984) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ED984) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801ED984) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ED984) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ED984) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801ED984) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801ED984) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801ED984) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x1B: + D_801ECB40 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801ED984) = 4; + D_801EC6F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801ED984) = 5; + D_801ECB34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801ECB34 = (s32)func_8017A3B0; + (*(s16*)&D_801ED984) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x24: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ED984) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ED984) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801ED984) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ED984) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ED984) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ED984) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ED984) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ED984) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801ED984) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ECB24); + (*(s16*)&D_801ED984) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ECB24); + (*(s16*)&D_801ED984) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ECB24); + (*(s16*)&D_801ED984) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ECB24); + (*(s16*)&D_801ED984) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + break; + case 0x4E: + D_801ECB48 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x2B: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801ED984) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801ED90C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801ED984) = 3; + break; + case 0x34: + (*(s16*)&D_801ED984) = 3; + D_801EC6F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801ECB20 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801ED984) = 3; + D_801EC6F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801ED984) = 3; + D_801EC6F0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801EC6F0 = *(s32 *)(D_801EC6F0 + 4); + return; + case 0x37: + (*(s16*)&D_801ED984) = 3; + D_801ECB0C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ECB10 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801ED984) = 3; + D_801ECB14 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ECB18 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801ED984) = 3; + D_801ECB0C = w1; + D_801ECB10 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801ED984) = 3; + D_801ECB14 = w2; + D_801ECB18 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + case 0x43: + D_801ECB34 = (s32)func_8017A3D8; + D_801ECB3C = 0; + (*(s16*)&D_801ED984) = 5; + D_801ECB38 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ED984) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ED984) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ED984) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801ECB4C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801ED984) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801ECB4C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801ED984) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801ECB4C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801ED984) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801ECB4C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801ED984) = 3; + break; + default: + break; + } +Lend: + D_801EC6F0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ECB1C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801ECB1C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ECB1C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801ECB1C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801ECB44; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801ECB44 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801ECB00; + +s32 func_8017A3B0(void) { + switch (D_801ECB00) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801ECB3C; +extern short D_801ECB38; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801ECB3C) { + case 0: + func_800D0CA0(1); + D_801ECB3C = D_801ECB3C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801ECB38; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801ECB3C = D_801ECB3C + 1; + if (D_801ECB3C < 0x1E) { + return 0; + } + D_801ECB3C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801ECB7C; + extern s16 D_801ECB7E; + extern s16 D_801ECB80; + extern s16 D_801ECB74; + extern s16 D_801ECB76; + extern s16 D_801ECB78; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ECB7C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ECB7E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ECB80, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ECB74, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ECB76, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ECB78, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801ECB04; +extern u16 D_801ECB84; +extern u16 D_801ECB86; +extern u16 D_801ECB88; +extern s16 D_801ED910; + +void func_8017B1D8(void) { + func_8012A418(); + D_801ED910 = 0; + D_801ECB04 = 0; + D_801ECB84 = D_80126B5E; + D_801ECB86 = D_80126B62; + D_801ECB88 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B18[]; + extern s16 D_801ECB7C; + extern s16 D_801ECB74; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B18[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B18[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ECB7C; + s16 *p78C = &D_801ECB74; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801ED910 = 1; + D_801ECB04 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801ECB24; + extern SV4_8017B368 D_801ECB2C; + extern s16 D_801ECB7C; + extern s16 D_801ECB74; + extern u16 D_80190B18; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801ECB24; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801ECB2C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190B18)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190B18)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801ECB7C) = loc0; + (*(SV4_8017B368 *)&D_801ECB74) = loc1; + D_801ED910 = 1; + D_801ECB04 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190B18[]; + extern s16 D_801ECB7C; + extern s16 D_801ECB7E; + extern s16 D_801ECB80; + extern s16 D_801ECB74; + extern s16 D_801ECB76; + extern s16 D_801ECB78; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190B18[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190B18[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ECB7C; + s16 *p78C = &D_801ECB74; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801ECB7E; + v798 = D_801ECB80; + v78C = *p78C; + v78E = D_801ECB76; + v790 = D_801ECB78; + __asm__ __volatile__(""); + D_801ED910 = 1; + D_801ECB04 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ECB04; +extern s16 D_801ECB7C; +extern s16 D_801ECB7E; +extern s16 D_801ECB80; +extern s16 D_801ECB74; +extern s16 D_801ECB76; +extern s16 D_801ECB78; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801ECB04 = 0; + D_801ECB7C = (s16) D_80114F30; + D_801ECB7E = (s16) D_80114F34; + D_801ECB80 = (s16) D_80114F38; + D_801ECB74 = (s16) D_80114F24; + D_801ECB76 = (s16) D_80114F28; + D_801ECB78 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801ECB94; +extern s16 D_801ECB96; +extern s16 D_801ECB98; +extern s16 D_801ECB9C; +extern s16 D_801ECB9E; +extern s16 D_801ECBA0; + +void func_8017B824(void) { + D_801ECB94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801ECB96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801ECB98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801ECB9C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801ECB9E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801ECBA0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801ECB94; +extern s16 D_801ECB96; +extern s16 D_801ECB98; +extern s16 D_801ECB9C; +extern s16 D_801ECB9E; +extern s16 D_801ECBA0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801ECB94; + D_80114F34 = D_801ECB96; + D_80114F38 = D_801ECB98; + D_80114F24 = D_801ECB9C; + D_80114F28 = D_801ECB9E; + D_80114F2C = D_801ECBA0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801ECB7C), src[8..15] -> (*(S8_8017B8E8 *)&D_801ECB74) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801ECB7C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801ECB74) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801ECB84; +extern u16 D_801ECB86; +extern u16 D_801ECB88; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ECB04; +extern short D_801ECB8C; +extern short D_801ECB8E; +extern short D_801ECB90; +extern s16 D_801ECB7C; +extern s16 D_801ECB7E; +extern s16 D_801ECB80; +extern s16 D_801ECB74; +extern s16 D_801ECB76; +extern s16 D_801ECB78; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ECB84); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ECB86); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ECB88); + (*(s16 *)&D_801ECB8C) = buf[0]; + (*(s16 *)&D_801ECB8E) = buf[1]; + (*(s16 *)&D_801ECB90) = buf[2]; + D_801ECB7C = D_80114F30 + buf[0]; + D_801ECB04 = 0; + D_801ECB7E = D_80114F34 + buf[1]; + D_801ECB80 = D_80114F38 + buf[2]; + D_801ECB74 = D_80114F24 + buf[0]; + D_801ECB76 = D_80114F28 + buf[1]; + D_801ECB78 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801ECB24; +extern SV4 D_801ECB2C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ECB2C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801ECB24 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801ECB2C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ECB2C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801ECB24) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801ECB2C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801ECB4C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801ECB4C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801ECB04; +extern s16 D_801ED910; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801ECB04 = D_801ECB04 + 1; + if (D_801ECB04 >= 0x1F) { + D_801ED910 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801ECB04; +extern s16 D_801ED910; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ECB04 = D_801ECB04 + 1; + if (0x18 < D_801ECB04) { + func_8012A4BC(); + D_801ED910 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801ECB04; +extern void (*D_801ECB48)(void); +extern short D_801ECB8C; +extern short D_801ECB8E; +extern short D_801ECB90; +extern s16 D_801ED910; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ECB04 = D_801ECB04 + 1; + if (D_801ECB04 >= 0x19) { + if (D_801ECB48 != 0) { + (*D_801ECB48)(); + } else { + D_80114F30 = D_80114F30 + D_801ECB8C; + D_80114F34 = D_80114F34 + D_801ECB8E; + D_80114F38 = D_80114F38 + D_801ECB90; + D_80114F24 = D_80114F24 + D_801ECB8C; + D_80114F28 = D_80114F28 + D_801ECB8E; + D_80114F2C = D_80114F2C + D_801ECB90; + func_8012A4BC(); + } + D_801ED910 = 0; + } +} + + + +extern void (*D_80190BB8[])(void); + +void func_8017BE60(void *a0) { + D_80190BB8[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_80190C58[])(void); + +void func_8017BE9C(void *a0) { + D_80190C58[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190C60[])(void); + +void func_8017BED8(void *a0) { + D_80190C60[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190C68[])(void); + +void func_8017BF14(void *a0) { + D_80190C68[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017BF50); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C094); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C100); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C1AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C1EC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C2B0); + + +extern void (*D_80190C88[])(void); + +void func_8017C338(void *a0) { + D_80190C88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C374); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C538); + + +extern void (*D_80190C90[])(void); + +void func_8017C5CC(void *a0) { + D_80190C90[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80190C7C; + +void func_8017C608(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80190C7C, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C6AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017C710); + + +extern void (*D_80190CA8[])(void); + +void func_8017D5F0(void *a0) { + D_80190CA8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80190C98; + +void func_8017D62C(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80190C98 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +DEFINE_func_8017D6A8() /* dedup: shared engine-core @0x8017D6A8 (src/shared) */ + + +extern void (*D_80190CE0[])(void); + +void func_8017D6B0(void *a0) { + D_80190CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017D6EC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017D77C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017D9B8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DA08); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DAC4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DBDC); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801ECE40; +extern u16 D_80190CE8[]; +extern u16 D_801ECE44[]; +extern s32 D_80190D08; + +extern void func_800183E0(s32 a0); + +void func_8017DC0C(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80190CE8; + base = D_801ECE40 >> 8; + p = D_801ECE44; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80190D08); + D_801ECE40 = D_801ECE40 + 0x100; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DC98); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017DCE8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DD0C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DE2C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DE4C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017DEA0); + + +extern void (*D_80190D28[])(void); + +void func_8017DF4C(void *a0) { + D_80190D28[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D30[])(void); + +void func_8017DF88(void *a0) { + D_80190D30[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D3C[])(void); + +void func_8017DFC4(void *a0) { + D_80190D3C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80190D48[])(void); + +void func_8017E000(void *a0) { + D_80190D48[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017E03C(void) { + D_80127050 = 1; + } + + + +extern void (*D_80190FFC[])(void); + +void func_8017E050(void *a0) { + D_80190FFC[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E08C(u8 *a0) { + *(s8 *)(a0 + 0x214) = *(u8 *)(a0 + 0x214) + 1; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E0A0); + + +extern void (*D_80191004[])(void); + +void func_8017E0D8(void *a0) { + D_80191004[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017E114(void *a0) { + *(s8 *)((s32)a0 + 0x214) += 1; + } + + +extern void func_8016F0E4(void); + void func_8017E128(void) { + func_8016F0E4(); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E148); + + +extern void (*D_8019100C[])(void); + +void func_8017E20C(void *a0) { + D_8019100C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E248); + +void func_8017E27C(u8 *a0) { + *(s8 *)(a0 + 0xA0) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E284); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E3C4); + + +extern void (*D_80191158[])(void); + +void func_8017E5B8(void *a0) { + D_80191158[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E5F4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E614); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E6D8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E7EC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E85C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E8CC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017E92C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EA6C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EAE0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EB30); + + +extern void (*D_801912B8[])(void); + +void func_8017ED1C(void *a0) { + D_801912B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017ED58); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017ED94); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_8017EDD4(void) { + if ((func_80029178(0x110) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EE10); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EEC8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EF20); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EF78); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017EFFC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F04C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F0C0); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_8017F174(void) { + func_80029124(0x110, 1); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F198); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F274); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F308); + +extern void func_801849B8(s32 *a0, s32 a1); + extern short D_801912E8; + void func_8017F398(short *a0) { + *(short *)((char *)a0 + 0x2) = 2; + func_801849B8((s32 *)a0, (s32)&D_801912E8); + } + + + +extern void (*D_80191350[])(void); + +void func_8017F3C4(void *a0) { + D_80191350[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern short D_80191318; + +void func_8017F400(short *param) { + param[1] = 4; + func_80178CBC((int)param, (int)&D_80191318); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F42C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F46C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F4C8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F53C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F58C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F650); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F6C8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F73C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F794); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F81C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F848); + + +extern void (*D_801913FC[])(void); + +void func_8017F98C(void *a0) { + D_801913FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017F9C8); + +extern void func_80178CBC(s32 arg0, s32 arg1); +extern short D_8019139C; + +void func_8017FA2C(void *arg0) { + *(short *)((char *)arg0 + 0x2) = 0x7; + ((void (*)(s32 *, s32))func_80178CBC)(arg0, &D_8019139C); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FA58); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FA98); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FB10); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FC00); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FCA0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FD34); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FDB8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FE28); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FEBC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FF6C); + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801913D4; + void func_8017FFBC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 11; + func_80178CBC((int)arg0, (int)&D_801913D4); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8017FFE8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180048); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801800BC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180124); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180188); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801801B4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180240); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018026C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801802B8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801803D8); + + +extern void (*D_80191504[])(void); + +void func_801804F0(void *a0) { + D_80191504[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018052C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018058C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801805CC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801805F0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180664); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801806BC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180748); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180788); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180894); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801808D4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801809E0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180A20); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180A94); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180AEC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180BA8); + +extern void func_801849B8(s32 *a0, s32 a1); + extern short D_80191530; + void func_80180C30(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + func_801849B8((s32 *)a0, (s32)&D_80191530); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180C5C); + + +extern void (*D_8019187C[])(void); + +void func_80180DA4(void *a0) { + D_8019187C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180DE0); + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191568; + void func_80180ED0(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x7; + func_80178CBC((s32 *)a0, (s32)&D_80191568); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180EFC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180F3C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80180FB4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801810A4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181144); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801811D8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181268); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801812D8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181364); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181414); + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191840; + void func_80181464(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 11; + func_80178CBC((int)arg0, (int)&D_80191840); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181490); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801814F0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181564); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801815BC); + + +extern void (*D_80191990[])(void); + +void func_80181630(void *a0) { + D_80191990[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018166C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801816CC); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_801816DC(void) { + if ((func_80029178(0x113) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181718); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181758); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801817F0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181830); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801818A0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018193C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181A4C); + +extern void func_801849B8(s32 *a0, s32 a1); + extern short D_801919AC; + void func_80181B04(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + func_801849B8((s32 *)a0, (s32)&D_801919AC); + } + + + +extern void (*D_80191AA4[])(void); + +void func_80181B30(void *a0) { + D_80191AA4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191A54; + void func_80181B6C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80191A54); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181B98); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181BD8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181C1C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181C60); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181CA4); + + +void func_80181CF0(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181D00); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181D50); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181E0C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181F00); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181F60); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80181FC0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182034); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182084); + + +extern void (*D_80191C18[])(void); + +void func_80182234(void *a0) { + D_80191C18[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191B18; + void func_80182270(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 5; + func_80178CBC((int)arg0, (int)&D_80191B18); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018229C); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_801822DC(void) { + if ((func_80029178(0x115) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x115, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182318); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801823D0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182410); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182448); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801824AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801824FC); + +extern void func_80029124(s32 arg0, s32 arg1); + void func_80182540(void) { + func_80029124(0x115, 1); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182564); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018268C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182750); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801827E4); + +extern void func_801849B8(s32 *a0, s32 a1); + extern short D_80191C44; + void func_80182874(short *param_1) { + *(short *)((char *)param_1 + 2) = 1; + ((void (*)(int, int))func_801849B8)((int)param_1, &D_80191C44); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801828A0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801828EC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182A28); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182A74); + + +extern void (*D_80191E84[])(void); + +void func_80182BB0(void *a0) { + D_80191E84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182BEC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182C2C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182C6C); + + +extern s32 func_80029178(s32 arg); + extern void func_80029124(s32, s32); + s32 func_80182CAC(void) { + if ((func_80029178(0x116) & 0xFF) == 0) { + ((void (*)(void *, s32))func_80029124)((void *)0x116, 1); + return 1; + } + return 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182CE8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182D0C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182D3C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182D6C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182D9C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182DCC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182E18); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182E68); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182EB4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182F04); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182F50); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80182FA8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183004); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018305C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183100); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801831C8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801832C4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183328); + + +extern void (*D_80191F98[])(void); + +void func_80183380(void *a0) { + D_80191F98[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80191F38; + void func_801833BC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_80191F38); + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191F70; + void func_801833E8(short *param) { + param[1] = 0x7; + func_80178CBC((int)param, (int)&D_80191F70); + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191F70; + void func_80183414(short *param) { + param[1] = 0xD; + func_80178CBC((int)param, (int)&D_80191F70); + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80191F70; + void func_80183440(short *param) { + param[1] = 0xA; + func_80178CBC((int)param, (int)&D_80191F70); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018346C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801834A4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801834F8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183558); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801835FC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801836A4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183724); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183774); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801837D4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183830); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801838A0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183980); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801839AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183A08); + + +extern void (*D_80192140[])(void); + +void func_80183CC0(void *a0) { + D_80192140[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801920BC; + void func_80183CFC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801920BC); + } + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_80192110; + void func_80183D28(short *a0) { + *(short *)((char *)a0 + 2) = 0x7; + func_80178CBC((s32 *)a0, (s32)&D_80192110); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183D54); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183DB8); + +extern void func_8014AD7C(s32 arg); + void func_80183DEC(void) { + func_8014AD7C(0x3C); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183E0C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183E44); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183ED4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183EF8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80183F44); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184004); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184054); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801840DC); + +extern void func_801849B8(s32 *a0, s32 a1); + extern short D_80192160; + void func_801841B8(short *param_1) { + *(short *)((char *)param_1 + 0x2) = 2; + func_801849B8((s32 *)param_1, (s32)&D_80192160); + } + + + +extern void (*D_801921D8[])(void); + +void func_801841E4(void *a0) { + D_801921D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_80178CBC(s32 arg0, s32 arg1); + extern short D_801921A0; + void func_80184220(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + ((void (*)(s32 *, s32))func_80178CBC)((s32 *)a0, (s32)&D_801921A0); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018424C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184284); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801842C4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184310); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184360); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801843E0); + + +void func_8018449C(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + + +void func_801844AC(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801844BC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184558); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184584); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801845B0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801845DC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184660); + +extern s32 func_80184660(s32 arg); + extern void func_801847C4(void *a0); + void func_80184790(void *a0) { + *(s32 *)((u8 *)a0 + 0xe0) = func_80184660((s32)a0); + func_801847C4(a0); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801847C4); + + +extern short D_800BA2BA; + s32 func_80184804(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801B86DC[])(void); + +void func_8018482C(void *a0) { + D_801B86DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184868(void) { +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184870); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801848AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801848D0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184928); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184990); + +void func_801849B0(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801849B8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184A00); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184A5C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184AD0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184B44); + +extern s32 func_80029504(void); +extern void func_80029514(s32 arg); + +void func_80184BA0(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184BD4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184CA4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184E6C); + + +extern void (*D_801B86FC[])(void); + +void func_80184EB4(void *a0) { + D_801B86FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184EF0(void) { +} + +void func_80184EF8(void) { +} + +void func_80184F00(void) { +} + +void func_80184F08(void) { +} + +void func_80184F10(void) { +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184F18); + +void func_80184F5C(void) { +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184F64); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80184FEC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801851C4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185364); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801853E0); + +extern s32 func_80185BEC(void); + void func_801854AC(void) { + func_80185BEC(); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801854CC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018559C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185604); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185678); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801856D8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185758); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801857B0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185810); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185858); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801858A8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801858E0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018596C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185A10); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185A70); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185BEC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185C20); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185C54); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185CB8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185D2C); + + +extern void (*D_801B89F8[])(void); + +void func_80185D84(void *a0) { + D_801B89F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185DC0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185E3C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185F5C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80185FA8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801860B4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80186110); + +extern s16 D_801ECE90; + s32 func_80186150(void) { + return D_801ECE90; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80186160); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801861AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018621C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80186270); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80186B24); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801874B0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801875E8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80187DEC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80188128); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80188478); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_801886B8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80188884); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80188B1C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80188F14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189240); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189ADC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189B14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189B54); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189BA0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189DB4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189E68); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189ED0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189F24); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_80189FE0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018A3C8); + + +extern void (*D_801E67B0[])(void); + +void func_8018A440(void *a0) { + D_801E67B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018A47C); + + +extern void (*D_801E67DC[])(void); + +void func_8018A598(void *a0) { + D_801E67DC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E67E4[])(void); + +void func_8018A5D4(void *a0) { + D_801E67E4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E67F4[])(void); + +void func_8018A610(void *a0) { + D_801E67F4[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801E6804[])(void); + +void func_8018A64C(void *a0) { + D_801E6804[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018A688(void) { +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018A690); + + +extern void (*D_801E6814[])(void); + +void func_8018A83C(void *a0) { + D_801E6814[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018A878); + +extern s32 D_801E64B0; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018A9D4(void) { + D_801ED7E0 = &D_801E64B0; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E64E8; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA08(void) { + D_801ED7E0 = &D_801E64E8; + func_80189E68(0x474, 0x4EC); +} + + + +extern s32 D_801E6520; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA3C(void) { + D_801ED7E0 = &D_801E6520; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6548; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AA70(void) { + D_801ED7E0 = &D_801E6548; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6580; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AAA4(void) { + D_801ED7E0 = &D_801E6580; + func_80189E68(0x474, 0x528); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AAD8); + + +extern s32 D_801E65F8; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AB4C(void) { + D_801ED7E0 = &D_801E65F8; + func_80189E68(0x474, 0x1A4); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AB80); + +extern s32 D_801E6650; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018ABCC(void) { + D_801ED7E0 = &D_801E6650; + func_80189E68(0x12C, 0x1A4); +} + + + +extern s32 D_801E66A0; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AC00(void) { + D_801ED7E0 = &D_801E66A0; + func_80189E68(0x474, 0x4B0); +} + + + +extern s32 D_801E6700; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018AC34(void) { + D_801ED7E0 = &D_801E6700; + func_80189E68(0x474, 0x4B0); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AC68); + + +extern s32 D_801E6748; +extern s32 D_801ED7E0; +extern void func_80189E68(s32 arg0, s32 arg1); + +void func_8018ACB4(void) { + D_801ED7E0 = &D_801E6748; + func_80189E68(0x564, 0x1A4); +} + + + +s32 func_8018ACE8(void) { + return -1; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018ACF0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018ADAC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AE58); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AE9C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018AFB8); + + +extern void func_8012B414(int a0); + void func_8018B054(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(s16 *)(temp_v1 + 0x14) += 0x8; + ((void (*)(void))func_8012B414)(); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B088); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B100); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B148); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B1EC); + +void func_8018B264(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E682C[])(void); + +void func_8018B270(void *a0) { + D_801E682C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B2AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B314); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B360); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B3A0); + +void func_8018B3E8(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E6840[])(void); + +void func_8018B3F4(void *a0) { + D_801E6840[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B430); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B498); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B4FC); + +void func_8018B568(void *a0) { + M2C_FIELD(a0, s16 *, 0x2) = 2; + } + + + +extern void (*D_801E6854[])(void); + +void func_8018B574(void *a0) { + D_801E6854[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B5B0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B604); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B648); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B688); + +void func_8018B6D0(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x2; + } + + + +extern void (*D_801E6868[])(void); + +void func_8018B6DC(void *a0) { + D_801E6868[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B718); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B780); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B7E4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B850); + + +extern void (*D_801E6874[])(void); + +void func_8018B93C(void *a0) { + D_801E6874[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B978); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018B9DC); + + +extern void (*D_801E687C[])(void); + +void func_8018BA58(void *a0) { + D_801E687C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +void func_8018BA94(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BAA4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BAE0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BB0C); + + +extern void (*D_801E6950[])(void); + +void func_8018BB38(void *a0) { + D_801E6950[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BB74); + +extern s32 func_8014CB1C(void); + s32 func_8018BBE8(void) { + return func_8014CB1C() != 0; + } + + +extern void func_8014B2A8(void); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_8018BC08(void) { + func_8014B2A8(); + ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BC34); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BC64); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BCCC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BD38); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BDB0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BE14); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BEE0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BF4C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018BF78); + + +extern void (*D_801E6A3C[])(void); + +void func_8018C068(void *a0) { + D_801E6A3C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801E69CC; + void func_8018C0A4(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801E69CC); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C0D0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C0F0); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C194); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C218); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C2AC); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C2FC); + +extern void func_8012B2CC(s32 arg); + void func_8018C360(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +extern void func_8012B2CC(s32 arg0); + void func_8018C390(u8 *param_1) { + s32 p; + *(short *)(param_1 + 0x2) = 4; + p = *(s32 *)(param_1 + 0x20); + *(short *)(p + 0x12) = 0x600; + func_8012B2CC((s32)param_1); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C3C0); + + +extern void (*D_801E9920[])(void); + +void func_8018C530(void *a0) { + D_801E9920[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C56C); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C5E8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C658); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8018C670(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C694); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C7C8); + +void func_8018C830(void) { +} + +void func_8018C838(void) { +} + + +extern void (*D_801E9A58[])(void); + +void func_8018C840(void *a0) { + D_801E9A58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C87C); + +void func_8018C8E0(void) { +} + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C8E8); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C934); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018C974); + + +extern void (*D_801E9B20[])(void); + +void func_8018C9D0(void *a0) { + D_801E9B20[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801E9B00[]; + +void func_8018CA0C(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801E9B00[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801E9B00)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801E9B00[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801E9B34[])(void); + +void func_8018CAD0(void *a0) { + D_801E9B34[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_8018CA0C(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_8018CB0C(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_8018CA0C(param_1, -0x80); + func_8018CA0C(param_1, -0x30); + func_8018CA0C(param_1, 0x20); + func_8018CA0C(param_1, 0x70); + func_8018CA0C(param_1, 0xc0); + } + if (1 < uVar1) { + func_8018CA0C(param_1, -0x58); + func_8018CA0C(param_1, -0x8); + func_8018CA0C(param_1, 0x48); + func_8018CA0C(param_1, 0x98); + func_8018CA0C(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_8018CA0C(s32, s32); + +void func_8018CBF4(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_8018CA0C(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801E9B28; + +void func_8018CC34(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801E9B28, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_8018CCBC(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018CD04); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80178D40", func_8018CDB0); + + diff --git a/src/ov_SC05_018/ov_SC05_018_jr_801734BC.c b/src/ov_SC05_018/ov_SC05_018_jr_801734BC.c index 7bde00a29..6644d60ed 100644 --- a/src/ov_SC05_018/ov_SC05_018_jr_801734BC.c +++ b/src/ov_SC05_018/ov_SC05_018_jr_801734BC.c @@ -3084,1829 +3084,3 @@ void func_80178D18(void) { D_801E688C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E625C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E625C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E625C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E625C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E6284; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E6284 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E6240; - -s32 func_8017A3B0(void) { - switch (D_801E6240) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E627C; -extern short D_801E6278; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E627C) { - case 0: - func_800D0CA0(1); - D_801E627C = D_801E627C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E6278; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E627C = D_801E627C + 1; - if (D_801E627C < 0x1E) { - return 0; - } - D_801E627C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E62BC; - extern s16 D_801E62BE; - extern s16 D_801E62C0; - extern s16 D_801E62B4; - extern s16 D_801E62B6; - extern s16 D_801E62B8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E62BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E62BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E62C0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E62B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E62B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E62B8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E6244; -extern u16 D_801E62C4; -extern u16 D_801E62C6; -extern u16 D_801E62C8; -extern s16 D_801E6818; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E6818 = 0; - D_801E6244 = 0; - D_801E62C4 = D_80126B5E; - D_801E62C6 = D_80126B62; - D_801E62C8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A274[]; - extern s16 D_801E62BC; - extern s16 D_801E62B4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A274[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A274[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E62BC; - s16 *p78C = &D_801E62B4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E6818 = 1; - D_801E6244 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E6264; - extern SV4_8017B368 D_801E626C; - extern s16 D_801E62BC; - extern s16 D_801E62B4; - extern u16 D_8018A274; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E6264; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E626C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A274)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A274)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E62BC) = loc0; - (*(SV4_8017B368 *)&D_801E62B4) = loc1; - D_801E6818 = 1; - D_801E6244 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A274[]; - extern s16 D_801E62BC; - extern s16 D_801E62BE; - extern s16 D_801E62C0; - extern s16 D_801E62B4; - extern s16 D_801E62B6; - extern s16 D_801E62B8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A274[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A274[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E62BC; - s16 *p78C = &D_801E62B4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E62BE; - v798 = D_801E62C0; - v78C = *p78C; - v78E = D_801E62B6; - v790 = D_801E62B8; - __asm__ __volatile__(""); - D_801E6818 = 1; - D_801E6244 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6244; -extern s16 D_801E62BC; -extern s16 D_801E62BE; -extern s16 D_801E62C0; -extern s16 D_801E62B4; -extern s16 D_801E62B6; -extern s16 D_801E62B8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E6244 = 0; - D_801E62BC = (s16) D_80114F30; - D_801E62BE = (s16) D_80114F34; - D_801E62C0 = (s16) D_80114F38; - D_801E62B4 = (s16) D_80114F24; - D_801E62B6 = (s16) D_80114F28; - D_801E62B8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E62D4; -extern s16 D_801E62D6; -extern s16 D_801E62D8; -extern s16 D_801E62DC; -extern s16 D_801E62DE; -extern s16 D_801E62E0; - -void func_8017B824(void) { - D_801E62D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E62D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E62D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E62DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E62DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E62E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E62D4; -extern s16 D_801E62D6; -extern s16 D_801E62D8; -extern s16 D_801E62DC; -extern s16 D_801E62DE; -extern s16 D_801E62E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E62D4; - D_80114F34 = D_801E62D6; - D_80114F38 = D_801E62D8; - D_80114F24 = D_801E62DC; - D_80114F28 = D_801E62DE; - D_80114F2C = D_801E62E0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E62BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E62B4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E62BC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E62B4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E62C4; -extern u16 D_801E62C6; -extern u16 D_801E62C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E6244; -extern short D_801E62CC; -extern short D_801E62CE; -extern short D_801E62D0; -extern s16 D_801E62BC; -extern s16 D_801E62BE; -extern s16 D_801E62C0; -extern s16 D_801E62B4; -extern s16 D_801E62B6; -extern s16 D_801E62B8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E62C4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E62C6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E62C8); - (*(s16 *)&D_801E62CC) = buf[0]; - (*(s16 *)&D_801E62CE) = buf[1]; - (*(s16 *)&D_801E62D0) = buf[2]; - D_801E62BC = D_80114F30 + buf[0]; - D_801E6244 = 0; - D_801E62BE = D_80114F34 + buf[1]; - D_801E62C0 = D_80114F38 + buf[2]; - D_801E62B4 = D_80114F24 + buf[0]; - D_801E62B6 = D_80114F28 + buf[1]; - D_801E62B8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E6264; -extern SV4 D_801E626C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E626C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E6264 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E626C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E626C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E6264) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E626C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E628C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E628C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E6244; -extern s16 D_801E6818; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E6244 = D_801E6244 + 1; - if (D_801E6244 >= 0x1F) { - D_801E6818 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E6244; -extern s16 D_801E6818; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6244 = D_801E6244 + 1; - if (0x18 < D_801E6244) { - func_8012A4BC(); - D_801E6818 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E6244; -extern void (*D_801E6288)(void); -extern short D_801E62CC; -extern short D_801E62CE; -extern short D_801E62D0; -extern s16 D_801E6818; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E6244 = D_801E6244 + 1; - if (D_801E6244 >= 0x19) { - if (D_801E6288 != 0) { - (*D_801E6288)(); - } else { - D_80114F30 = D_80114F30 + D_801E62CC; - D_80114F34 = D_80114F34 + D_801E62CE; - D_80114F38 = D_80114F38 + D_801E62D0; - D_80114F24 = D_80114F24 + D_801E62CC; - D_80114F28 = D_80114F28 + D_801E62CE; - D_80114F2C = D_80114F2C + D_801E62D0; - func_8012A4BC(); - } - D_801E6818 = 0; - } -} - - - -extern void (*D_8018A314[])(void); - -void func_8017BE60(void *a0) { - D_8018A314[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017BF88); - - -extern void (*D_8018A32C[])(void); - -void func_8017C0E4(void *a0) { - D_8018A32C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C120); - - -extern void (*D_8018A3C8[])(void); - -void func_8017C180(void *a0) { - D_8018A3C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018A3D0[])(void); - -void func_8017C1BC(void *a0) { - D_8018A3D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018A3D8[])(void); - -void func_8017C1F8(void *a0) { - D_8018A3D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C234); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C378); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C3E4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C4D0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C594); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C61C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C7B8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017C9BC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017CDB0); - - -extern void (*D_8018A6B4[])(void); - -void func_8017CF30(void *a0) { - D_8018A6B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017CF6C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017CFE0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D0BC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D2D0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D474); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D5C4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017D604); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E4E4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E534(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E558); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E5C8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E678); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E698); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E770); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E7D4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E810); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E818); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017E84C); - -extern void func_800D1EBC(void); - void func_8017E8F0(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018A6D8[])(void); - -void func_8017E910(void *a0) { - D_8018A6D8[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018A6E0[])(void); - -void func_8017E94C(void *a0) { - D_8018A6E0[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018A6EC[])(void); - -void func_8017E988(void *a0) { - D_8018A6EC[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018A704[])(void); - -void func_8017E9C4(void *a0) { - D_8018A704[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8018A70C[])(void); - -void func_8017EA00(void *a0) { - D_8018A70C[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017EA3C(void) { - D_80127050 = 1; - } - - - -extern void (*D_8018A838[])(void); - -void func_8017EA50(void *a0) { - D_8018A838[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017EA8C(u8 *a0) { - *(u8 *)(a0 + 0x214) += 1; - } - - -extern void func_80175414(s32 arg0); - extern void func_8016F0E4(void); - extern void func_80165770(void); - void func_8017EAA0(s32 param_1) { - ((void (*)(void))func_80175414)(); - ((void (*)(s32))func_8016F0E4)(param_1); - ((void (*)(s32))func_80165770)(param_1); - } - - - -extern void (*D_8018A840[])(void); - -void func_8017EAD8(void *a0) { - D_8018A840[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EB14); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EB28); - -extern void (*D_8018A860[])(void); - -void func_8017EB48(void *a0) { - D_8018A860[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EB84); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EBFC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EC80); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017ECEC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017ED60); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EDD0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EF54); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EF88); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017EFE0); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018A848; - -void func_8017F038(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018A848, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F060); - - -extern void (*D_8018A8C0[])(void); - -void func_8017F080(void *a0) { - D_8018A8C0[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F0BC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F120); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F188); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F220); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F254); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F2BC); - - -extern void (*D_8018A8DC[])(void); - -void func_8017F314(void *a0) { - D_8018A8DC[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F350); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F3A8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F3E8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F448); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F4AC); - -extern void func_80181A0C(void); - extern void func_80171928(void *a0); - void func_8017F4F8(s32 arg0) { - func_80181A0C(); - ((s32 (*)(s32))func_80171928)(arg0); - } - - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018A8A8; - -void func_8017F528(void) { - func_8002D4C8(0xBE6, 0); - ((void (*)(M2C_UNK *, s32))func_8016EE40)(&D_8018A8A8, 0x1000000); -} - - - -extern void (*D_8018A900[])(void); - -void func_8017F55C(void *a0) { - D_8018A900[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F598); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F608); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F648); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F6C8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F754); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F7BC); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018A8F0; - -void func_8017F7F0(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018A8F0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F818); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017F990); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FA20); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FAE4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FB8C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FC74); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FD94); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FE44); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FED0); - -extern void (*D_8018A948[])(void); - -void func_8017FF9C(u8 *a0) { - D_8018A948[a0[0x4]](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8017FFD8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180014); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018003C); - -extern void func_80180220(s32 arg0, s32 arg1); -extern s32 D_801274E8; - -void func_801800B8(void *arg0) { - func_80180220((s32)arg0, (s32)&D_801274E8); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801800E0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180220); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180408); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801805E0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180644); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018069C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801807E8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018083C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801808AC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801809B8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180ACC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180BE0); - -extern void func_80180D04(void); - void func_80180CE4(void) { - func_80180D04(); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180D04); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180D40); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80180DBC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801810B0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181204); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018124C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181294); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801812FC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181324); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801813E8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181474); - -void func_80181518(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181520); - -extern void (*D_8018AB24[])(void); - -void func_80181570(void *a0) { - D_8018AB24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801815AC); - -extern void func_80184590(s32 arg0, s32 arg1); - void func_80181648(void) { - func_80184590(0x7, 0x16); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018166C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801816A4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181720); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181738); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181760); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181840); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801818D0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801819B0); - -extern s32 func_8012E544(s32 arg); - void func_80181A0C(void) { - s32 p = func_8012E544(0x37C); - if (p != 0) { - *(u16*)(p + 0x34) += 1; - } - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181A48); - - -extern void (*D_8018AD74[])(void); - -void func_80181B44(void *a0) { - D_8018AD74[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181B80); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181BF4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181CC4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181D88); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181DCC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181E78); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80181EEC); - -extern void func_8018469C(void *a0, s32 a1); - extern short D_8018AD84; - void func_80182018(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x4; - *(short *)((char *)a0 + 0x34) = 0; - func_8018469C(a0, &D_8018AD84); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182048); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018208C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801820E8); - - -extern void (*D_8018AE9C[])(void); - -void func_80182290(void *a0) { - D_8018AE9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801822CC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182304); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182384); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182420); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018251C); - - -extern void (*D_8018B09C[])(void); - -void func_8018258C(void *a0) { - D_8018B09C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801825C8); - -void func_80182694(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018269C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182734); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182774); - - -extern void (*D_8018B0AC[])(void); - -void func_801827E8(void *a0) { - D_8018B0AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80182824(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182844); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018290C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182BF4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182CDC); - - -extern void (*D_8018B0C4[])(void); - -void func_80182E38(void *a0) { - D_8018B0C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182E74); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182F04); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80182F78); - - -extern void (*D_8018B180[])(void); - -void func_80183018(void *a0) { - D_8018B180[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183054); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801830D8); - - -extern void (*D_8018B198[])(void); - -void func_80183138(void *a0) { - D_8018B198[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183174); - -void func_80183228(void) { -} - - -extern void (*D_8018B1D0[])(void); - -void func_80183230(void *a0) { - D_8018B1D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018326C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801832FC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183538); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183588); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183644); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018375C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801837E8); - - -extern void (*D_801A1068[])(void); - -void func_80183960(void *a0) { - D_801A1068[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801A1088[])(void); - -void func_8018399C(void *a0) { - D_801A1088[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801839D8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183A64); - - -extern s32 func_80029504(void); -extern void func_800183E0(s32 arg0); -extern char D_801A1090; - -void func_80183ABC(void) { - if (!(func_80029504() < 0x492)) { - func_800183E0((s32)&D_801A1090); - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183AF8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183B90); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183C2C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183CB8); - - -extern void (*D_801A116C[])(void); - -void func_80183DF0(void *a0) { - D_801A116C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183E2C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183EC8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183F28); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183F9C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80183FDC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018401C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801840A0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184118); - - -void func_80184180(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - } - - -void func_80184190(void *a0) { - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801841A0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018423C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184268); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184294); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801842C0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184344); - -extern s32 func_80184344(s32 arg); -extern void func_801844A8(s32 arg); - -void func_80184474(void *a0) { - *(s32 *)((char *)a0 + 0xe0) = func_80184344((s32)a0); - func_801844A8((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801844A8); - - -extern short D_800BA2BA; - s32 func_801844E8(s32 arg0) { - return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); - } - - - -extern void (*D_801E022C[])(void); - -void func_80184510(void *a0) { - D_801E022C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018454C(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184554); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184590); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801845B4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018460C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184674); - -void func_80184694(void *a0) { - *(s16 *)((s32)a0 + 0x5C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018469C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801846E4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184740); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801847B4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184828); - - -extern s32 func_80029504(void); - extern void func_80029514(s32 arg0); - void func_80184884(void) { - if (((s32 (*)(void))func_80029504)() == 0x3A2) { - ((void (*)(s32))func_80029514)(0x3AC); - } - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801848B8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184988); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184B50); - -extern void (*D_801E024C[])(void); - -void func_80184B98(void *a0) { - D_801E024C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80184BD4(void) { -} - -void func_80184BDC(void) { -} - -void func_80184BE4(void) { -} - -void func_80184BEC(void) { -} - -void func_80184BF4(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184BFC); - -void func_80184C40(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184C48); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184CD0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80184EA8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185048); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801850C4); - -extern void func_801858D0(void); - void func_80185190(void) { - func_801858D0(); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801851B0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185280); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801852E8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018535C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801853BC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018543C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185494); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801854F4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018553C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018558C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801855C4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185650); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801856F4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185754); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801858D0); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185904); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185938); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018599C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185A10); - - -extern void (*D_801E0548[])(void); - -void func_80185A68(void *a0) { - D_801E0548[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185AA4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185B20); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185C40); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185C8C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185D98); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185DF4); - - -extern void (*D_801E3460[])(void); - -void func_80185E34(void *a0) { - D_801E3460[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185E70); - -void func_80185ED4(void) { -} - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185EDC); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185F28); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80185F68); - - -extern void (*D_801E3528[])(void); - -void func_80185FC4(void *a0) { - D_801E3528[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: iv-combine -// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). -extern int rand(void); -extern u8 *func_8012913C(s32 a0); - -extern unsigned short D_801E3508[]; - -void func_80186000(s32 param_1, s32 param_2) -{ - int s3; - unsigned short s0; - int s2; - int s1; - int v0; - int iVar3; - - s0 = D_801E3508[*(short *)(param_1 + 0xfc)]; - s3 = param_2; - if (((short *)D_801E3508)[*(short *)(param_1 + 0xfc)] == 0) { - *(short *)(param_1 + 0xfc) = 0; - s0 = D_801E3508[0]; - } - *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; - v0 = (rand() & 3) * 0x400 + 0x1800; - s2 = v0; - __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); - s1 = (v0 - 0x1000) * 0x20; - iVar3 = ((int (*)(int))func_8012913C)(4); - if (iVar3 != 0) { - *(short *)(iVar3 + 6) = s3; - *(short *)(iVar3 + 0xa) = s0; - *(short *)(iVar3 + 0xe) = 0; - *(int *)(iVar3 + 0x10) = s1; - *(short *)(iVar3 + 0x2c) = s2; - } -} - - - -extern void (*D_801E353C[])(void); - -void func_801860C4(void *a0) { - D_801E353C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern void func_80186000(s32, s32); -extern s32 func_8012AD50(void *a0); - -void func_80186100(int param_1) { - short uVar1; - - *(short *)(param_1 + 0xfc) = 0; - *(int *)(param_1 + 0x1c) = 1; - uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; - *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; - if (uVar1 != 0) { - func_80186000(param_1, -0x80); - func_80186000(param_1, -0x30); - func_80186000(param_1, 0x20); - func_80186000(param_1, 0x70); - func_80186000(param_1, 0xc0); - } - if (1 < uVar1) { - func_80186000(param_1, -0x58); - func_80186000(param_1, -0x8); - func_80186000(param_1, 0x48); - func_80186000(param_1, 0x98); - func_80186000(param_1, 0xe8); - } - ((void (*)(int))func_8012AD50)(param_1); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) - -extern s32 func_8012BEE8(s32 a0); -extern void func_80186000(s32, s32); - -void func_801861E8(s32 arg0) { - if (func_8012BEE8(arg0)) { - *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); - func_80186000(arg0, 0x110); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (expected) -extern void func_8001CB00(int param_1, void *src, int len, int n); - -extern unsigned char D_801E3530; - -void func_80186228(int param_1) -{ - unsigned short uVar1; - int iVar2; - - iVar2 = *(int *)(param_1 + 0x20); - func_8001CB00(iVar2, &D_801E3530, 0x280, 0x100); - *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; - uVar1 = *(unsigned short *)(param_1 + 0x2c); - *(unsigned char *)(iVar2 + 0x27) = 0x9e; - *(unsigned short *)(iVar2 + 0x2c) = 4; - *(unsigned short *)(iVar2 + 0x1c) = uVar1; - *(unsigned short *)(iVar2 + 0x1a) = uVar1; - *(unsigned short *)(iVar2 + 0x18) = uVar1; - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - return; -} - - - -extern void func_801292C8(u8 *a0); - -void func_801862B0(u8 *a0) { - *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); - if (*(s16 *)(a0 + 0x6) < -0x110) { - func_801292C8(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801862F8); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_801863A4); - -extern void func_8012B2CC(s32 arg); - void func_80186408(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 0x2; - *(s16 *)(v1 + 0x12) = -0x600; - func_8012B2CC((s32)a0); - } - - -extern void func_8012B2CC(s32 arg); - void func_80186438(void *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x2) = 0x4; - *(s16 *)(v1 + 0x12) = 0x600; - func_8012B2CC((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80186468); - - -extern void (*D_801E3894[])(void); - -void func_801865D8(void *a0) { - D_801E3894[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80186614); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80186690); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80186700); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80186718(void) { - func_8002D4C8(0x7E0, 0); - } - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_8018673C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801734BC", func_80186870); - -void func_801868D8(void) { -} - -void func_801868E0(void) { -} - diff --git a/src/ov_SC05_018/ov_SC05_018_jr_80178D40.c b/src/ov_SC05_018/ov_SC05_018_jr_80178D40.c new file mode 100644 index 000000000..fa1a3cf6d --- /dev/null +++ b/src/ov_SC05_018/ov_SC05_018_jr_80178D40.c @@ -0,0 +1,5275 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80189B1C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E55B0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80189B10[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80189B54[]; +extern unsigned short D_80189B5C[]; +extern unsigned short D_80189B64[]; +extern unsigned char D_801E55B8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E55B0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189B6C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E56EC; +extern M2C_UNK D_801E56F0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E5678; +extern void (*D_80189B9C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E56F4[]; +extern u8 D_801E56FC[]; +extern u8 D_801E56AC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189BA4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189BC0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189BC8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189C30[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189BD4; +extern u8 D_80189BE0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80189C64[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189C6C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189CC0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189CF4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189CE4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80189D10; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80189D88[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189D90[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80189D98[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189DA0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189DA8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189DB0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189DBC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189DC8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189DD4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189DE4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189DF4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189DFC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189E04[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189E0C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189E14[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189E1C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189E24[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189E2C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189E34[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189E3C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80189E44[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189E4C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80189E54[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189E5C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80189E64[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189E6C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80189E74[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189E7C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80189E84[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189E8C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80189E94[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189E9C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189EA4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189EE8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189EAC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189F18[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80189F54[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189FAC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189FBC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189FC4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018A12C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018A138[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E4C5C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E6818; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E5E30; +extern short D_801E688C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E688C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E688C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E5E30 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E688C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E67D0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E67D0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E688C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E688C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E628C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E5E34; + extern s32 D_801E6248; + extern s16 D_801E624C; + extern s16 D_801E6250; + extern s16 D_801E6254; + extern s16 D_801E6258; + extern s32 D_801E6260; + extern s32 D_801E6264; + extern s32 D_801E6274; + extern s16 D_801E6278; + extern s16 D_801E627C; + extern s32 D_801E6280; + extern s32 D_801E6288; + extern s32 D_801E628C[10]; + extern s32 D_801E66F8; + extern s16 D_801E67D0; + extern s32 D_801E6814; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E67D0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E6248); + D_801E6248 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E6254, D_801E6258 ? 0x48 : 0x40); + (*(s16*)&D_801E688C) = 2; + break; + case 0: + func_80179B28(D_801E6248); + D_801E6248 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E624C, D_801E6250 ? 0x48 : 0x40); + (*(s16*)&D_801E688C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E66F8 != 0) { + func_80179B28(D_801E6248); + D_801E6248 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E624C, D_801E6250 ? 0x48 : 0x40); + (*(s16*)&D_801E688C) = 1; + } else { + (*(s16*)&D_801E688C) = 3; + } + break; + case 0x32: + func_80179B28(D_801E6248); + D_801E6248 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E624C, + D_801E6250 ? 0x48 : 0x40); + (*(s16*)&D_801E688C) = 1; + break; + case 2: + func_80179B28(D_801E6248); + if (D_801E6260 != 0) { + D_801E5E30 = D_801E6260; + D_801E6260 = 0; + (*(s16*)&D_801E688C) = 3; + return; + } + (*(s16*)&D_801E688C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E688C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E688C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E688C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E688C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E688C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E688C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E688C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E688C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E688C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E688C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E688C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x1B: + D_801E6280 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E688C) = 4; + D_801E5E34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E688C) = 5; + D_801E6274 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E6274 = (s32)func_8017A3B0; + (*(s16*)&D_801E688C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x24: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E688C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E688C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E688C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E688C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E688C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E688C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E688C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E688C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E688C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6264); + (*(s16*)&D_801E688C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E6264); + (*(s16*)&D_801E688C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6264); + (*(s16*)&D_801E688C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E6264); + (*(s16*)&D_801E688C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + break; + case 0x4E: + D_801E6288 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x2B: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E688C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E6814 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E688C) = 3; + break; + case 0x34: + (*(s16*)&D_801E688C) = 3; + D_801E5E30 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E6260 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E688C) = 3; + D_801E5E30 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E688C) = 3; + D_801E5E30 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E5E30 = *(s32 *)(D_801E5E30 + 4); + return; + case 0x37: + (*(s16*)&D_801E688C) = 3; + D_801E624C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6250 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E688C) = 3; + D_801E6254 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E6258 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E688C) = 3; + D_801E624C = w1; + D_801E6250 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E688C) = 3; + D_801E6254 = w2; + D_801E6258 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + case 0x43: + D_801E6274 = (s32)func_8017A3D8; + D_801E627C = 0; + (*(s16*)&D_801E688C) = 5; + D_801E6278 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E688C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E688C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E688C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E628C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E688C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E628C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E688C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E628C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E688C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E628C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E688C) = 3; + break; + default: + break; + } +Lend: + D_801E5E30 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E625C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E625C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E625C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E625C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E6284; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E6284 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E6240; + +s32 func_8017A3B0(void) { + switch (D_801E6240) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E627C; +extern short D_801E6278; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E627C) { + case 0: + func_800D0CA0(1); + D_801E627C = D_801E627C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E6278; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E627C = D_801E627C + 1; + if (D_801E627C < 0x1E) { + return 0; + } + D_801E627C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E62BC; + extern s16 D_801E62BE; + extern s16 D_801E62C0; + extern s16 D_801E62B4; + extern s16 D_801E62B6; + extern s16 D_801E62B8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E62BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E62BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E62C0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E62B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E62B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E62B8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E6244; +extern u16 D_801E62C4; +extern u16 D_801E62C6; +extern u16 D_801E62C8; +extern s16 D_801E6818; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E6818 = 0; + D_801E6244 = 0; + D_801E62C4 = D_80126B5E; + D_801E62C6 = D_80126B62; + D_801E62C8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A274[]; + extern s16 D_801E62BC; + extern s16 D_801E62B4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A274[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A274[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E62BC; + s16 *p78C = &D_801E62B4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E6818 = 1; + D_801E6244 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E6264; + extern SV4_8017B368 D_801E626C; + extern s16 D_801E62BC; + extern s16 D_801E62B4; + extern u16 D_8018A274; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E6264; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E626C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A274)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A274)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E62BC) = loc0; + (*(SV4_8017B368 *)&D_801E62B4) = loc1; + D_801E6818 = 1; + D_801E6244 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A274[]; + extern s16 D_801E62BC; + extern s16 D_801E62BE; + extern s16 D_801E62C0; + extern s16 D_801E62B4; + extern s16 D_801E62B6; + extern s16 D_801E62B8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A274[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A274[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E62BC; + s16 *p78C = &D_801E62B4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E62BE; + v798 = D_801E62C0; + v78C = *p78C; + v78E = D_801E62B6; + v790 = D_801E62B8; + __asm__ __volatile__(""); + D_801E6818 = 1; + D_801E6244 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6244; +extern s16 D_801E62BC; +extern s16 D_801E62BE; +extern s16 D_801E62C0; +extern s16 D_801E62B4; +extern s16 D_801E62B6; +extern s16 D_801E62B8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E6244 = 0; + D_801E62BC = (s16) D_80114F30; + D_801E62BE = (s16) D_80114F34; + D_801E62C0 = (s16) D_80114F38; + D_801E62B4 = (s16) D_80114F24; + D_801E62B6 = (s16) D_80114F28; + D_801E62B8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E62D4; +extern s16 D_801E62D6; +extern s16 D_801E62D8; +extern s16 D_801E62DC; +extern s16 D_801E62DE; +extern s16 D_801E62E0; + +void func_8017B824(void) { + D_801E62D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E62D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E62D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E62DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E62DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E62E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E62D4; +extern s16 D_801E62D6; +extern s16 D_801E62D8; +extern s16 D_801E62DC; +extern s16 D_801E62DE; +extern s16 D_801E62E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E62D4; + D_80114F34 = D_801E62D6; + D_80114F38 = D_801E62D8; + D_80114F24 = D_801E62DC; + D_80114F28 = D_801E62DE; + D_80114F2C = D_801E62E0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E62BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E62B4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E62BC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E62B4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E62C4; +extern u16 D_801E62C6; +extern u16 D_801E62C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E6244; +extern short D_801E62CC; +extern short D_801E62CE; +extern short D_801E62D0; +extern s16 D_801E62BC; +extern s16 D_801E62BE; +extern s16 D_801E62C0; +extern s16 D_801E62B4; +extern s16 D_801E62B6; +extern s16 D_801E62B8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E62C4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E62C6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E62C8); + (*(s16 *)&D_801E62CC) = buf[0]; + (*(s16 *)&D_801E62CE) = buf[1]; + (*(s16 *)&D_801E62D0) = buf[2]; + D_801E62BC = D_80114F30 + buf[0]; + D_801E6244 = 0; + D_801E62BE = D_80114F34 + buf[1]; + D_801E62C0 = D_80114F38 + buf[2]; + D_801E62B4 = D_80114F24 + buf[0]; + D_801E62B6 = D_80114F28 + buf[1]; + D_801E62B8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E6264; +extern SV4 D_801E626C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E626C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E6264 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E626C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E626C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E6264) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E626C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E628C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E628C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E6244; +extern s16 D_801E6818; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E6244 = D_801E6244 + 1; + if (D_801E6244 >= 0x1F) { + D_801E6818 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E6244; +extern s16 D_801E6818; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6244 = D_801E6244 + 1; + if (0x18 < D_801E6244) { + func_8012A4BC(); + D_801E6818 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E6244; +extern void (*D_801E6288)(void); +extern short D_801E62CC; +extern short D_801E62CE; +extern short D_801E62D0; +extern s16 D_801E6818; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E6244 = D_801E6244 + 1; + if (D_801E6244 >= 0x19) { + if (D_801E6288 != 0) { + (*D_801E6288)(); + } else { + D_80114F30 = D_80114F30 + D_801E62CC; + D_80114F34 = D_80114F34 + D_801E62CE; + D_80114F38 = D_80114F38 + D_801E62D0; + D_80114F24 = D_80114F24 + D_801E62CC; + D_80114F28 = D_80114F28 + D_801E62CE; + D_80114F2C = D_80114F2C + D_801E62D0; + func_8012A4BC(); + } + D_801E6818 = 0; + } +} + + + +extern void (*D_8018A314[])(void); + +void func_8017BE60(void *a0) { + D_8018A314[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017BF88); + + +extern void (*D_8018A32C[])(void); + +void func_8017C0E4(void *a0) { + D_8018A32C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C120); + + +extern void (*D_8018A3C8[])(void); + +void func_8017C180(void *a0) { + D_8018A3C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018A3D0[])(void); + +void func_8017C1BC(void *a0) { + D_8018A3D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018A3D8[])(void); + +void func_8017C1F8(void *a0) { + D_8018A3D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C234); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C378); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C3E4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C4D0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C594); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C61C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C7B8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017C9BC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017CDB0); + + +extern void (*D_8018A6B4[])(void); + +void func_8017CF30(void *a0) { + D_8018A6B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017CF6C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017CFE0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D0BC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D2D0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D474); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D5C4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017D604); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E4E4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E534(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E558); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E5C8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E678); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E698); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E770); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E7D4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E810); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E818); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017E84C); + +extern void func_800D1EBC(void); + void func_8017E8F0(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018A6D8[])(void); + +void func_8017E910(void *a0) { + D_8018A6D8[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018A6E0[])(void); + +void func_8017E94C(void *a0) { + D_8018A6E0[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018A6EC[])(void); + +void func_8017E988(void *a0) { + D_8018A6EC[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018A704[])(void); + +void func_8017E9C4(void *a0) { + D_8018A704[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_8018A70C[])(void); + +void func_8017EA00(void *a0) { + D_8018A70C[*(u8 *)((s32)a0 + 0x15)](); +} + + +extern s32 D_80127050; + void func_8017EA3C(void) { + D_80127050 = 1; + } + + + +extern void (*D_8018A838[])(void); + +void func_8017EA50(void *a0) { + D_8018A838[*(u8 *)((s32)a0 + 0x214)](); +} + + +void func_8017EA8C(u8 *a0) { + *(u8 *)(a0 + 0x214) += 1; + } + + +extern void func_80175414(s32 arg0); + extern void func_8016F0E4(void); + extern void func_80165770(void); + void func_8017EAA0(s32 param_1) { + ((void (*)(void))func_80175414)(); + ((void (*)(s32))func_8016F0E4)(param_1); + ((void (*)(s32))func_80165770)(param_1); + } + + + +extern void (*D_8018A840[])(void); + +void func_8017EAD8(void *a0) { + D_8018A840[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EB14); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EB28); + +extern void (*D_8018A860[])(void); + +void func_8017EB48(void *a0) { + D_8018A860[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EB84); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EBFC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EC80); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017ECEC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017ED60); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EDD0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EF54); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EF88); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017EFE0); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018A848; + +void func_8017F038(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018A848, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F060); + + +extern void (*D_8018A8C0[])(void); + +void func_8017F080(void *a0) { + D_8018A8C0[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F0BC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F120); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F188); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F220); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F254); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F2BC); + + +extern void (*D_8018A8DC[])(void); + +void func_8017F314(void *a0) { + D_8018A8DC[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F350); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F3A8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F3E8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F448); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F4AC); + +extern void func_80181A0C(void); + extern void func_80171928(void *a0); + void func_8017F4F8(s32 arg0) { + func_80181A0C(); + ((s32 (*)(s32))func_80171928)(arg0); + } + + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018A8A8; + +void func_8017F528(void) { + func_8002D4C8(0xBE6, 0); + ((void (*)(M2C_UNK *, s32))func_8016EE40)(&D_8018A8A8, 0x1000000); +} + + + +extern void (*D_8018A900[])(void); + +void func_8017F55C(void *a0) { + D_8018A900[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F598); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F608); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F648); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F6C8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F754); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F7BC); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018A8F0; + +void func_8017F7F0(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018A8F0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F818); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017F990); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FA20); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FAE4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FB8C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FC74); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FD94); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FE44); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FED0); + +extern void (*D_8018A948[])(void); + +void func_8017FF9C(u8 *a0) { + D_8018A948[a0[0x4]](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8017FFD8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180014); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018003C); + +extern void func_80180220(s32 arg0, s32 arg1); +extern s32 D_801274E8; + +void func_801800B8(void *arg0) { + func_80180220((s32)arg0, (s32)&D_801274E8); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801800E0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180220); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180408); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801805E0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180644); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018069C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801807E8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018083C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801808AC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801809B8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180ACC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180BE0); + +extern void func_80180D04(void); + void func_80180CE4(void) { + func_80180D04(); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180D04); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180D40); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80180DBC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801810B0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181204); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018124C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181294); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801812FC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181324); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801813E8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181474); + +void func_80181518(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181520); + +extern void (*D_8018AB24[])(void); + +void func_80181570(void *a0) { + D_8018AB24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801815AC); + +extern void func_80184590(s32 arg0, s32 arg1); + void func_80181648(void) { + func_80184590(0x7, 0x16); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018166C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801816A4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181720); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181738); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181760); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181840); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801818D0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801819B0); + +extern s32 func_8012E544(s32 arg); + void func_80181A0C(void) { + s32 p = func_8012E544(0x37C); + if (p != 0) { + *(u16*)(p + 0x34) += 1; + } + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181A48); + + +extern void (*D_8018AD74[])(void); + +void func_80181B44(void *a0) { + D_8018AD74[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181B80); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181BF4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181CC4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181D88); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181DCC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181E78); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80181EEC); + +extern void func_8018469C(void *a0, s32 a1); + extern short D_8018AD84; + void func_80182018(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x4; + *(short *)((char *)a0 + 0x34) = 0; + func_8018469C(a0, &D_8018AD84); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182048); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018208C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801820E8); + + +extern void (*D_8018AE9C[])(void); + +void func_80182290(void *a0) { + D_8018AE9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801822CC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182304); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182384); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182420); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018251C); + + +extern void (*D_8018B09C[])(void); + +void func_8018258C(void *a0) { + D_8018B09C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801825C8); + +void func_80182694(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018269C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182734); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182774); + + +extern void (*D_8018B0AC[])(void); + +void func_801827E8(void *a0) { + D_8018B0AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80182824(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182844); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018290C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182BF4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182CDC); + + +extern void (*D_8018B0C4[])(void); + +void func_80182E38(void *a0) { + D_8018B0C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182E74); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182F04); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80182F78); + + +extern void (*D_8018B180[])(void); + +void func_80183018(void *a0) { + D_8018B180[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183054); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801830D8); + + +extern void (*D_8018B198[])(void); + +void func_80183138(void *a0) { + D_8018B198[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183174); + +void func_80183228(void) { +} + + +extern void (*D_8018B1D0[])(void); + +void func_80183230(void *a0) { + D_8018B1D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018326C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801832FC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183538); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183588); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183644); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018375C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801837E8); + + +extern void (*D_801A1068[])(void); + +void func_80183960(void *a0) { + D_801A1068[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801A1088[])(void); + +void func_8018399C(void *a0) { + D_801A1088[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801839D8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183A64); + + +extern s32 func_80029504(void); +extern void func_800183E0(s32 arg0); +extern char D_801A1090; + +void func_80183ABC(void) { + if (!(func_80029504() < 0x492)) { + func_800183E0((s32)&D_801A1090); + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183AF8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183B90); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183C2C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183CB8); + + +extern void (*D_801A116C[])(void); + +void func_80183DF0(void *a0) { + D_801A116C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183E2C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183EC8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183F28); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183F9C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80183FDC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018401C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801840A0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184118); + + +void func_80184180(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; + } + + +void func_80184190(void *a0) { + *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 2; + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801841A0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018423C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184268); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184294); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801842C0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184344); + +extern s32 func_80184344(s32 arg); +extern void func_801844A8(s32 arg); + +void func_80184474(void *a0) { + *(s32 *)((char *)a0 + 0xe0) = func_80184344((s32)a0); + func_801844A8((s32)a0); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801844A8); + + +extern short D_800BA2BA; + s32 func_801844E8(s32 arg0) { + return *(short *)((char *)&D_800BA2BA + (*(short *)(*(s32 *)(arg0 + 0xd0) + 0x10) << 2)); + } + + + +extern void (*D_801E022C[])(void); + +void func_80184510(void *a0) { + D_801E022C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018454C(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184554); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184590); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801845B4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018460C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184674); + +void func_80184694(void *a0) { + *(s16 *)((s32)a0 + 0x5C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018469C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801846E4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184740); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801847B4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184828); + + +extern s32 func_80029504(void); + extern void func_80029514(s32 arg0); + void func_80184884(void) { + if (((s32 (*)(void))func_80029504)() == 0x3A2) { + ((void (*)(s32))func_80029514)(0x3AC); + } + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801848B8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184988); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184B50); + +extern void (*D_801E024C[])(void); + +void func_80184B98(void *a0) { + D_801E024C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80184BD4(void) { +} + +void func_80184BDC(void) { +} + +void func_80184BE4(void) { +} + +void func_80184BEC(void) { +} + +void func_80184BF4(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184BFC); + +void func_80184C40(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184C48); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184CD0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80184EA8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185048); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801850C4); + +extern void func_801858D0(void); + void func_80185190(void) { + func_801858D0(); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801851B0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185280); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801852E8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018535C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801853BC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018543C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185494); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801854F4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018553C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018558C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801855C4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185650); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801856F4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185754); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801858D0); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185904); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185938); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018599C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185A10); + + +extern void (*D_801E0548[])(void); + +void func_80185A68(void *a0) { + D_801E0548[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185AA4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185B20); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185C40); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185C8C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185D98); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185DF4); + + +extern void (*D_801E3460[])(void); + +void func_80185E34(void *a0) { + D_801E3460[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185E70); + +void func_80185ED4(void) { +} + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185EDC); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185F28); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80185F68); + + +extern void (*D_801E3528[])(void); + +void func_80185FC4(void *a0) { + D_801E3528[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: iv-combine +// @stuck: none — MATCH (49 ins). gcc folds (v0+0x1800)-0x1000 -> v0+0x800; re-tie barrier on the WORKING reg v0 (NOT a saved local) forces the target chain v0=base+0x1800; s2=copy; v0-=0x1000; s1=v0<<5. NO register pins (pins re-trigger the lhu/lh dual-load CSE collapse and shrink the frame; natural alloc gives s0-s3 + frame 0x38). +extern int rand(void); +extern u8 *func_8012913C(s32 a0); + +extern unsigned short D_801E3508[]; + +void func_80186000(s32 param_1, s32 param_2) +{ + int s3; + unsigned short s0; + int s2; + int s1; + int v0; + int iVar3; + + s0 = D_801E3508[*(short *)(param_1 + 0xfc)]; + s3 = param_2; + if (((short *)D_801E3508)[*(short *)(param_1 + 0xfc)] == 0) { + *(short *)(param_1 + 0xfc) = 0; + s0 = D_801E3508[0]; + } + *(short *)(param_1 + 0xfc) = *(short *)(param_1 + 0xfc) + 1; + v0 = (rand() & 3) * 0x400 + 0x1800; + s2 = v0; + __asm__ __volatile__("" : "=r"(v0) : "0"(v0)); + s1 = (v0 - 0x1000) * 0x20; + iVar3 = ((int (*)(int))func_8012913C)(4); + if (iVar3 != 0) { + *(short *)(iVar3 + 6) = s3; + *(short *)(iVar3 + 0xa) = s0; + *(short *)(iVar3 + 0xe) = 0; + *(int *)(iVar3 + 0x10) = s1; + *(short *)(iVar3 + 0x2c) = s2; + } +} + + + +extern void (*D_801E353C[])(void); + +void func_801860C4(void *a0) { + D_801E353C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern void func_80186000(s32, s32); +extern s32 func_8012AD50(void *a0); + +void func_80186100(int param_1) { + short uVar1; + + *(short *)(param_1 + 0xfc) = 0; + *(int *)(param_1 + 0x1c) = 1; + uVar1 = *(unsigned short *)(param_1 + 0x70) & 7; + *(short *)(param_1 + 0xfe) = (uVar1 < 2) ? 0x1e : 0xf; + if (uVar1 != 0) { + func_80186000(param_1, -0x80); + func_80186000(param_1, -0x30); + func_80186000(param_1, 0x20); + func_80186000(param_1, 0x70); + func_80186000(param_1, 0xc0); + } + if (1 < uVar1) { + func_80186000(param_1, -0x58); + func_80186000(param_1, -0x8); + func_80186000(param_1, 0x48); + func_80186000(param_1, 0x98); + func_80186000(param_1, 0xe8); + } + ((void (*)(int))func_8012AD50)(param_1); +} + + + +// @class: regalloc-order +// @stuck: none — MATCH (param_1 naturally lands in $s0 across the call, mirrors sibling func_80184AEC) + +extern s32 func_8012BEE8(s32 a0); +extern void func_80186000(s32, s32); + +void func_801861E8(s32 arg0) { + if (func_8012BEE8(arg0)) { + *(s32 *)(arg0 + 0x1c) = (s32)*(s16 *)(arg0 + 0xfe); + func_80186000(arg0, 0x110); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (expected) +extern void func_8001CB00(int param_1, void *src, int len, int n); + +extern unsigned char D_801E3530; + +void func_80186228(int param_1) +{ + unsigned short uVar1; + int iVar2; + + iVar2 = *(int *)(param_1 + 0x20); + func_8001CB00(iVar2, &D_801E3530, 0x280, 0x100); + *(unsigned int *)(iVar2 + 4) = *(unsigned int *)(iVar2 + 4) | 0x70000000; + uVar1 = *(unsigned short *)(param_1 + 0x2c); + *(unsigned char *)(iVar2 + 0x27) = 0x9e; + *(unsigned short *)(iVar2 + 0x2c) = 4; + *(unsigned short *)(iVar2 + 0x1c) = uVar1; + *(unsigned short *)(iVar2 + 0x1a) = uVar1; + *(unsigned short *)(iVar2 + 0x18) = uVar1; + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + return; +} + + + +extern void func_801292C8(u8 *a0); + +void func_801862B0(u8 *a0) { + *(s32 *)(a0 + 0x4) = *(s32 *)(a0 + 0x4) - *(s32 *)(a0 + 0x10); + if (*(s16 *)(a0 + 0x6) < -0x110) { + func_801292C8(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801862F8); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_801863A4); + +extern void func_8012B2CC(s32 arg); + void func_80186408(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 0x2; + *(s16 *)(v1 + 0x12) = -0x600; + func_8012B2CC((s32)a0); + } + + +extern void func_8012B2CC(s32 arg); + void func_80186438(void *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x2) = 0x4; + *(s16 *)(v1 + 0x12) = 0x600; + func_8012B2CC((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80186468); + + +extern void (*D_801E3894[])(void); + +void func_801865D8(void *a0) { + D_801E3894[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80186614); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80186690); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80186700); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80186718(void) { + func_8002D4C8(0x7E0, 0); + } + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_8018673C); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_80178D40", func_80186870); + +void func_801868D8(void) { +} + +void func_801868E0(void) { +} + + diff --git a/src/ov_SC05_019/ov_SC05_019_jr_801734BC.c b/src/ov_SC05_019/ov_SC05_019_jr_801734BC.c index 114337b0b..a869683c4 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_801734BC.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_801734BC.c @@ -3084,950 +3084,3 @@ void func_80178D18(void) { D_8018FB24 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8018F92C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8018F92C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8018F954; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8018F954 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8018F910; - -s32 func_8017A3B0(void) { - switch (D_8018F910) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8018F94C; -extern short D_8018F948; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8018F94C) { - case 0: - func_800D0CA0(1); - D_8018F94C = D_8018F94C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8018F948; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8018F94C = D_8018F94C + 1; - if (D_8018F94C < 0x1E) { - return 0; - } - D_8018F94C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8018F914; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; -extern s16 D_8018FAB0; - -void func_8017B1D8(void) { - func_8012A418(); - D_8018FAB0 = 0; - D_8018F914 = 0; - D_8018F994 = D_80126B5E; - D_8018F996 = D_80126B62; - D_8018F998 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8018FAB0 = 1; - D_8018F914 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8018F934; - extern SV4_8017B368 D_8018F93C; - extern s16 D_8018F98C; - extern s16 D_8018F984; - extern u16 D_80182BB8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8018F934; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8018F93C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8018F98C) = loc0; - (*(SV4_8017B368 *)&D_8018F984) = loc1; - D_8018FAB0 = 1; - D_8018F914 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80182BB8[]; - extern s16 D_8018F98C; - extern s16 D_8018F98E; - extern s16 D_8018F990; - extern s16 D_8018F984; - extern s16 D_8018F986; - extern s16 D_8018F988; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8018F98C; - s16 *p78C = &D_8018F984; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8018F98E; - v798 = D_8018F990; - v78C = *p78C; - v78E = D_8018F986; - v790 = D_8018F988; - __asm__ __volatile__(""); - D_8018FAB0 = 1; - D_8018F914 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8018F914 = 0; - D_8018F98C = (s16) D_80114F30; - D_8018F98E = (s16) D_80114F34; - D_8018F990 = (s16) D_80114F38; - D_8018F984 = (s16) D_80114F24; - D_8018F986 = (s16) D_80114F28; - D_8018F988 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -void func_8017B824(void) { - D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8018F9A4; -extern s16 D_8018F9A6; -extern s16 D_8018F9A8; -extern s16 D_8018F9AC; -extern s16 D_8018F9AE; -extern s16 D_8018F9B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8018F9A4; - D_80114F34 = D_8018F9A6; - D_80114F38 = D_8018F9A8; - D_80114F24 = D_8018F9AC; - D_80114F28 = D_8018F9AE; - D_80114F2C = D_8018F9B0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8018F994; -extern u16 D_8018F996; -extern u16 D_8018F998; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8018F914; -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018F98C; -extern s16 D_8018F98E; -extern s16 D_8018F990; -extern s16 D_8018F984; -extern s16 D_8018F986; -extern s16 D_8018F988; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); - (*(s16 *)&D_8018F99C) = buf[0]; - (*(s16 *)&D_8018F99E) = buf[1]; - (*(s16 *)&D_8018F9A0) = buf[2]; - D_8018F98C = D_80114F30 + buf[0]; - D_8018F914 = 0; - D_8018F98E = D_80114F34 + buf[1]; - D_8018F990 = D_80114F38 + buf[2]; - D_8018F984 = D_80114F24 + buf[0]; - D_8018F986 = D_80114F28 + buf[1]; - D_8018F988 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8018F934; -extern SV4 D_8018F93C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8018F934 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8018F93C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8018F934) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8018F93C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8018F95C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8018F95C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x1F) { - D_8018FAB0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8018F914; -extern s16 D_8018FAB0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (0x18 < D_8018F914) { - func_8012A4BC(); - D_8018FAB0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8018F914; -extern void (*D_8018F958)(void); -extern short D_8018F99C; -extern short D_8018F99E; -extern short D_8018F9A0; -extern s16 D_8018FAB0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8018F914 = D_8018F914 + 1; - if (D_8018F914 >= 0x19) { - if (D_8018F958 != 0) { - (*D_8018F958)(); - } else { - D_80114F30 = D_80114F30 + D_8018F99C; - D_80114F34 = D_80114F34 + D_8018F99E; - D_80114F38 = D_80114F38 + D_8018F9A0; - D_80114F24 = D_80114F24 + D_8018F99C; - D_80114F28 = D_80114F28 + D_8018F99E; - D_80114F2C = D_80114F2C + D_8018F9A0; - func_8012A4BC(); - } - D_8018FAB0 = 0; - } -} - - - -extern void (*D_80182C58[])(void); - -void func_8017BE60(void *a0) { - D_80182C58[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80182C70[])(void); - -void func_8017BEBC(void *a0) { - D_80182C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017BEF8); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017BFA4); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017C014); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017C3EC); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017C490); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017C688); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017C6F4); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017D5C0); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E4A0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E508); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E550(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E5EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E62C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E6A8); - - -extern void (*D_80182C78[])(void); - -void func_8017E6C8(void *a0) { - D_80182C78[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C80[])(void); - -void func_8017E704(void *a0) { - D_80182C80[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182C8C[])(void); - -void func_8017E740(void *a0) { - D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80182F38[])(void); - -void func_8017E77C(void *a0) { - D_80182F38[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E7B8); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E808); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E844); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E8E8); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E91C); - - -extern void (*D_80182F4C[])(void); - -void func_8017E950(void *a0) { - D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E98C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017E9CC); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EA78); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EACC); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EB4C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EBC8); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EC2C); - - -extern void (*D_80182F68[])(void); - -void func_8017EC84(void *a0) { - D_80182F68[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017ECC0); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017ED0C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017ED68); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017ED90); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EDB8); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EE68); - - -extern void (*D_80182F74[])(void); - -void func_8017EF10(void *a0) { - D_80182F74[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EF4C); - -extern void func_8017EFA0(void); -extern s16 D_80126942; -extern s16 D_80126944; - -void func_8017EF6C(void) { - D_80126942 = -0xC1; - D_80126944 = 0; - func_8017EFA0(); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017EFA0); - - -s32 func_8017F14C(void) { - return 135; -} - - - -extern void (*D_80183110[])(void); - -void func_8017F154(void *a0) { - D_80183110[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_801734BC", func_8017F1B8); - -DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ - diff --git a/src/ov_SC05_019/ov_SC05_019_jr_80178D40.c b/src/ov_SC05_019/ov_SC05_019_jr_80178D40.c new file mode 100644 index 000000000..2ea182bd8 --- /dev/null +++ b/src/ov_SC05_019/ov_SC05_019_jr_80178D40.c @@ -0,0 +1,4396 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182460[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8018EC80; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182454[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182498[]; +extern unsigned short D_801824A0[]; +extern unsigned short D_801824A8[]; +extern unsigned char D_8018EC88[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8018EC80; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801824B0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8018EDBC; +extern M2C_UNK D_8018EDC0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8018ED48; +extern void (*D_801824E0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018EDC4[]; +extern u8 D_8018EDCC[]; +extern u8 D_8018ED7C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801824E8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182504[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018250C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182574[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182518; +extern u8 D_80182524; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801825A8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801825B0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182604[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182638[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182628[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182654; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801826CC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801826D4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801826DC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801826E4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801826EC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801826F4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182700[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018270C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182718[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182728[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182738[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182740[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182748[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182750[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182758[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182760[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182768[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182770[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182778[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182780[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182788[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182790[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182798[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801827A0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801827A8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801827B0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801827B8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801827C0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801827C8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801827D0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801827D8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801827E0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801827E8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018282C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801827F0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018285C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80182898[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801828F0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182900[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182908[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182A70[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80182A7C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8018E370; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8018FAB0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8018F500; +extern short D_8018FB24; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8018FB24) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8018FB24)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8018F500 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8018FB24) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8018FA80 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8018FA80 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8018FB24) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8018FB24) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8018F95C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8018F504; + extern s32 D_8018F918; + extern s16 D_8018F91C; + extern s16 D_8018F920; + extern s16 D_8018F924; + extern s16 D_8018F928; + extern s32 D_8018F930; + extern s32 D_8018F934; + extern s32 D_8018F944; + extern s16 D_8018F948; + extern s16 D_8018F94C; + extern s32 D_8018F950; + extern s32 D_8018F958; + extern s32 D_8018F95C[10]; + extern s32 D_8018F9C8; + extern s16 D_8018FA80; + extern s32 D_8018FAAC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8018FA80; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F924, D_8018F928 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 2; + break; + case 0: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8018F9C8 != 0) { + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8018F91C, D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + } else { + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x32: + func_80179B28(D_8018F918); + D_8018F918 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8018F91C, + D_8018F920 ? 0x48 : 0x40); + (*(s16*)&D_8018FB24) = 1; + break; + case 2: + func_80179B28(D_8018F918); + if (D_8018F930 != 0) { + D_8018F500 = D_8018F930; + D_8018F930 = 0; + (*(s16*)&D_8018FB24) = 3; + return; + } + (*(s16*)&D_8018FB24) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8018FB24) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1B: + D_8018F950 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8018FB24) = 4; + D_8018F504 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8018FB24) = 5; + D_8018F944 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8018F944 = (s32)func_8017A3B0; + (*(s16*)&D_8018FB24) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x24: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8018FB24) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8018FB24) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8018FB24) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8018F934); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4E: + D_8018F958 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x2B: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8018FB24) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8018FAAC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x34: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8018F930 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8018FB24) = 3; + D_8018F500 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8018FB24) = 3; + D_8018F500 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8018F500 = *(s32 *)(D_8018F500 + 4); + return; + case 0x37: + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F920 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8018F928 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F91C = w1; + D_8018F920 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8018FB24) = 3; + D_8018F924 = w2; + D_8018F928 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x43: + D_8018F944 = (s32)func_8017A3D8; + D_8018F94C = 0; + (*(s16*)&D_8018FB24) = 5; + D_8018F948 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8018FB24) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8018FB24) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8018F95C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8018F95C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8018FB24) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8018F95C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8018FB24) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8018F95C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8018FB24) = 3; + break; + default: + break; + } +Lend: + D_8018F500 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8018F92C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8018F92C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8018F954; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8018F954 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8018F910; + +s32 func_8017A3B0(void) { + switch (D_8018F910) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8018F94C; +extern short D_8018F948; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8018F94C) { + case 0: + func_800D0CA0(1); + D_8018F94C = D_8018F94C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8018F948; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8018F94C = D_8018F94C + 1; + if (D_8018F94C < 0x1E) { + return 0; + } + D_8018F94C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8018F98C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8018F98E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8018F990, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8018F984, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8018F986, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8018F988, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8018F914; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; +extern s16 D_8018FAB0; + +void func_8017B1D8(void) { + func_8012A418(); + D_8018FAB0 = 0; + D_8018F914 = 0; + D_8018F994 = D_80126B5E; + D_8018F996 = D_80126B62; + D_8018F998 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8018FAB0 = 1; + D_8018F914 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8018F934; + extern SV4_8017B368 D_8018F93C; + extern s16 D_8018F98C; + extern s16 D_8018F984; + extern u16 D_80182BB8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8018F934; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8018F93C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80182BB8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8018F98C) = loc0; + (*(SV4_8017B368 *)&D_8018F984) = loc1; + D_8018FAB0 = 1; + D_8018F914 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80182BB8[]; + extern s16 D_8018F98C; + extern s16 D_8018F98E; + extern s16 D_8018F990; + extern s16 D_8018F984; + extern s16 D_8018F986; + extern s16 D_8018F988; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80182BB8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80182BB8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8018F98C; + s16 *p78C = &D_8018F984; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8018F98E; + v798 = D_8018F990; + v78C = *p78C; + v78E = D_8018F986; + v790 = D_8018F988; + __asm__ __volatile__(""); + D_8018FAB0 = 1; + D_8018F914 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8018F914 = 0; + D_8018F98C = (s16) D_80114F30; + D_8018F98E = (s16) D_80114F34; + D_8018F990 = (s16) D_80114F38; + D_8018F984 = (s16) D_80114F24; + D_8018F986 = (s16) D_80114F28; + D_8018F988 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +void func_8017B824(void) { + D_8018F9A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8018F9A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8018F9A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8018F9AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8018F9AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8018F9B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8018F9A4; +extern s16 D_8018F9A6; +extern s16 D_8018F9A8; +extern s16 D_8018F9AC; +extern s16 D_8018F9AE; +extern s16 D_8018F9B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8018F9A4; + D_80114F34 = D_8018F9A6; + D_80114F38 = D_8018F9A8; + D_80114F24 = D_8018F9AC; + D_80114F28 = D_8018F9AE; + D_80114F2C = D_8018F9B0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8018F98C), src[8..15] -> (*(S8_8017B8E8 *)&D_8018F984) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8018F98C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8018F984) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8018F994; +extern u16 D_8018F996; +extern u16 D_8018F998; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8018F914; +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018F98C; +extern s16 D_8018F98E; +extern s16 D_8018F990; +extern s16 D_8018F984; +extern s16 D_8018F986; +extern s16 D_8018F988; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8018F994); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8018F996); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8018F998); + (*(s16 *)&D_8018F99C) = buf[0]; + (*(s16 *)&D_8018F99E) = buf[1]; + (*(s16 *)&D_8018F9A0) = buf[2]; + D_8018F98C = D_80114F30 + buf[0]; + D_8018F914 = 0; + D_8018F98E = D_80114F34 + buf[1]; + D_8018F990 = D_80114F38 + buf[2]; + D_8018F984 = D_80114F24 + buf[0]; + D_8018F986 = D_80114F28 + buf[1]; + D_8018F988 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8018F934; +extern SV4 D_8018F93C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8018F93C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8018F934 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8018F93C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8018F93C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8018F934) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8018F93C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8018F95C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8018F95C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x1F) { + D_8018FAB0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8018F914; +extern s16 D_8018FAB0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (0x18 < D_8018F914) { + func_8012A4BC(); + D_8018FAB0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8018F914; +extern void (*D_8018F958)(void); +extern short D_8018F99C; +extern short D_8018F99E; +extern short D_8018F9A0; +extern s16 D_8018FAB0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8018F914 = D_8018F914 + 1; + if (D_8018F914 >= 0x19) { + if (D_8018F958 != 0) { + (*D_8018F958)(); + } else { + D_80114F30 = D_80114F30 + D_8018F99C; + D_80114F34 = D_80114F34 + D_8018F99E; + D_80114F38 = D_80114F38 + D_8018F9A0; + D_80114F24 = D_80114F24 + D_8018F99C; + D_80114F28 = D_80114F28 + D_8018F99E; + D_80114F2C = D_80114F2C + D_8018F9A0; + func_8012A4BC(); + } + D_8018FAB0 = 0; + } +} + + + +extern void (*D_80182C58[])(void); + +void func_8017BE60(void *a0) { + D_80182C58[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80182C70[])(void); + +void func_8017BEBC(void *a0) { + D_80182C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017BEF8); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017BFA4); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017C014); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017C3EC); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017C490); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017C688); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017C6F4); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017D5C0); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E4A0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E4E4(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E508); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E550(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E5EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E62C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E6A8); + + +extern void (*D_80182C78[])(void); + +void func_8017E6C8(void *a0) { + D_80182C78[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C80[])(void); + +void func_8017E704(void *a0) { + D_80182C80[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182C8C[])(void); + +void func_8017E740(void *a0) { + D_80182C8C[*(u8 *)((s32)a0 + 0x15)](); +} + + + +extern void (*D_80182F38[])(void); + +void func_8017E77C(void *a0) { + D_80182F38[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E7B8); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E808); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E844); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E8E8); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E91C); + + +extern void (*D_80182F4C[])(void); + +void func_8017E950(void *a0) { + D_80182F4C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E98C); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017E9CC); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EA78); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EACC); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EB4C); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EBC8); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EC2C); + + +extern void (*D_80182F68[])(void); + +void func_8017EC84(void *a0) { + D_80182F68[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017ECC0); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017ED0C); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017ED68); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017ED90); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EDB8); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EE68); + + +extern void (*D_80182F74[])(void); + +void func_8017EF10(void *a0) { + D_80182F74[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EF4C); + +extern void func_8017EFA0(void); +extern s16 D_80126942; +extern s16 D_80126944; + +void func_8017EF6C(void) { + D_80126942 = -0xC1; + D_80126944 = 0; + func_8017EFA0(); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017EFA0); + + +s32 func_8017F14C(void) { + return 135; +} + + + +extern void (*D_80183110[])(void); + +void func_8017F154(void *a0) { + D_80183110[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8017F190() /* dedup: shared engine-core @0x8017F190 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_80178D40", func_8017F1B8); + +DEFINE_func_8017F224() /* dedup: shared engine-core @0x8017F224 (src/shared) */ + + diff --git a/src/ov_SC06_000/ov_SC06_000_jr_801734BC.c b/src/ov_SC06_000/ov_SC06_000_jr_801734BC.c index 9491781fd..050947de5 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_801734BC.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_801734BC.c @@ -3084,1795 +3084,3 @@ void func_80178D18(void) { D_801B2184 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AE59C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AE59C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AE59C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AE59C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AE5C4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AE5C4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AE580; - -s32 func_8017A3B0(void) { - switch (D_801AE580) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AE5BC; -extern short D_801AE5B8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AE5BC) { - case 0: - func_800D0CA0(1); - D_801AE5BC = D_801AE5BC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AE5B8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AE5BC = D_801AE5BC + 1; - if (D_801AE5BC < 0x1E) { - return 0; - } - D_801AE5BC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AE5FC; - extern s16 D_801AE5FE; - extern s16 D_801AE600; - extern s16 D_801AE5F4; - extern s16 D_801AE5F6; - extern s16 D_801AE5F8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AE5FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AE5FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AE600, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AE5F4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AE5F6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AE5F8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AE584; -extern u16 D_801AE604; -extern u16 D_801AE606; -extern u16 D_801AE608; -extern s16 D_801B20D8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B20D8 = 0; - D_801AE584 = 0; - D_801AE604 = D_80126B5E; - D_801AE606 = D_80126B62; - D_801AE608 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018BBC8[]; - extern s16 D_801AE5FC; - extern s16 D_801AE5F4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AE5FC; - s16 *p78C = &D_801AE5F4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B20D8 = 1; - D_801AE584 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AE5A4; - extern SV4_8017B368 D_801AE5AC; - extern s16 D_801AE5FC; - extern s16 D_801AE5F4; - extern u16 D_8018BBC8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AE5A4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AE5AC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018BBC8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018BBC8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AE5FC) = loc0; - (*(SV4_8017B368 *)&D_801AE5F4) = loc1; - D_801B20D8 = 1; - D_801AE584 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018BBC8[]; - extern s16 D_801AE5FC; - extern s16 D_801AE5FE; - extern s16 D_801AE600; - extern s16 D_801AE5F4; - extern s16 D_801AE5F6; - extern s16 D_801AE5F8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AE5FC; - s16 *p78C = &D_801AE5F4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AE5FE; - v798 = D_801AE600; - v78C = *p78C; - v78E = D_801AE5F6; - v790 = D_801AE5F8; - __asm__ __volatile__(""); - D_801B20D8 = 1; - D_801AE584 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AE584; -extern s16 D_801AE5FC; -extern s16 D_801AE5FE; -extern s16 D_801AE600; -extern s16 D_801AE5F4; -extern s16 D_801AE5F6; -extern s16 D_801AE5F8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AE584 = 0; - D_801AE5FC = (s16) D_80114F30; - D_801AE5FE = (s16) D_80114F34; - D_801AE600 = (s16) D_80114F38; - D_801AE5F4 = (s16) D_80114F24; - D_801AE5F6 = (s16) D_80114F28; - D_801AE5F8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AE614; -extern s16 D_801AE616; -extern s16 D_801AE618; -extern s16 D_801AE61C; -extern s16 D_801AE61E; -extern s16 D_801AE620; - -void func_8017B824(void) { - D_801AE614 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AE616 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AE618 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AE61C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AE61E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AE620 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AE614; -extern s16 D_801AE616; -extern s16 D_801AE618; -extern s16 D_801AE61C; -extern s16 D_801AE61E; -extern s16 D_801AE620; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AE614; - D_80114F34 = D_801AE616; - D_80114F38 = D_801AE618; - D_80114F24 = D_801AE61C; - D_80114F28 = D_801AE61E; - D_80114F2C = D_801AE620; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AE5FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801AE5F4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AE5FC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AE5F4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AE604; -extern u16 D_801AE606; -extern u16 D_801AE608; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AE584; -extern short D_801AE60C; -extern short D_801AE60E; -extern short D_801AE610; -extern s16 D_801AE5FC; -extern s16 D_801AE5FE; -extern s16 D_801AE600; -extern s16 D_801AE5F4; -extern s16 D_801AE5F6; -extern s16 D_801AE5F8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AE604); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AE606); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AE608); - (*(s16 *)&D_801AE60C) = buf[0]; - (*(s16 *)&D_801AE60E) = buf[1]; - (*(s16 *)&D_801AE610) = buf[2]; - D_801AE5FC = D_80114F30 + buf[0]; - D_801AE584 = 0; - D_801AE5FE = D_80114F34 + buf[1]; - D_801AE600 = D_80114F38 + buf[2]; - D_801AE5F4 = D_80114F24 + buf[0]; - D_801AE5F6 = D_80114F28 + buf[1]; - D_801AE5F8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AE5A4; -extern SV4 D_801AE5AC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AE5AC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AE5A4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AE5AC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AE5AC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AE5A4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AE5AC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AE5CC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AE5CC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AE584; -extern s16 D_801B20D8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AE584 = D_801AE584 + 1; - if (D_801AE584 >= 0x1F) { - D_801B20D8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AE584; -extern s16 D_801B20D8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AE584 = D_801AE584 + 1; - if (0x18 < D_801AE584) { - func_8012A4BC(); - D_801B20D8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AE584; -extern void (*D_801AE5C8)(void); -extern short D_801AE60C; -extern short D_801AE60E; -extern short D_801AE610; -extern s16 D_801B20D8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AE584 = D_801AE584 + 1; - if (D_801AE584 >= 0x19) { - if (D_801AE5C8 != 0) { - (*D_801AE5C8)(); - } else { - D_80114F30 = D_80114F30 + D_801AE60C; - D_80114F34 = D_80114F34 + D_801AE60E; - D_80114F38 = D_80114F38 + D_801AE610; - D_80114F24 = D_80114F24 + D_801AE60C; - D_80114F28 = D_80114F28 + D_801AE60E; - D_80114F2C = D_80114F2C + D_801AE610; - func_8012A4BC(); - } - D_801B20D8 = 0; - } -} - - - -extern void (*D_8018BC68[])(void); - -void func_8017BE60(void *a0) { - D_8018BC68[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018BC74[])(void); - -void func_8017BEE4(void *a0) { - D_8018BC74[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017BF20); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017BF58); - -DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017BFA0); - - -extern void (*D_8018BC80[])(void); - -void func_8017BFC8(void *a0) { - D_8018BC80[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C004); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C03C); - -DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C084); - - -extern void (*D_8018BD40[])(void); - -void func_8017C0C8(void *a0) { - D_8018BD40[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C104); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C12C); - -DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C154); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C290); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C624); - - -extern void (*D_8018BD80[])(void); - -void func_8017C664(void *a0) { - D_8018BD80[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C6A0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C814); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017C8FC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CC44); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CCC4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CD10); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CE10); - - -extern void (*D_8018BDA0[])(void); - -void func_8017CE54(void *a0) { - D_8018BDA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CE90); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017CFBC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D098); - - -extern void (*D_8018BDB0[])(void); - -void func_8017D0DC(void *a0) { - D_8018BDB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D118); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D194); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D1E0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D318); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D5F8); - - -extern void (*D_8018BDBC[])(void); - -void func_8017D63C(void *a0) { - D_8018BDBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D678); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D75C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D890); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D900); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017D9C8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DA98); - - -extern void (*D_8018BF40[])(void); - -void func_8017DB00(void *a0) { - D_8018BF40[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DB3C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DB74); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DBC4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DC28); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DC4C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DCC0); - -DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DD7C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DDBC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DE24); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DE8C); - -DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ - - -extern void (*D_8018BF84[])(void); - -void func_8017DF84(void *a0) { - D_8018BF84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017DFC0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017E184); - - -extern void (*D_8018BF8C[])(void); - -void func_8017E218(void *a0) { - D_8018BF8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018BF78; - -void func_8017E254(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018BF78, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017E2F8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017E35C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017EE98); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017EECC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017EF08); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017EF68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017FE8C); - - -extern void (*D_8018BFC0[])(void); - -void func_8017FEC8(void *a0) { - D_8018BFC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017FF04); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017FF54); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8017FFB0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180034); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018019C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801801E8); - - -extern void (*D_8018BFD4[])(void); - -void func_801804F4(void *a0) { - D_8018BFD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180530); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180570); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801805E0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018066C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180740); - - -extern void (*D_8018BFE8[])(void); - -void func_80180794(void *a0) { - D_8018BFE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801807D0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180884); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801808E0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180A50); - -extern void func_80183674(void); - void func_80180AB8(void) { - func_80183674(); - } - - - -extern void (*D_8018C040[])(void); - -void func_80180AD8(void *a0) { - D_8018C040[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180B14); - - -extern s32 func_800167F0(s32 a0); - -s32 func_80180B58(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018C048[])(void); - -void func_80180B7C(void *a0) { - D_8018C048[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180BB8); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_80180BF8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_80180C74(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018C054[])(void); - -void func_80180C94(void *a0) { - D_8018C054[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180CD0); - -s32 func_80180D0C(void) { - return 0; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180D14); - - -extern void (*D_8018C070[])(void); - -void func_80180D5C(void *a0) { - D_8018C070[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180D98); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180DD4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180E58); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180EE0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180F14); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80180FC8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018103C); - -extern void func_80154150(s32 a0, s32 a1); - extern void func_8014706C(void *arg0); - extern s32 func_80171990(u8 *a0); - void func_80181074(s32 arg0) { - func_80154150(arg0, 0x4); - ((void (*)(s32))func_8014706C)(arg0); - ((void (*)(void *))func_80171990)((void *)arg0); - } - - -extern s32 func_80171990(u8 *a0); - void func_801810B0(void) { - ((s32 (*)(void))func_80171990)(); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801810D0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181114); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181164); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801811B4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801811DC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181204); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018127C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801812BC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181388); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801813FC); - -extern s32 func_8017EE98(s32 arg); - extern s32 func_80171990(u8 *a0); - void func_80181440(s32 param_1) { - if (((int (*)(void))func_8017EE98)() != 0) { - ((void (*)(s32))func_80171990)(param_1); - } - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181478); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801814DC); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8018C0A0; - -void func_8018152C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018C0A0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181554); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801815E8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801816AC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181774); - -extern void func_8012A568(void (*a0)(void)); - extern s32 func_80181864(s32 a0); - s32 func_8018183C(void) -{ - ((void (*)(void *))func_8012A568)((void *)func_80181864); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181864); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181918); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181940); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801819F4); - - -extern void (*D_8018C100[])(void); - -void func_80181A78(void *a0) { - D_8018C100[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181AB4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181BA4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181C38); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181CCC); - -void func_80181E98(void) { -} - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181EA0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181F14); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80181F78); - - -extern void (*D_8018C548[])(void); - -void func_80182348(void *a0) { - D_8018C548[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8013C0F8(void *a0); - extern s32 func_8017EF08(s32 a0); - extern s32 D_801A158C; - extern s32 D_801AEB00; - void func_80182384(void) { - ((void (*)(void *))func_8013C0F8)(&D_801A158C); - ((void (*)(s32))func_8017EF08)((s32)&D_801AEB00); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801823BC); - -extern void func_8013C0F8(void *a0); - extern s32 func_8017EF08(s32 a0); - extern s32 D_801A3A0C; - extern s32 D_801AEB58; - void func_8018242C(void) { - ((void (*)(void *))func_8013C0F8)(&D_801A3A0C); - ((void (*)(s32))func_8017EF08)((s32)&D_801AEB58); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182464); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801824D4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182560); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801825D8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801825E8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182614); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018270C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018278C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801827C0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801827F4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182828); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182888); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801828DC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801828FC(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018291C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182950); - -extern void func_801816AC(void); - void func_801829C8(void) { - func_801816AC(); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801829E8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182A30); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182A90); - -extern void func_80181554(void); - void func_80182AD0(void) { - func_80181554(); - } - - -extern void func_80181774(void); - void func_80182AF0(void) { - func_80181774(); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182B10); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182B68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182BB8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182C10); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182CD8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80182E38); - - -extern void (*D_8018C66C[])(void); - -void func_80183088(void *a0) { - D_8018C66C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801830C4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183130); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801831E4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018325C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183338); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183398); - - -extern void (*D_8018C734[])(void); - -void func_80183574(void *a0) { - D_8018C734[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801835B0); - - -extern void (*D_8018C7FC[])(void); - -void func_80183638(void *a0) { - D_8018C7FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183674); - -extern void (*D_8018C94C[])(void); - -void func_801836E0(void *a0) { - D_8018C94C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018371C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183790); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801837DC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018381C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183884); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801838FC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183A1C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183B20); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183BC4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183C9C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183DAC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183E48); - - -extern void (*D_8018C964[])(void); - -void func_80183EFC(void *a0) { - D_8018C964[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80183F38); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801840F8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801842CC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184398); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801844AC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184524); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184578); - - -s32 func_801845B8(s32 arg0) { - return *(u16*)(arg0 + 0x2) == 0x6; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801845CC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018467C(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x8); - } - - -extern void func_8013CAE8(void); - void func_8018469C(void) { - func_8013CAE8(); - } - - - -extern void (*D_8018CC08[])(void); - -void func_801846BC(void *a0) { - D_8018CC08[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801846F8); - -void func_80184808(void *a0) { - *(s32 *)((s32)a0 + 0x48) = 0x1400; - *(s32 *)((s32)a0 + 0x14) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184818); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184870); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801848A4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184940); - -extern void func_8017BEBC(void); - void func_801849A8(void) { - func_8017BEBC(); - } - - -extern s32 func_8017BFA0(void); - void func_801849C8(void) { - func_8017BFA0(); - } - - -extern s32 func_8018183C(void); - void func_801849E8(void) { - func_8018183C(); - } - - -extern void func_80181918(void); - void func_80184A08(void) { - func_80181918(); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184A28); - -void func_80184A50(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - -void func_80184A5C(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x3; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184A68); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80184AA8(void *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - func_8002D4C8(0x921, 0); - } - - -void func_80184AD4(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(int *)((char *)a0 + 0x1c) = 0; - } - - - -// @class: struct -// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold -extern void func_80184B30(u8 *a0); -extern void (*D_8018CC58[])(int); - -void func_80184AE4(int param_1) -{ - ((void (*)(void))func_80184B30)(); - D_8018CC58[*(unsigned short *)(param_1 + 2)](param_1); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184B30); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184B80); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184C24); - -void func_80184C60(void) { -} - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184C68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184CBC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184D68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184DD8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184E68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184EB8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184F68); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80184FD8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185028); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801850E4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018514C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018516C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801851CC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185264); - - -extern void (*D_8018CC70[])(void); - -void func_80185318(void *a0) { - D_8018CC70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185354); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801853F0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185520); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018562C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185734); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185764); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185814); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801858E8); - - -extern void (*D_8018CCA0[])(void); - -void func_8018593C(void *a0) { - D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185978); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801859B4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185A5C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185B04); - - -extern void (*D_8018CD04[])(void); - -void func_80185BA8(void *a0) { - D_8018CD04[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185BE4); - -void func_80185C40(void *a0) { - *(u16 *)((s32)a0 + 0xA) += 1; - if (*(s16 *)((s32)a0 + 0xA) >= 0x101) { - *(u16 *)((s32)a0 + 0xA) = 0x100; - } - } - - - -extern void (*D_8018CE0C[])(void); - -void func_80185C70(void *a0) { - D_8018CE0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185CAC); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185D24); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185D7C); - - -extern void (*D_8018CE14[])(void); - -void func_80185DA4(void *a0) { - D_8018CE14[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185DE0); - -void func_80185E44(void) { -} - - -extern void (*D_8018CE1C[])(void); - -void func_80185E4C(void *a0) { - D_8018CE1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80185E88(u8 *a0) { - *(s16 *)(a0 + 0xFC) = 0; - *(u16 *)(a0 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185EB4); - - -s32 func_80185EDC(void) { - return 122; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185EE4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80185F48); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801860A8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018628C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186348); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801863F4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186468); - - -extern void (*D_801AAA64[])(void); - -void func_80186688(void *a0) { - D_801AAA64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801866C4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186758); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018677C); - - -extern s16 D_801B1EF4; - extern s16 D_801B1EF6; - extern s16 D_801B1EF8; - extern s16 D_801B1EFA; - void func_8018681C(s32 arg0, s32 arg1, s32 arg2) { - D_801B1EF4 = *(u16 *)((s32)arg0 + 0x0); - D_801B1EF6 = *(u16 *)((s32)arg0 + 0x2); - D_801B1EF8 = arg1; - D_801B1EFA = arg2; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018684C); - -extern s16 D_801B1EFA; - -void func_801868C4(u16 a0) { - s16 *p = &D_801B1EFA; - *(u16 *)((char *)p + 0x0) += a0; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801868E0); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186938); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186A0C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186A48); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186A94); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186B70); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186E34); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186E58); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186E80); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186F08); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186F74); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80186FE4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_8018705C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801870A8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801871C4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187200); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187314); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801875F8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187720); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187754); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187798); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801878A8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187998); - -void func_801879A8(s32 *a0, s8 a1, s8 a2, s8 a3) { - *(s8*)((s32)a0 + 0x4) = a1; - *(s8*)((s32)a0 + 0x5) = a2; - *(s8*)((s32)a0 + 0x6) = a3; - } - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_801879B8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187AB8); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187B34); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80187FD4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80188160); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_801734BC", func_80188194); - diff --git a/src/ov_SC06_000/ov_SC06_000_jr_80178D40.c b/src/ov_SC06_000/ov_SC06_000_jr_80178D40.c new file mode 100644 index 000000000..c2add4a33 --- /dev/null +++ b/src/ov_SC06_000/ov_SC06_000_jr_80178D40.c @@ -0,0 +1,5241 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018B470[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801AD8F0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018B464[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018B4A8[]; +extern unsigned short D_8018B4B0[]; +extern unsigned short D_8018B4B8[]; +extern unsigned char D_801AD8F8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801AD8F0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018B4C0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801ADA2C; +extern M2C_UNK D_801ADA30; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AD9B8; +extern void (*D_8018B4F0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801ADA34[]; +extern u8 D_801ADA3C[]; +extern u8 D_801AD9EC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018B4F8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018B514[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018B51C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018B584[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018B528; +extern u8 D_8018B534; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018B5B8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018B5C0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018B614[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018B648[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018B638[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018B664; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018B6DC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018B6E4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018B6EC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018B6F4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018B6FC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018B704[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018B710[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018B71C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018B728[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018B748[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018B750[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018B758[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018B760[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018B768[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018B770[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018B778[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018B780[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018B788[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018B790[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018B798[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018B7A0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018B7A8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018B7B0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018B7B8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018B7C0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018B7C8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018B7D0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018B7D8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018B7E0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018B7E8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018B7F0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018B7F8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018B83C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018B800; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018B86C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018B8A8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018B900[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018B910[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018B918[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018BA80[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018BA8C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801ACFE8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B20D8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AE170; +extern short D_801B2184; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B2184) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B2184)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AE170 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B2184) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B20A8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B20A8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B2184) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B2184) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AE5CC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AE174; + extern s32 D_801AE588; + extern s16 D_801AE58C; + extern s16 D_801AE590; + extern s16 D_801AE594; + extern s16 D_801AE598; + extern s32 D_801AE5A0; + extern s32 D_801AE5A4; + extern s32 D_801AE5B4; + extern s16 D_801AE5B8; + extern s16 D_801AE5BC; + extern s32 D_801AE5C0; + extern s32 D_801AE5C8; + extern s32 D_801AE5CC[10]; + extern s32 D_801B1FF0; + extern s16 D_801B20A8; + extern s32 D_801B20D4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B20A8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AE588); + D_801AE588 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AE594, D_801AE598 ? 0x48 : 0x40); + (*(s16*)&D_801B2184) = 2; + break; + case 0: + func_80179B28(D_801AE588); + D_801AE588 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AE58C, D_801AE590 ? 0x48 : 0x40); + (*(s16*)&D_801B2184) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B1FF0 != 0) { + func_80179B28(D_801AE588); + D_801AE588 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AE58C, D_801AE590 ? 0x48 : 0x40); + (*(s16*)&D_801B2184) = 1; + } else { + (*(s16*)&D_801B2184) = 3; + } + break; + case 0x32: + func_80179B28(D_801AE588); + D_801AE588 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AE58C, + D_801AE590 ? 0x48 : 0x40); + (*(s16*)&D_801B2184) = 1; + break; + case 2: + func_80179B28(D_801AE588); + if (D_801AE5A0 != 0) { + D_801AE170 = D_801AE5A0; + D_801AE5A0 = 0; + (*(s16*)&D_801B2184) = 3; + return; + } + (*(s16*)&D_801B2184) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B2184) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B2184) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2184) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B2184) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2184) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B2184) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2184) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2184) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B2184) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B2184) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B2184) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x1B: + D_801AE5C0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B2184) = 4; + D_801AE174 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B2184) = 5; + D_801AE5B4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AE5B4 = (s32)func_8017A3B0; + (*(s16*)&D_801B2184) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x24: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2184) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2184) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B2184) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2184) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2184) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2184) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2184) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2184) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B2184) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AE5A4); + (*(s16*)&D_801B2184) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AE5A4); + (*(s16*)&D_801B2184) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AE5A4); + (*(s16*)&D_801B2184) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AE5A4); + (*(s16*)&D_801B2184) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + break; + case 0x4E: + D_801AE5C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x2B: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B2184) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B20D4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B2184) = 3; + break; + case 0x34: + (*(s16*)&D_801B2184) = 3; + D_801AE170 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AE5A0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B2184) = 3; + D_801AE170 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B2184) = 3; + D_801AE170 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AE170 = *(s32 *)(D_801AE170 + 4); + return; + case 0x37: + (*(s16*)&D_801B2184) = 3; + D_801AE58C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AE590 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B2184) = 3; + D_801AE594 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AE598 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B2184) = 3; + D_801AE58C = w1; + D_801AE590 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B2184) = 3; + D_801AE594 = w2; + D_801AE598 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + case 0x43: + D_801AE5B4 = (s32)func_8017A3D8; + D_801AE5BC = 0; + (*(s16*)&D_801B2184) = 5; + D_801AE5B8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2184) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2184) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2184) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AE5CC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B2184) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AE5CC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B2184) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AE5CC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B2184) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AE5CC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B2184) = 3; + break; + default: + break; + } +Lend: + D_801AE170 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AE59C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AE59C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AE59C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AE59C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AE5C4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AE5C4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AE580; + +s32 func_8017A3B0(void) { + switch (D_801AE580) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AE5BC; +extern short D_801AE5B8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AE5BC) { + case 0: + func_800D0CA0(1); + D_801AE5BC = D_801AE5BC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AE5B8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AE5BC = D_801AE5BC + 1; + if (D_801AE5BC < 0x1E) { + return 0; + } + D_801AE5BC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AE5FC; + extern s16 D_801AE5FE; + extern s16 D_801AE600; + extern s16 D_801AE5F4; + extern s16 D_801AE5F6; + extern s16 D_801AE5F8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AE5FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AE5FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AE600, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AE5F4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AE5F6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AE5F8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AE584; +extern u16 D_801AE604; +extern u16 D_801AE606; +extern u16 D_801AE608; +extern s16 D_801B20D8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B20D8 = 0; + D_801AE584 = 0; + D_801AE604 = D_80126B5E; + D_801AE606 = D_80126B62; + D_801AE608 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018BBC8[]; + extern s16 D_801AE5FC; + extern s16 D_801AE5F4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AE5FC; + s16 *p78C = &D_801AE5F4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B20D8 = 1; + D_801AE584 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AE5A4; + extern SV4_8017B368 D_801AE5AC; + extern s16 D_801AE5FC; + extern s16 D_801AE5F4; + extern u16 D_8018BBC8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AE5A4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AE5AC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018BBC8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018BBC8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AE5FC) = loc0; + (*(SV4_8017B368 *)&D_801AE5F4) = loc1; + D_801B20D8 = 1; + D_801AE584 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018BBC8[]; + extern s16 D_801AE5FC; + extern s16 D_801AE5FE; + extern s16 D_801AE600; + extern s16 D_801AE5F4; + extern s16 D_801AE5F6; + extern s16 D_801AE5F8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018BBC8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AE5FC; + s16 *p78C = &D_801AE5F4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AE5FE; + v798 = D_801AE600; + v78C = *p78C; + v78E = D_801AE5F6; + v790 = D_801AE5F8; + __asm__ __volatile__(""); + D_801B20D8 = 1; + D_801AE584 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AE584; +extern s16 D_801AE5FC; +extern s16 D_801AE5FE; +extern s16 D_801AE600; +extern s16 D_801AE5F4; +extern s16 D_801AE5F6; +extern s16 D_801AE5F8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AE584 = 0; + D_801AE5FC = (s16) D_80114F30; + D_801AE5FE = (s16) D_80114F34; + D_801AE600 = (s16) D_80114F38; + D_801AE5F4 = (s16) D_80114F24; + D_801AE5F6 = (s16) D_80114F28; + D_801AE5F8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AE614; +extern s16 D_801AE616; +extern s16 D_801AE618; +extern s16 D_801AE61C; +extern s16 D_801AE61E; +extern s16 D_801AE620; + +void func_8017B824(void) { + D_801AE614 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AE616 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AE618 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AE61C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AE61E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AE620 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AE614; +extern s16 D_801AE616; +extern s16 D_801AE618; +extern s16 D_801AE61C; +extern s16 D_801AE61E; +extern s16 D_801AE620; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AE614; + D_80114F34 = D_801AE616; + D_80114F38 = D_801AE618; + D_80114F24 = D_801AE61C; + D_80114F28 = D_801AE61E; + D_80114F2C = D_801AE620; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AE5FC), src[8..15] -> (*(S8_8017B8E8 *)&D_801AE5F4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AE5FC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AE5F4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AE604; +extern u16 D_801AE606; +extern u16 D_801AE608; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AE584; +extern short D_801AE60C; +extern short D_801AE60E; +extern short D_801AE610; +extern s16 D_801AE5FC; +extern s16 D_801AE5FE; +extern s16 D_801AE600; +extern s16 D_801AE5F4; +extern s16 D_801AE5F6; +extern s16 D_801AE5F8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AE604); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AE606); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AE608); + (*(s16 *)&D_801AE60C) = buf[0]; + (*(s16 *)&D_801AE60E) = buf[1]; + (*(s16 *)&D_801AE610) = buf[2]; + D_801AE5FC = D_80114F30 + buf[0]; + D_801AE584 = 0; + D_801AE5FE = D_80114F34 + buf[1]; + D_801AE600 = D_80114F38 + buf[2]; + D_801AE5F4 = D_80114F24 + buf[0]; + D_801AE5F6 = D_80114F28 + buf[1]; + D_801AE5F8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AE5A4; +extern SV4 D_801AE5AC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AE5AC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AE5A4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AE5AC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AE5AC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AE5A4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AE5AC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AE5CC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AE5CC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AE584; +extern s16 D_801B20D8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AE584 = D_801AE584 + 1; + if (D_801AE584 >= 0x1F) { + D_801B20D8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AE584; +extern s16 D_801B20D8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AE584 = D_801AE584 + 1; + if (0x18 < D_801AE584) { + func_8012A4BC(); + D_801B20D8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AE584; +extern void (*D_801AE5C8)(void); +extern short D_801AE60C; +extern short D_801AE60E; +extern short D_801AE610; +extern s16 D_801B20D8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AE584 = D_801AE584 + 1; + if (D_801AE584 >= 0x19) { + if (D_801AE5C8 != 0) { + (*D_801AE5C8)(); + } else { + D_80114F30 = D_80114F30 + D_801AE60C; + D_80114F34 = D_80114F34 + D_801AE60E; + D_80114F38 = D_80114F38 + D_801AE610; + D_80114F24 = D_80114F24 + D_801AE60C; + D_80114F28 = D_80114F28 + D_801AE60E; + D_80114F2C = D_80114F2C + D_801AE610; + func_8012A4BC(); + } + D_801B20D8 = 0; + } +} + + + +extern void (*D_8018BC68[])(void); + +void func_8017BE60(void *a0) { + D_8018BC68[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018BC74[])(void); + +void func_8017BEE4(void *a0) { + D_8018BC74[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017BF20); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017BF58); + +DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017BFA0); + + +extern void (*D_8018BC80[])(void); + +void func_8017BFC8(void *a0) { + D_8018BC80[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C004); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C03C); + +DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C084); + + +extern void (*D_8018BD40[])(void); + +void func_8017C0C8(void *a0) { + D_8018BD40[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C104); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C12C); + +DEFINE_func_8017C14C() /* dedup: shared engine-core @0x8017C14C (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C154); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C290); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C624); + + +extern void (*D_8018BD80[])(void); + +void func_8017C664(void *a0) { + D_8018BD80[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C6A0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C814); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017C8FC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CC44); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CCC4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CD10); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CE10); + + +extern void (*D_8018BDA0[])(void); + +void func_8017CE54(void *a0) { + D_8018BDA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CE90); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017CFBC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D098); + + +extern void (*D_8018BDB0[])(void); + +void func_8017D0DC(void *a0) { + D_8018BDB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D118); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D194); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D1E0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D318); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D5F8); + + +extern void (*D_8018BDBC[])(void); + +void func_8017D63C(void *a0) { + D_8018BDBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D678); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D75C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D890); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D900); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017D9C8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DA98); + + +extern void (*D_8018BF40[])(void); + +void func_8017DB00(void *a0) { + D_8018BF40[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DB3C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DB74); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DBC4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DC28); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DC4C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DCC0); + +DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DD7C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DDBC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DE24); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DE8C); + +DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */ + + +extern void (*D_8018BF84[])(void); + +void func_8017DF84(void *a0) { + D_8018BF84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017DFC0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017E184); + + +extern void (*D_8018BF8C[])(void); + +void func_8017E218(void *a0) { + D_8018BF8C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018BF78; + +void func_8017E254(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018BF78, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017E2F8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017E35C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017EE98); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017EECC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017EF08); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017EF68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017FE8C); + + +extern void (*D_8018BFC0[])(void); + +void func_8017FEC8(void *a0) { + D_8018BFC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017FF04); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017FF54); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8017FFB0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180034); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018019C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801801E8); + + +extern void (*D_8018BFD4[])(void); + +void func_801804F4(void *a0) { + D_8018BFD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180530); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180570); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801805E0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018066C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180740); + + +extern void (*D_8018BFE8[])(void); + +void func_80180794(void *a0) { + D_8018BFE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801807D0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180884); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801808E0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180A50); + +extern void func_80183674(void); + void func_80180AB8(void) { + func_80183674(); + } + + + +extern void (*D_8018C040[])(void); + +void func_80180AD8(void *a0) { + D_8018C040[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180B14); + + +extern s32 func_800167F0(s32 a0); + +s32 func_80180B58(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018C048[])(void); + +void func_80180B7C(void *a0) { + D_8018C048[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180BB8); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_80180BF8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_80180C74(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018C054[])(void); + +void func_80180C94(void *a0) { + D_8018C054[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180CD0); + +s32 func_80180D0C(void) { + return 0; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180D14); + + +extern void (*D_8018C070[])(void); + +void func_80180D5C(void *a0) { + D_8018C070[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180D98); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180DD4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180E58); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180EE0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180F14); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80180FC8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018103C); + +extern void func_80154150(s32 a0, s32 a1); + extern void func_8014706C(void *arg0); + extern s32 func_80171990(u8 *a0); + void func_80181074(s32 arg0) { + func_80154150(arg0, 0x4); + ((void (*)(s32))func_8014706C)(arg0); + ((void (*)(void *))func_80171990)((void *)arg0); + } + + +extern s32 func_80171990(u8 *a0); + void func_801810B0(void) { + ((s32 (*)(void))func_80171990)(); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801810D0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181114); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181164); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801811B4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801811DC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181204); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018127C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801812BC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181388); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801813FC); + +extern s32 func_8017EE98(s32 arg); + extern s32 func_80171990(u8 *a0); + void func_80181440(s32 param_1) { + if (((int (*)(void))func_8017EE98)() != 0) { + ((void (*)(s32))func_80171990)(param_1); + } + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181478); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801814DC); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8018C0A0; + +void func_8018152C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018C0A0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181554); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801815E8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801816AC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181774); + +extern void func_8012A568(void (*a0)(void)); + extern s32 func_80181864(s32 a0); + s32 func_8018183C(void) +{ + ((void (*)(void *))func_8012A568)((void *)func_80181864); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181864); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181918); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181940); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801819F4); + + +extern void (*D_8018C100[])(void); + +void func_80181A78(void *a0) { + D_8018C100[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181AB4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181BA4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181C38); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181CCC); + +void func_80181E98(void) { +} + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181EA0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181F14); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80181F78); + + +extern void (*D_8018C548[])(void); + +void func_80182348(void *a0) { + D_8018C548[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8013C0F8(void *a0); + extern s32 func_8017EF08(s32 a0); + extern s32 D_801A158C; + extern s32 D_801AEB00; + void func_80182384(void) { + ((void (*)(void *))func_8013C0F8)(&D_801A158C); + ((void (*)(s32))func_8017EF08)((s32)&D_801AEB00); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801823BC); + +extern void func_8013C0F8(void *a0); + extern s32 func_8017EF08(s32 a0); + extern s32 D_801A3A0C; + extern s32 D_801AEB58; + void func_8018242C(void) { + ((void (*)(void *))func_8013C0F8)(&D_801A3A0C); + ((void (*)(s32))func_8017EF08)((s32)&D_801AEB58); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182464); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801824D4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182560); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801825D8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801825E8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182614); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018270C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018278C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801827C0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801827F4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182828); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182888); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801828DC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801828FC(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018291C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182950); + +extern void func_801816AC(void); + void func_801829C8(void) { + func_801816AC(); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801829E8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182A30); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182A90); + +extern void func_80181554(void); + void func_80182AD0(void) { + func_80181554(); + } + + +extern void func_80181774(void); + void func_80182AF0(void) { + func_80181774(); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182B10); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182B68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182BB8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182C10); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182CD8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80182E38); + + +extern void (*D_8018C66C[])(void); + +void func_80183088(void *a0) { + D_8018C66C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801830C4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183130); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801831E4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018325C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183338); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183398); + + +extern void (*D_8018C734[])(void); + +void func_80183574(void *a0) { + D_8018C734[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801835B0); + + +extern void (*D_8018C7FC[])(void); + +void func_80183638(void *a0) { + D_8018C7FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183674); + +extern void (*D_8018C94C[])(void); + +void func_801836E0(void *a0) { + D_8018C94C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018371C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183790); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801837DC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018381C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183884); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801838FC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183A1C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183B20); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183BC4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183C9C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183DAC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183E48); + + +extern void (*D_8018C964[])(void); + +void func_80183EFC(void *a0) { + D_8018C964[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80183F38); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801840F8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801842CC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184398); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801844AC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184524); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184578); + + +s32 func_801845B8(s32 arg0) { + return *(u16*)(arg0 + 0x2) == 0x6; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801845CC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018467C(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x8); + } + + +extern void func_8013CAE8(void); + void func_8018469C(void) { + func_8013CAE8(); + } + + + +extern void (*D_8018CC08[])(void); + +void func_801846BC(void *a0) { + D_8018CC08[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801846F8); + +void func_80184808(void *a0) { + *(s32 *)((s32)a0 + 0x48) = 0x1400; + *(s32 *)((s32)a0 + 0x14) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184818); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184870); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801848A4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184940); + +extern void func_8017BEBC(void); + void func_801849A8(void) { + func_8017BEBC(); + } + + +extern s32 func_8017BFA0(void); + void func_801849C8(void) { + func_8017BFA0(); + } + + +extern s32 func_8018183C(void); + void func_801849E8(void) { + func_8018183C(); + } + + +extern void func_80181918(void); + void func_80184A08(void) { + func_80181918(); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184A28); + +void func_80184A50(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + } + + +void func_80184A5C(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x3; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184A68); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80184AA8(void *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + func_8002D4C8(0x921, 0); + } + + +void func_80184AD4(void *a0) { + *(short *)((char *)a0 + 0x2) = 0x5; + *(int *)((char *)a0 + 0x1c) = 0; + } + + + +// @class: struct +// @stuck: none — MATCH expected; param_1 survives jal in $s0, table fp-call with %lo-fold +extern void func_80184B30(u8 *a0); +extern void (*D_8018CC58[])(int); + +void func_80184AE4(int param_1) +{ + ((void (*)(void))func_80184B30)(); + D_8018CC58[*(unsigned short *)(param_1 + 2)](param_1); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184B30); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184B80); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184C24); + +void func_80184C60(void) { +} + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184C68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184CBC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184D68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184DD8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184E68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184EB8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184F68); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80184FD8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185028); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801850E4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018514C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018516C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801851CC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185264); + + +extern void (*D_8018CC70[])(void); + +void func_80185318(void *a0) { + D_8018CC70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185354); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801853F0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185520); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018562C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185734); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185764); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185814); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801858E8); + + +extern void (*D_8018CCA0[])(void); + +void func_8018593C(void *a0) { + D_8018CCA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185978); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801859B4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185A5C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185B04); + + +extern void (*D_8018CD04[])(void); + +void func_80185BA8(void *a0) { + D_8018CD04[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185BE4); + +void func_80185C40(void *a0) { + *(u16 *)((s32)a0 + 0xA) += 1; + if (*(s16 *)((s32)a0 + 0xA) >= 0x101) { + *(u16 *)((s32)a0 + 0xA) = 0x100; + } + } + + + +extern void (*D_8018CE0C[])(void); + +void func_80185C70(void *a0) { + D_8018CE0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185CAC); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185D24); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185D7C); + + +extern void (*D_8018CE14[])(void); + +void func_80185DA4(void *a0) { + D_8018CE14[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185DE0); + +void func_80185E44(void) { +} + + +extern void (*D_8018CE1C[])(void); + +void func_80185E4C(void *a0) { + D_8018CE1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80185E88(u8 *a0) { + *(s16 *)(a0 + 0xFC) = 0; + *(u16 *)(a0 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185EB4); + + +s32 func_80185EDC(void) { + return 122; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185EE4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80185F48); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801860A8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018628C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186348); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801863F4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186468); + + +extern void (*D_801AAA64[])(void); + +void func_80186688(void *a0) { + D_801AAA64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801866C4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186758); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018677C); + + +extern s16 D_801B1EF4; + extern s16 D_801B1EF6; + extern s16 D_801B1EF8; + extern s16 D_801B1EFA; + void func_8018681C(s32 arg0, s32 arg1, s32 arg2) { + D_801B1EF4 = *(u16 *)((s32)arg0 + 0x0); + D_801B1EF6 = *(u16 *)((s32)arg0 + 0x2); + D_801B1EF8 = arg1; + D_801B1EFA = arg2; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018684C); + +extern s16 D_801B1EFA; + +void func_801868C4(u16 a0) { + s16 *p = &D_801B1EFA; + *(u16 *)((char *)p + 0x0) += a0; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801868E0); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186938); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186A0C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186A48); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186A94); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186B70); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186E34); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186E58); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186E80); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186F08); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186F74); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80186FE4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_8018705C); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801870A8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801871C4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187200); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187314); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801875F8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187720); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187754); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187798); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801878A8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187998); + +void func_801879A8(s32 *a0, s8 a1, s8 a2, s8 a3) { + *(s8*)((s32)a0 + 0x4) = a1; + *(s8*)((s32)a0 + 0x5) = a2; + *(s8*)((s32)a0 + 0x6) = a3; + } + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_801879B8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187AB8); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187B34); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80187FD4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80188160); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_80178D40", func_80188194); + + diff --git a/src/ov_SC06_006/ov_SC06_006_jr_801734BC.c b/src/ov_SC06_006/ov_SC06_006_jr_801734BC.c index 13db0dbdc..cb168f299 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_801734BC.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_801734BC.c @@ -3084,1161 +3084,3 @@ void func_80178D18(void) { D_801F8B64 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F7FE4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801F7FE4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801F7FE4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801F7FE4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801F800C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801F800C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801F7FC8; - -s32 func_8017A3B0(void) { - switch (D_801F7FC8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801F8004; -extern short D_801F8000; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801F8004) { - case 0: - func_800D0CA0(1); - D_801F8004 = D_801F8004 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801F8000; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801F8004 = D_801F8004 + 1; - if (D_801F8004 < 0x1E) { - return 0; - } - D_801F8004 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801F8044; - extern s16 D_801F8046; - extern s16 D_801F8048; - extern s16 D_801F803C; - extern s16 D_801F803E; - extern s16 D_801F8040; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F8044, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F8046, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F8048, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F803C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F803E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F8040, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801F7FCC; -extern u16 D_801F804C; -extern u16 D_801F804E; -extern u16 D_801F8050; -extern s16 D_801F8AF4; - -void func_8017B1D8(void) { - func_8012A418(); - D_801F8AF4 = 0; - D_801F7FCC = 0; - D_801F804C = D_80126B5E; - D_801F804E = D_80126B62; - D_801F8050 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801856EC[]; - extern s16 D_801F8044; - extern s16 D_801F803C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801856EC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801856EC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F8044; - s16 *p78C = &D_801F803C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801F8AF4 = 1; - D_801F7FCC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801F7FEC; - extern SV4_8017B368 D_801F7FF4; - extern s16 D_801F8044; - extern s16 D_801F803C; - extern u16 D_801856EC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801F7FEC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801F7FF4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801856EC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801856EC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801F8044) = loc0; - (*(SV4_8017B368 *)&D_801F803C) = loc1; - D_801F8AF4 = 1; - D_801F7FCC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801856EC[]; - extern s16 D_801F8044; - extern s16 D_801F8046; - extern s16 D_801F8048; - extern s16 D_801F803C; - extern s16 D_801F803E; - extern s16 D_801F8040; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801856EC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801856EC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801F8044; - s16 *p78C = &D_801F803C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801F8046; - v798 = D_801F8048; - v78C = *p78C; - v78E = D_801F803E; - v790 = D_801F8040; - __asm__ __volatile__(""); - D_801F8AF4 = 1; - D_801F7FCC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F7FCC; -extern s16 D_801F8044; -extern s16 D_801F8046; -extern s16 D_801F8048; -extern s16 D_801F803C; -extern s16 D_801F803E; -extern s16 D_801F8040; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801F7FCC = 0; - D_801F8044 = (s16) D_80114F30; - D_801F8046 = (s16) D_80114F34; - D_801F8048 = (s16) D_80114F38; - D_801F803C = (s16) D_80114F24; - D_801F803E = (s16) D_80114F28; - D_801F8040 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801F805C; -extern s16 D_801F805E; -extern s16 D_801F8060; -extern s16 D_801F8064; -extern s16 D_801F8066; -extern s16 D_801F8068; - -void func_8017B824(void) { - D_801F805C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801F805E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801F8060 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801F8064 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801F8066 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801F8068 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801F805C; -extern s16 D_801F805E; -extern s16 D_801F8060; -extern s16 D_801F8064; -extern s16 D_801F8066; -extern s16 D_801F8068; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801F805C; - D_80114F34 = D_801F805E; - D_80114F38 = D_801F8060; - D_80114F24 = D_801F8064; - D_80114F28 = D_801F8066; - D_80114F2C = D_801F8068; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801F8044), src[8..15] -> (*(S8_8017B8E8 *)&D_801F803C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801F8044) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801F803C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801F804C; -extern u16 D_801F804E; -extern u16 D_801F8050; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801F7FCC; -extern short D_801F8054; -extern short D_801F8056; -extern short D_801F8058; -extern s16 D_801F8044; -extern s16 D_801F8046; -extern s16 D_801F8048; -extern s16 D_801F803C; -extern s16 D_801F803E; -extern s16 D_801F8040; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F804C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F804E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F8050); - (*(s16 *)&D_801F8054) = buf[0]; - (*(s16 *)&D_801F8056) = buf[1]; - (*(s16 *)&D_801F8058) = buf[2]; - D_801F8044 = D_80114F30 + buf[0]; - D_801F7FCC = 0; - D_801F8046 = D_80114F34 + buf[1]; - D_801F8048 = D_80114F38 + buf[2]; - D_801F803C = D_80114F24 + buf[0]; - D_801F803E = D_80114F28 + buf[1]; - D_801F8040 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801F7FEC; -extern SV4 D_801F7FF4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F7FF4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801F7FEC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801F7FF4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F7FF4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801F7FEC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801F7FF4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801F8014[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801F8014; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801F7FCC; -extern s16 D_801F8AF4; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801F7FCC = D_801F7FCC + 1; - if (D_801F7FCC >= 0x1F) { - D_801F8AF4 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801F7FCC; -extern s16 D_801F8AF4; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F7FCC = D_801F7FCC + 1; - if (0x18 < D_801F7FCC) { - func_8012A4BC(); - D_801F8AF4 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801F7FCC; -extern void (*D_801F8010)(void); -extern short D_801F8054; -extern short D_801F8056; -extern short D_801F8058; -extern s16 D_801F8AF4; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801F7FCC = D_801F7FCC + 1; - if (D_801F7FCC >= 0x19) { - if (D_801F8010 != 0) { - (*D_801F8010)(); - } else { - D_80114F30 = D_80114F30 + D_801F8054; - D_80114F34 = D_80114F34 + D_801F8056; - D_80114F38 = D_80114F38 + D_801F8058; - D_80114F24 = D_80114F24 + D_801F8054; - D_80114F28 = D_80114F28 + D_801F8056; - D_80114F2C = D_80114F2C + D_801F8058; - func_8012A4BC(); - } - D_801F8AF4 = 0; - } -} - - - -extern void (*D_8018578C[])(void); - -void func_8017BE60(void *a0) { - D_8018578C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017BEBC); - - -extern void (*D_801857E8[])(void); - -void func_8017CD9C(void *a0) { - D_801857E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801857F0[])(void); - -void func_8017CE40(void *a0) { - D_801857F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017CE7C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEE0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017CF5C); - - -extern void (*D_80185804[])(void); - -void func_8017CF7C(void *a0) { - D_80185804[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017CFB8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D000); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D04C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D0AC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D0D4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D0FC); - - -extern void (*D_80185810[])(void); - -void func_8017D19C(void *a0) { - D_80185810[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D1D8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D278); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D400); - -extern s32 func_8017D420(void); - -s32 func_8017D420(void) { - return 0x96; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D460); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D490); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D4C0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D4F0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D528); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D558); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D5A0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D5D0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D600); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D650); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D688); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D6D0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D700); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D730); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D90C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D944); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D974); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D9AC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017D9E4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017DA8C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017DB90); - - -extern void (*D_80185F58[])(void); - -void func_8017DD28(void *a0) { - D_80185F58[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017DD64); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017DFA4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017DFEC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E078); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E168); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E330); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E550); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E734); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017E878); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017EA18); - - -extern void (*D_80185F8C[])(void); - -void func_8017ECE8(void *a0) { - D_80185F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017ED24); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017EEA4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F074); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F258); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F2A0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F308); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F3E8); - -void func_8017F4B8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F4C0); - - -extern void (*D_801861E4[])(void); - -void func_8017F594(void *a0) { - D_801861E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F5D0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F7C4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F824); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F8CC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017F934); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017FA2C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017FD4C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017FECC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017FF24); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8017FFA8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801800B8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801802A0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801802E0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8018034C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180390); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801803F4); - -extern s32 func_8018034C(void); - void func_80180424(void) { - ((void (*)(void))func_8018034C)(); - } - - -extern s32 func_8018034C(void); - void func_80180444(void) { - func_8018034C(); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180464); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180484); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801804DC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180534); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8018056C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801805EC); - -extern s32 func_8018034C(void); - void func_80180624(void) { - ((void (*)(void))func_8018034C)(); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180644); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801806B4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801806D4); - -extern s32 func_8018034C(void); - void func_80180714(void) { - func_8018034C(); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180734); - -extern s32 func_8018034C(void); - void func_801807CC(void) { - func_8018034C(); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801807EC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180840); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801808C0); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8018097C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180A44); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180AE8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180BF8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180C34); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180C6C); - - -extern s16 D_801F8094; - u32 func_80180CA8(void) { - return (u32)(D_801F8094 == 1); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180CC0); - - -extern s16 D_801F8094; - u32 func_80180CD4(void) { - return (u32)(D_801F8094 == 2); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180CEC); - -extern s16 D_801F8094; - u32 func_80180D00(void) { - return (u32)(D_801F8094 == 3); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180D18); - - -extern s16 D_801F8094; - u32 func_80180D2C(void) { - return (u32)(D_801F8094 == 4); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180D44); - - -extern s16 D_801F8094; - u32 func_80180D58(void) { - return (u32)(D_801F8094 == 5); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180D70); - -extern s16 D_801F8094; - u32 func_80180D84(void) { - return (u32)(D_801F8094 == 7); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180D9C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180DB0); - -void func_80180E4C(void *a0) { - *(s16 *)((char *)a0 + 0x34) = 0; - *(s32 *)((char *)a0 + 0x1c) = 0x10; - *(u16 *)((char *)a0 + 0x2) += 1; - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180E68); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180EA8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180EC4); - - -extern void (*D_8018646C[])(void); - -void func_80180EFC(void *a0) { - D_8018646C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180F38); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180F90); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80180FE8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181120); - - -extern void (*D_801F5530[])(void); - -void func_80181198(void *a0) { - D_801F5530[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801811D4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801813D4); - -extern void func_80146C3C(void); - void func_801813F4(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181414); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_8018146C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181498); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801814DC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_801815DC); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181658); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181AF8); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181C84); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_801734BC", func_80181CB8); - diff --git a/src/ov_SC06_006/ov_SC06_006_jr_80178D40.c b/src/ov_SC06_006/ov_SC06_006_jr_80178D40.c new file mode 100644 index 000000000..7897221df --- /dev/null +++ b/src/ov_SC06_006/ov_SC06_006_jr_80178D40.c @@ -0,0 +1,4607 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184F94[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801F7338; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184F88[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80184FCC[]; +extern unsigned short D_80184FD4[]; +extern unsigned short D_80184FDC[]; +extern unsigned char D_801F7340[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801F7338; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80184FE4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801F7474; +extern M2C_UNK D_801F7478; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801F7400; +extern void (*D_80185014[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801F747C[]; +extern u8 D_801F7484[]; +extern u8 D_801F7434[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018501C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185038[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185040[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801850A8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018504C; +extern u8 D_80185058; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801850DC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801850E4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185138[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018516C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018515C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185188; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185200[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80185208[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185210[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80185218[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185220[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185228[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185234[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185240[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018524C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018525C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018526C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185274[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018527C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185284[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018528C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185294[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018529C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801852A4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801852AC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801852B4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801852BC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801852C4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801852CC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801852D4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801852DC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801852E4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801852EC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801852F4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801852FC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185304[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018530C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185314[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018531C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185360[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185324; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185390[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801853CC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185424[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185434[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018543C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801855A4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801855B0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801F68F0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801F8AF4; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801F7BB8; +extern short D_801F8B64; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801F8B64) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801F8B64)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801F7BB8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801F8B64) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801F8AC0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801F8AC0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801F8B64) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801F8B64) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801F8014[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801F7BBC; + extern s32 D_801F7FD0; + extern s16 D_801F7FD4; + extern s16 D_801F7FD8; + extern s16 D_801F7FDC; + extern s16 D_801F7FE0; + extern s32 D_801F7FE8; + extern s32 D_801F7FEC; + extern s32 D_801F7FFC; + extern s16 D_801F8000; + extern s16 D_801F8004; + extern s32 D_801F8008; + extern s32 D_801F8010; + extern s32 D_801F8014[10]; + extern s32 D_801F89F8; + extern s16 D_801F8AC0; + extern s32 D_801F8AF0; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801F8AC0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801F7FD0); + D_801F7FD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F7FDC, D_801F7FE0 ? 0x48 : 0x40); + (*(s16*)&D_801F8B64) = 2; + break; + case 0: + func_80179B28(D_801F7FD0); + D_801F7FD0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801F7FD4, D_801F7FD8 ? 0x48 : 0x40); + (*(s16*)&D_801F8B64) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801F89F8 != 0) { + func_80179B28(D_801F7FD0); + D_801F7FD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801F7FD4, D_801F7FD8 ? 0x48 : 0x40); + (*(s16*)&D_801F8B64) = 1; + } else { + (*(s16*)&D_801F8B64) = 3; + } + break; + case 0x32: + func_80179B28(D_801F7FD0); + D_801F7FD0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801F7FD4, + D_801F7FD8 ? 0x48 : 0x40); + (*(s16*)&D_801F8B64) = 1; + break; + case 2: + func_80179B28(D_801F7FD0); + if (D_801F7FE8 != 0) { + D_801F7BB8 = D_801F7FE8; + D_801F7FE8 = 0; + (*(s16*)&D_801F8B64) = 3; + return; + } + (*(s16*)&D_801F8B64) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801F8B64) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801F8B64) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801F8B64) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801F8B64) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801F8B64) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x1B: + D_801F8008 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801F8B64) = 4; + D_801F7BBC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801F8B64) = 5; + D_801F7FFC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801F7FFC = (s32)func_8017A3B0; + (*(s16*)&D_801F8B64) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x24: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F8B64) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801F8B64) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801F8B64) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F8B64) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F8B64) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801F8B64) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F8B64) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801F8B64) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801F8B64) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F7FEC); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801F7FEC); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F7FEC); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801F7FEC); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x4E: + D_801F8010 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x2B: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801F8B64) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801F8AF0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x34: + (*(s16*)&D_801F8B64) = 3; + D_801F7BB8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801F7FE8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801F8B64) = 3; + D_801F7BB8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801F8B64) = 3; + D_801F7BB8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801F7BB8 = *(s32 *)(D_801F7BB8 + 4); + return; + case 0x37: + (*(s16*)&D_801F8B64) = 3; + D_801F7FD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F7FD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801F8B64) = 3; + D_801F7FDC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801F7FE0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801F8B64) = 3; + D_801F7FD4 = w1; + D_801F7FD8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801F8B64) = 3; + D_801F7FDC = w2; + D_801F7FE0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x43: + D_801F7FFC = (s32)func_8017A3D8; + D_801F8004 = 0; + (*(s16*)&D_801F8B64) = 5; + D_801F8000 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801F8B64) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801F8B64) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801F8014; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801F8B64) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801F8014; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801F8B64) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801F8014[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801F8B64) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801F8014; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801F8B64) = 3; + break; + default: + break; + } +Lend: + D_801F7BB8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F7FE4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801F7FE4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801F7FE4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801F7FE4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801F800C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801F800C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801F7FC8; + +s32 func_8017A3B0(void) { + switch (D_801F7FC8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801F8004; +extern short D_801F8000; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801F8004) { + case 0: + func_800D0CA0(1); + D_801F8004 = D_801F8004 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801F8000; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801F8004 = D_801F8004 + 1; + if (D_801F8004 < 0x1E) { + return 0; + } + D_801F8004 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801F8044; + extern s16 D_801F8046; + extern s16 D_801F8048; + extern s16 D_801F803C; + extern s16 D_801F803E; + extern s16 D_801F8040; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801F8044, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801F8046, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801F8048, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801F803C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801F803E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801F8040, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801F7FCC; +extern u16 D_801F804C; +extern u16 D_801F804E; +extern u16 D_801F8050; +extern s16 D_801F8AF4; + +void func_8017B1D8(void) { + func_8012A418(); + D_801F8AF4 = 0; + D_801F7FCC = 0; + D_801F804C = D_80126B5E; + D_801F804E = D_80126B62; + D_801F8050 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801856EC[]; + extern s16 D_801F8044; + extern s16 D_801F803C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801856EC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801856EC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F8044; + s16 *p78C = &D_801F803C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801F8AF4 = 1; + D_801F7FCC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801F7FEC; + extern SV4_8017B368 D_801F7FF4; + extern s16 D_801F8044; + extern s16 D_801F803C; + extern u16 D_801856EC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801F7FEC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801F7FF4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801856EC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801856EC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801F8044) = loc0; + (*(SV4_8017B368 *)&D_801F803C) = loc1; + D_801F8AF4 = 1; + D_801F7FCC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801856EC[]; + extern s16 D_801F8044; + extern s16 D_801F8046; + extern s16 D_801F8048; + extern s16 D_801F803C; + extern s16 D_801F803E; + extern s16 D_801F8040; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801856EC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801856EC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801F8044; + s16 *p78C = &D_801F803C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801F8046; + v798 = D_801F8048; + v78C = *p78C; + v78E = D_801F803E; + v790 = D_801F8040; + __asm__ __volatile__(""); + D_801F8AF4 = 1; + D_801F7FCC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F7FCC; +extern s16 D_801F8044; +extern s16 D_801F8046; +extern s16 D_801F8048; +extern s16 D_801F803C; +extern s16 D_801F803E; +extern s16 D_801F8040; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801F7FCC = 0; + D_801F8044 = (s16) D_80114F30; + D_801F8046 = (s16) D_80114F34; + D_801F8048 = (s16) D_80114F38; + D_801F803C = (s16) D_80114F24; + D_801F803E = (s16) D_80114F28; + D_801F8040 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801F805C; +extern s16 D_801F805E; +extern s16 D_801F8060; +extern s16 D_801F8064; +extern s16 D_801F8066; +extern s16 D_801F8068; + +void func_8017B824(void) { + D_801F805C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801F805E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801F8060 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801F8064 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801F8066 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801F8068 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801F805C; +extern s16 D_801F805E; +extern s16 D_801F8060; +extern s16 D_801F8064; +extern s16 D_801F8066; +extern s16 D_801F8068; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801F805C; + D_80114F34 = D_801F805E; + D_80114F38 = D_801F8060; + D_80114F24 = D_801F8064; + D_80114F28 = D_801F8066; + D_80114F2C = D_801F8068; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801F8044), src[8..15] -> (*(S8_8017B8E8 *)&D_801F803C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801F8044) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801F803C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801F804C; +extern u16 D_801F804E; +extern u16 D_801F8050; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801F7FCC; +extern short D_801F8054; +extern short D_801F8056; +extern short D_801F8058; +extern s16 D_801F8044; +extern s16 D_801F8046; +extern s16 D_801F8048; +extern s16 D_801F803C; +extern s16 D_801F803E; +extern s16 D_801F8040; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801F804C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801F804E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801F8050); + (*(s16 *)&D_801F8054) = buf[0]; + (*(s16 *)&D_801F8056) = buf[1]; + (*(s16 *)&D_801F8058) = buf[2]; + D_801F8044 = D_80114F30 + buf[0]; + D_801F7FCC = 0; + D_801F8046 = D_80114F34 + buf[1]; + D_801F8048 = D_80114F38 + buf[2]; + D_801F803C = D_80114F24 + buf[0]; + D_801F803E = D_80114F28 + buf[1]; + D_801F8040 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801F7FEC; +extern SV4 D_801F7FF4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801F7FF4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801F7FEC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801F7FF4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801F7FF4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801F7FEC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801F7FF4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801F8014[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801F8014; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801F7FCC; +extern s16 D_801F8AF4; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801F7FCC = D_801F7FCC + 1; + if (D_801F7FCC >= 0x1F) { + D_801F8AF4 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801F7FCC; +extern s16 D_801F8AF4; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F7FCC = D_801F7FCC + 1; + if (0x18 < D_801F7FCC) { + func_8012A4BC(); + D_801F8AF4 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801F7FCC; +extern void (*D_801F8010)(void); +extern short D_801F8054; +extern short D_801F8056; +extern short D_801F8058; +extern s16 D_801F8AF4; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801F7FCC = D_801F7FCC + 1; + if (D_801F7FCC >= 0x19) { + if (D_801F8010 != 0) { + (*D_801F8010)(); + } else { + D_80114F30 = D_80114F30 + D_801F8054; + D_80114F34 = D_80114F34 + D_801F8056; + D_80114F38 = D_80114F38 + D_801F8058; + D_80114F24 = D_80114F24 + D_801F8054; + D_80114F28 = D_80114F28 + D_801F8056; + D_80114F2C = D_80114F2C + D_801F8058; + func_8012A4BC(); + } + D_801F8AF4 = 0; + } +} + + + +extern void (*D_8018578C[])(void); + +void func_8017BE60(void *a0) { + D_8018578C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017BEBC); + + +extern void (*D_801857E8[])(void); + +void func_8017CD9C(void *a0) { + D_801857E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801857F0[])(void); + +void func_8017CE40(void *a0) { + D_801857F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017CE7C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEE0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017CF5C); + + +extern void (*D_80185804[])(void); + +void func_8017CF7C(void *a0) { + D_80185804[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017CFB8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D000); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D04C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D0AC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D0D4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D0FC); + + +extern void (*D_80185810[])(void); + +void func_8017D19C(void *a0) { + D_80185810[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D1D8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D278); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D400); + +extern s32 func_8017D420(void); + +s32 func_8017D420(void) { + return 0x96; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D460); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D490); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D4C0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D4F0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D528); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D558); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D5A0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D5D0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D600); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D650); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D688); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D6D0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D700); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D730); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D90C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D944); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D974); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D9AC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017D9E4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017DA8C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017DB90); + + +extern void (*D_80185F58[])(void); + +void func_8017DD28(void *a0) { + D_80185F58[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017DD64); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017DFA4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017DFEC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E078); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E168); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E330); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E550); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E734); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017E878); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017EA18); + + +extern void (*D_80185F8C[])(void); + +void func_8017ECE8(void *a0) { + D_80185F8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017ED24); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017EEA4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F074); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F258); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F2A0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F308); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F3E8); + +void func_8017F4B8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F4C0); + + +extern void (*D_801861E4[])(void); + +void func_8017F594(void *a0) { + D_801861E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F5D0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F7C4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F824); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F8CC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017F934); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017FA2C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017FD4C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017FECC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017FF24); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8017FFA8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801800B8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801802A0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801802E0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8018034C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180390); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801803F4); + +extern s32 func_8018034C(void); + void func_80180424(void) { + ((void (*)(void))func_8018034C)(); + } + + +extern s32 func_8018034C(void); + void func_80180444(void) { + func_8018034C(); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180464); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180484); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801804DC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180534); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8018056C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801805EC); + +extern s32 func_8018034C(void); + void func_80180624(void) { + ((void (*)(void))func_8018034C)(); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180644); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801806B4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801806D4); + +extern s32 func_8018034C(void); + void func_80180714(void) { + func_8018034C(); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180734); + +extern s32 func_8018034C(void); + void func_801807CC(void) { + func_8018034C(); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801807EC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180840); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801808C0); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8018097C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180A44); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180AE8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180BF8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180C34); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180C6C); + + +extern s16 D_801F8094; + u32 func_80180CA8(void) { + return (u32)(D_801F8094 == 1); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180CC0); + + +extern s16 D_801F8094; + u32 func_80180CD4(void) { + return (u32)(D_801F8094 == 2); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180CEC); + +extern s16 D_801F8094; + u32 func_80180D00(void) { + return (u32)(D_801F8094 == 3); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180D18); + + +extern s16 D_801F8094; + u32 func_80180D2C(void) { + return (u32)(D_801F8094 == 4); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180D44); + + +extern s16 D_801F8094; + u32 func_80180D58(void) { + return (u32)(D_801F8094 == 5); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180D70); + +extern s16 D_801F8094; + u32 func_80180D84(void) { + return (u32)(D_801F8094 == 7); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180D9C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180DB0); + +void func_80180E4C(void *a0) { + *(s16 *)((char *)a0 + 0x34) = 0; + *(s32 *)((char *)a0 + 0x1c) = 0x10; + *(u16 *)((char *)a0 + 0x2) += 1; + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180E68); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180EA8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180EC4); + + +extern void (*D_8018646C[])(void); + +void func_80180EFC(void *a0) { + D_8018646C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180F38); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180F90); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80180FE8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181120); + + +extern void (*D_801F5530[])(void); + +void func_80181198(void *a0) { + D_801F5530[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801811D4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801813D4); + +extern void func_80146C3C(void); + void func_801813F4(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181414); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_8018146C); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181498); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801814DC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_801815DC); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181658); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181AF8); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181C84); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_80178D40", func_80181CB8); + + diff --git a/src/ov_SC06_008/ov_SC06_008_jr_801734BC.c b/src/ov_SC06_008/ov_SC06_008_jr_801734BC.c index 51af2615d..bafbb64f4 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_801734BC.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_801734BC.c @@ -3084,1347 +3084,3 @@ void func_80178D18(void) { D_801AA834 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A9F64; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A9F64 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A9F64; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A9F64 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A9F8C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A9F8C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A9F48; - -s32 func_8017A3B0(void) { - switch (D_801A9F48) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A9F84; -extern short D_801A9F80; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A9F84) { - case 0: - func_800D0CA0(1); - D_801A9F84 = D_801A9F84 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A9F80; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A9F84 = D_801A9F84 + 1; - if (D_801A9F84 < 0x1E) { - return 0; - } - D_801A9F84 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A9FC4; - extern s16 D_801A9FC6; - extern s16 D_801A9FC8; - extern s16 D_801A9FBC; - extern s16 D_801A9FBE; - extern s16 D_801A9FC0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A9FC4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A9FC6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9FC8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9FBC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9FBE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9FC0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A9F4C; -extern u16 D_801A9FCC; -extern u16 D_801A9FCE; -extern u16 D_801A9FD0; -extern s16 D_801AA7C0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AA7C0 = 0; - D_801A9F4C = 0; - D_801A9FCC = D_80126B5E; - D_801A9FCE = D_80126B62; - D_801A9FD0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189154[]; - extern s16 D_801A9FC4; - extern s16 D_801A9FBC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189154[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189154[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A9FC4; - s16 *p78C = &D_801A9FBC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AA7C0 = 1; - D_801A9F4C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A9F6C; - extern SV4_8017B368 D_801A9F74; - extern s16 D_801A9FC4; - extern s16 D_801A9FBC; - extern u16 D_80189154; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A9F6C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A9F74; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80189154)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80189154)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A9FC4) = loc0; - (*(SV4_8017B368 *)&D_801A9FBC) = loc1; - D_801AA7C0 = 1; - D_801A9F4C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80189154[]; - extern s16 D_801A9FC4; - extern s16 D_801A9FC6; - extern s16 D_801A9FC8; - extern s16 D_801A9FBC; - extern s16 D_801A9FBE; - extern s16 D_801A9FC0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80189154[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80189154[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A9FC4; - s16 *p78C = &D_801A9FBC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A9FC6; - v798 = D_801A9FC8; - v78C = *p78C; - v78E = D_801A9FBE; - v790 = D_801A9FC0; - __asm__ __volatile__(""); - D_801AA7C0 = 1; - D_801A9F4C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A9F4C; -extern s16 D_801A9FC4; -extern s16 D_801A9FC6; -extern s16 D_801A9FC8; -extern s16 D_801A9FBC; -extern s16 D_801A9FBE; -extern s16 D_801A9FC0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A9F4C = 0; - D_801A9FC4 = (s16) D_80114F30; - D_801A9FC6 = (s16) D_80114F34; - D_801A9FC8 = (s16) D_80114F38; - D_801A9FBC = (s16) D_80114F24; - D_801A9FBE = (s16) D_80114F28; - D_801A9FC0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A9FDC; -extern s16 D_801A9FDE; -extern s16 D_801A9FE0; -extern s16 D_801A9FE4; -extern s16 D_801A9FE6; -extern s16 D_801A9FE8; - -void func_8017B824(void) { - D_801A9FDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A9FDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A9FE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A9FE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A9FE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A9FE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A9FDC; -extern s16 D_801A9FDE; -extern s16 D_801A9FE0; -extern s16 D_801A9FE4; -extern s16 D_801A9FE6; -extern s16 D_801A9FE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A9FDC; - D_80114F34 = D_801A9FDE; - D_80114F38 = D_801A9FE0; - D_80114F24 = D_801A9FE4; - D_80114F28 = D_801A9FE6; - D_80114F2C = D_801A9FE8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A9FC4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9FBC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A9FC4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A9FBC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A9FCC; -extern u16 D_801A9FCE; -extern u16 D_801A9FD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A9F4C; -extern short D_801A9FD4; -extern short D_801A9FD6; -extern short D_801A9FD8; -extern s16 D_801A9FC4; -extern s16 D_801A9FC6; -extern s16 D_801A9FC8; -extern s16 D_801A9FBC; -extern s16 D_801A9FBE; -extern s16 D_801A9FC0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9FCC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9FCE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9FD0); - (*(s16 *)&D_801A9FD4) = buf[0]; - (*(s16 *)&D_801A9FD6) = buf[1]; - (*(s16 *)&D_801A9FD8) = buf[2]; - D_801A9FC4 = D_80114F30 + buf[0]; - D_801A9F4C = 0; - D_801A9FC6 = D_80114F34 + buf[1]; - D_801A9FC8 = D_80114F38 + buf[2]; - D_801A9FBC = D_80114F24 + buf[0]; - D_801A9FBE = D_80114F28 + buf[1]; - D_801A9FC0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A9F6C; -extern SV4 D_801A9F74; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A9F74) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A9F6C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A9F74 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A9F74)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A9F6C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A9F74) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A9F94[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A9F94; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A9F4C; -extern s16 D_801AA7C0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A9F4C = D_801A9F4C + 1; - if (D_801A9F4C >= 0x1F) { - D_801AA7C0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A9F4C; -extern s16 D_801AA7C0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A9F4C = D_801A9F4C + 1; - if (0x18 < D_801A9F4C) { - func_8012A4BC(); - D_801AA7C0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A9F4C; -extern void (*D_801A9F90)(void); -extern short D_801A9FD4; -extern short D_801A9FD6; -extern short D_801A9FD8; -extern s16 D_801AA7C0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A9F4C = D_801A9F4C + 1; - if (D_801A9F4C >= 0x19) { - if (D_801A9F90 != 0) { - (*D_801A9F90)(); - } else { - D_80114F30 = D_80114F30 + D_801A9FD4; - D_80114F34 = D_80114F34 + D_801A9FD6; - D_80114F38 = D_80114F38 + D_801A9FD8; - D_80114F24 = D_80114F24 + D_801A9FD4; - D_80114F28 = D_80114F28 + D_801A9FD6; - D_80114F2C = D_80114F2C + D_801A9FD8; - func_8012A4BC(); - } - D_801AA7C0 = 0; - } -} - - - -extern void (*D_801891F4[])(void); - -void func_8017BE60(void *a0) { - D_801891F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80189218[])(void); - -void func_8017BEBC(void *a0) { - D_80189218[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ - - -extern void (*D_80189220[])(void); - -void func_8017C150(void *a0) { - D_80189220[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_8018920C; - -void func_8017C18C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_8018920C, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017C294); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D174); - - -extern void (*D_8018929C[])(void); - -void func_8017D194(void *a0) { - D_8018929C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D1D0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D214(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801892A4[])(void); - -void func_8017D238(void *a0) { - D_801892A4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D274); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D2B4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D330(void) { - func_800D1EBC(); - } - - - -extern void (*D_801892B0[])(void); - -void func_8017D350(void *a0) { - D_801892B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D38C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D400); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D428); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D450); - - -extern void (*D_801892CC[])(void); - -void func_8017D4E8(void *a0) { - D_801892CC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D524); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D5A4); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017D73C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DA00); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DA3C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DBB0); - - -extern void (*D_80189560[])(void); - -void func_8017DCD0(void *a0) { - D_80189560[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017DD0C(void *a0) { - *(s8 *)((s32)a0 + 0xC1) = 0; - *(s16 *)((s32)a0 + 0x5E) = 0; - *(s16 *)((s32)a0 + 0x5C) &= 0xC800; - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DD24); - - -void func_8017DE04(void *a0) { - void *a1 = *(void **)((char *)a0 + 0x20); - *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DE20); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DEEC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DF28); - -void func_8017DFBC(void) { -} - - -s32 func_8017DFC4(void) { - return 111; -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DFCC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017DFEC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E140); - - -extern void (*D_801895AC[])(void); - -void func_8017E1A0(void *a0) { - D_801895AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern s32 func_8012AD50(void *a0); - void func_8017E1DC(s32 *a0) { - *(s16 *)((s32)a0 + 0xFC) = 0; - *(s16 *)((s32)a0 + 0xFE) = 0; - *(s16 *)((s32)a0 + 0x100) = 0; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E204); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E37C); - - -extern void (*D_80189604[])(void); - -void func_8017E4BC(void *a0) { - D_80189604[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E4F8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E580); - - -extern void (*D_80189620[])(void); - -void func_8017E5F0(void *a0) { - D_80189620[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E62C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E694); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E6F0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017E830); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017EBAC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017EC48); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017ED80); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017EF54); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017F100); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017F2E8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017F624); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017F8CC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017F9FC); - - -extern void (*D_8019C968[])(void); - -void func_8017FAD4(void *a0) { - D_8019C968[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FB10); - - -extern void (*D_8019C988[])(void); - -void func_8017FC84(void *a0) { - D_8019C988[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FCC0); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8017ED80(void); - -void func_8017FD48(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_8017ED80)(a0); -} - - -extern void func_8017EF54(void); - void func_8017FD80(s32 *param) { - *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; - func_8017EF54(); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FDA8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FDDC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FE28); - -extern void func_8017ED80(void); - void func_8017FF14(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; - ((void (*)(void))func_8017ED80)(); - } - - -extern void func_8017ED80(void); - void func_8017FF48(s32 a0) { - s32 v0; - v0 = 0xc; - *(s8 *)(a0 + 0xc1) = v0; - *(s32 *)(a0 + 0x1c) = 0x3c; - ((void (*)(void))func_8017ED80)(); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8017FF74); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80180128); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018025C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801802BC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018037C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80180450); - - -extern s32 D_801AA178; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80180548(s32 a0, s32 a1) { - D_801AA178 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80180578); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801807BC); - - -extern void (*D_8019E73C[])(void); - -void func_80180A5C(void *a0) { - D_8019E73C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80180A98); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80180CA8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801810AC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80181220); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801813D0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018165C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80181B20); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80181CF0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80181EE0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801821F8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801823F0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80182838); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80182A48); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80182E8C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018309C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183320); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183340); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183440); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801834E0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801835A0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183638); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183658); - -void func_80183748(void) { -} - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183750); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183824); - -extern void func_8012B370(int a0); - void func_801838E4(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183904); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183924); - -void func_80183A18(void) { -} - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183A20); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183B14); - -extern void func_8012B370(int a0); - void func_80183BD4(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183BF4); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183D10); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183D68); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183DB8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183E24); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183F78); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183FCC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80183FF0); - - -extern void (*D_801A6970[])(void); - -void func_80184034(void *a0) { - D_801A6970[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184070); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801841BC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184234); - -void func_80184264(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184278); - - -extern void (*D_801A69A8[])(void); - -void func_801842E0(void *a0) { - D_801A69A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018431C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184368); - -void func_801843B0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801843B8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018451C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184898); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801848F0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_8018494C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801849A8); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184AEC); - - -extern void (*D_801A6BB0[])(void); - -void func_80184B5C(void *a0) { - D_801A6BB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184B98); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184C70); - -void func_80184C98(void) { -} - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_801A6B60; - void func_80184CA0(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - func_80178CBC((int)arg0, (int)&D_801A6B60); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184CCC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184D0C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184DCC); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184E38); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184E48); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184E58); - -extern void func_800296F8(void); - s32 func_80184E70(s32 arg0) { - ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80184E94); - - -extern void (*D_801A75D0[])(void); - -void func_80184FE8(void *a0) { - D_801A75D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185024); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801850F8); - -void func_80185120(void) { -} - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185128); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185274); - - -extern void func_8012C218(void *a0); - s32 func_80185394(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801853C0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801853D0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801853E0); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_80185420(s32 arg0) { - s32 temp_v0 = *(s32 *)(arg0 + 0xdc); - ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -extern s16 func_80174764(void); - s32 func_80185454(void) { - return ((u32)((s32 (*)(void))func_80174764)() == 1); - } - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185478); - - -extern void (*D_801A75F8[])(void); - -void func_801854DC(void *a0) { - D_801A75F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185518); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801855A0); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_80185660); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_801734BC", func_801856D0); - diff --git a/src/ov_SC06_008/ov_SC06_008_jr_80178D40.c b/src/ov_SC06_008/ov_SC06_008_jr_80178D40.c new file mode 100644 index 000000000..67549d552 --- /dev/null +++ b/src/ov_SC06_008/ov_SC06_008_jr_80178D40.c @@ -0,0 +1,4793 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801889FC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A92B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801889F0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80188A34[]; +extern unsigned short D_80188A3C[]; +extern unsigned short D_80188A44[]; +extern unsigned char D_801A92C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A92B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188A4C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A93F4; +extern M2C_UNK D_801A93F8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9380; +extern void (*D_80188A7C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A93FC[]; +extern u8 D_801A9404[]; +extern u8 D_801A93B4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188A84[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188AA0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80188AA8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188B10[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188AB4; +extern u8 D_80188AC0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80188B44[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188B4C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188BA0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188BD4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188BC4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188BF0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80188C68[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80188C70[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80188C78[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188C80[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188C88[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188C90[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188C9C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188CA8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188CB4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188CC4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188CD4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188CDC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188CE4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188CEC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188CF4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188CFC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188D04[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188D0C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188D14[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188D1C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80188D24[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188D2C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80188D34[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188D3C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80188D44[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188D4C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80188D54[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80188D5C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80188D64[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80188D6C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80188D74[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188D7C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188D84[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188DC8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188D8C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188DF8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80188E34[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188E8C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188E9C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188EA4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018900C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189018[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A89C8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AA7C0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A9B38; +extern short D_801AA834; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AA834) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AA834)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A9B38 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AA834) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AA790 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AA790 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AA834) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AA834) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A9F94[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A9B3C; + extern s32 D_801A9F50; + extern s16 D_801A9F54; + extern s16 D_801A9F58; + extern s16 D_801A9F5C; + extern s16 D_801A9F60; + extern s32 D_801A9F68; + extern s32 D_801A9F6C; + extern s32 D_801A9F7C; + extern s16 D_801A9F80; + extern s16 D_801A9F84; + extern s32 D_801A9F88; + extern s32 D_801A9F90; + extern s32 D_801A9F94[10]; + extern s32 D_801AA6D8; + extern s16 D_801AA790; + extern s32 D_801AA7BC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AA790; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A9F50); + D_801A9F50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A9F5C, D_801A9F60 ? 0x48 : 0x40); + (*(s16*)&D_801AA834) = 2; + break; + case 0: + func_80179B28(D_801A9F50); + D_801A9F50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A9F54, D_801A9F58 ? 0x48 : 0x40); + (*(s16*)&D_801AA834) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AA6D8 != 0) { + func_80179B28(D_801A9F50); + D_801A9F50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A9F54, D_801A9F58 ? 0x48 : 0x40); + (*(s16*)&D_801AA834) = 1; + } else { + (*(s16*)&D_801AA834) = 3; + } + break; + case 0x32: + func_80179B28(D_801A9F50); + D_801A9F50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A9F54, + D_801A9F58 ? 0x48 : 0x40); + (*(s16*)&D_801AA834) = 1; + break; + case 2: + func_80179B28(D_801A9F50); + if (D_801A9F68 != 0) { + D_801A9B38 = D_801A9F68; + D_801A9F68 = 0; + (*(s16*)&D_801AA834) = 3; + return; + } + (*(s16*)&D_801AA834) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AA834) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AA834) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AA834) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AA834) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AA834) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AA834) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AA834) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AA834) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AA834) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AA834) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AA834) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x1B: + D_801A9F88 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AA834) = 4; + D_801A9B3C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AA834) = 5; + D_801A9F7C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A9F7C = (s32)func_8017A3B0; + (*(s16*)&D_801AA834) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x24: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AA834) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AA834) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AA834) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AA834) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AA834) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AA834) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AA834) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AA834) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AA834) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A9F6C); + (*(s16*)&D_801AA834) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A9F6C); + (*(s16*)&D_801AA834) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A9F6C); + (*(s16*)&D_801AA834) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A9F6C); + (*(s16*)&D_801AA834) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + break; + case 0x4E: + D_801A9F90 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x2B: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AA834) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AA7BC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AA834) = 3; + break; + case 0x34: + (*(s16*)&D_801AA834) = 3; + D_801A9B38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A9F68 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AA834) = 3; + D_801A9B38 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AA834) = 3; + D_801A9B38 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A9B38 = *(s32 *)(D_801A9B38 + 4); + return; + case 0x37: + (*(s16*)&D_801AA834) = 3; + D_801A9F54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A9F58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AA834) = 3; + D_801A9F5C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A9F60 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AA834) = 3; + D_801A9F54 = w1; + D_801A9F58 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AA834) = 3; + D_801A9F5C = w2; + D_801A9F60 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + case 0x43: + D_801A9F7C = (s32)func_8017A3D8; + D_801A9F84 = 0; + (*(s16*)&D_801AA834) = 5; + D_801A9F80 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AA834) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AA834) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AA834) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A9F94; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AA834) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A9F94; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AA834) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A9F94[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AA834) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A9F94; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AA834) = 3; + break; + default: + break; + } +Lend: + D_801A9B38 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A9F64; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A9F64 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A9F64; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A9F64 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A9F8C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A9F8C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A9F48; + +s32 func_8017A3B0(void) { + switch (D_801A9F48) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A9F84; +extern short D_801A9F80; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A9F84) { + case 0: + func_800D0CA0(1); + D_801A9F84 = D_801A9F84 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A9F80; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A9F84 = D_801A9F84 + 1; + if (D_801A9F84 < 0x1E) { + return 0; + } + D_801A9F84 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A9FC4; + extern s16 D_801A9FC6; + extern s16 D_801A9FC8; + extern s16 D_801A9FBC; + extern s16 D_801A9FBE; + extern s16 D_801A9FC0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A9FC4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A9FC6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A9FC8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A9FBC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A9FBE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A9FC0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A9F4C; +extern u16 D_801A9FCC; +extern u16 D_801A9FCE; +extern u16 D_801A9FD0; +extern s16 D_801AA7C0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AA7C0 = 0; + D_801A9F4C = 0; + D_801A9FCC = D_80126B5E; + D_801A9FCE = D_80126B62; + D_801A9FD0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189154[]; + extern s16 D_801A9FC4; + extern s16 D_801A9FBC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189154[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189154[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A9FC4; + s16 *p78C = &D_801A9FBC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AA7C0 = 1; + D_801A9F4C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A9F6C; + extern SV4_8017B368 D_801A9F74; + extern s16 D_801A9FC4; + extern s16 D_801A9FBC; + extern u16 D_80189154; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A9F6C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A9F74; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80189154)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80189154)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A9FC4) = loc0; + (*(SV4_8017B368 *)&D_801A9FBC) = loc1; + D_801AA7C0 = 1; + D_801A9F4C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80189154[]; + extern s16 D_801A9FC4; + extern s16 D_801A9FC6; + extern s16 D_801A9FC8; + extern s16 D_801A9FBC; + extern s16 D_801A9FBE; + extern s16 D_801A9FC0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80189154[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80189154[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A9FC4; + s16 *p78C = &D_801A9FBC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A9FC6; + v798 = D_801A9FC8; + v78C = *p78C; + v78E = D_801A9FBE; + v790 = D_801A9FC0; + __asm__ __volatile__(""); + D_801AA7C0 = 1; + D_801A9F4C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A9F4C; +extern s16 D_801A9FC4; +extern s16 D_801A9FC6; +extern s16 D_801A9FC8; +extern s16 D_801A9FBC; +extern s16 D_801A9FBE; +extern s16 D_801A9FC0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A9F4C = 0; + D_801A9FC4 = (s16) D_80114F30; + D_801A9FC6 = (s16) D_80114F34; + D_801A9FC8 = (s16) D_80114F38; + D_801A9FBC = (s16) D_80114F24; + D_801A9FBE = (s16) D_80114F28; + D_801A9FC0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A9FDC; +extern s16 D_801A9FDE; +extern s16 D_801A9FE0; +extern s16 D_801A9FE4; +extern s16 D_801A9FE6; +extern s16 D_801A9FE8; + +void func_8017B824(void) { + D_801A9FDC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A9FDE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A9FE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A9FE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A9FE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A9FE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A9FDC; +extern s16 D_801A9FDE; +extern s16 D_801A9FE0; +extern s16 D_801A9FE4; +extern s16 D_801A9FE6; +extern s16 D_801A9FE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A9FDC; + D_80114F34 = D_801A9FDE; + D_80114F38 = D_801A9FE0; + D_80114F24 = D_801A9FE4; + D_80114F28 = D_801A9FE6; + D_80114F2C = D_801A9FE8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A9FC4), src[8..15] -> (*(S8_8017B8E8 *)&D_801A9FBC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A9FC4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A9FBC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A9FCC; +extern u16 D_801A9FCE; +extern u16 D_801A9FD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A9F4C; +extern short D_801A9FD4; +extern short D_801A9FD6; +extern short D_801A9FD8; +extern s16 D_801A9FC4; +extern s16 D_801A9FC6; +extern s16 D_801A9FC8; +extern s16 D_801A9FBC; +extern s16 D_801A9FBE; +extern s16 D_801A9FC0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A9FCC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A9FCE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A9FD0); + (*(s16 *)&D_801A9FD4) = buf[0]; + (*(s16 *)&D_801A9FD6) = buf[1]; + (*(s16 *)&D_801A9FD8) = buf[2]; + D_801A9FC4 = D_80114F30 + buf[0]; + D_801A9F4C = 0; + D_801A9FC6 = D_80114F34 + buf[1]; + D_801A9FC8 = D_80114F38 + buf[2]; + D_801A9FBC = D_80114F24 + buf[0]; + D_801A9FBE = D_80114F28 + buf[1]; + D_801A9FC0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A9F6C; +extern SV4 D_801A9F74; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A9F74) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A9F6C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A9F74 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A9F74)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A9F6C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A9F74) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A9F94[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A9F94; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A9F4C; +extern s16 D_801AA7C0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A9F4C = D_801A9F4C + 1; + if (D_801A9F4C >= 0x1F) { + D_801AA7C0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A9F4C; +extern s16 D_801AA7C0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A9F4C = D_801A9F4C + 1; + if (0x18 < D_801A9F4C) { + func_8012A4BC(); + D_801AA7C0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A9F4C; +extern void (*D_801A9F90)(void); +extern short D_801A9FD4; +extern short D_801A9FD6; +extern short D_801A9FD8; +extern s16 D_801AA7C0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A9F4C = D_801A9F4C + 1; + if (D_801A9F4C >= 0x19) { + if (D_801A9F90 != 0) { + (*D_801A9F90)(); + } else { + D_80114F30 = D_80114F30 + D_801A9FD4; + D_80114F34 = D_80114F34 + D_801A9FD6; + D_80114F38 = D_80114F38 + D_801A9FD8; + D_80114F24 = D_80114F24 + D_801A9FD4; + D_80114F28 = D_80114F28 + D_801A9FD6; + D_80114F2C = D_80114F2C + D_801A9FD8; + func_8012A4BC(); + } + D_801AA7C0 = 0; + } +} + + + +extern void (*D_801891F4[])(void); + +void func_8017BE60(void *a0) { + D_801891F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80189218[])(void); + +void func_8017BEBC(void *a0) { + D_80189218[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C0BC() /* dedup: shared engine-core @0x8017C0BC (src/shared) */ + + +extern void (*D_80189220[])(void); + +void func_8017C150(void *a0) { + D_80189220[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_8018920C; + +void func_8017C18C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_8018920C, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +DEFINE_func_8017C230() /* dedup: shared engine-core @0x8017C230 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017C294); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D174); + + +extern void (*D_8018929C[])(void); + +void func_8017D194(void *a0) { + D_8018929C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D1D0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D214(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801892A4[])(void); + +void func_8017D238(void *a0) { + D_801892A4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D274); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D2B4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D330(void) { + func_800D1EBC(); + } + + + +extern void (*D_801892B0[])(void); + +void func_8017D350(void *a0) { + D_801892B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D38C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D400); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D428); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D450); + + +extern void (*D_801892CC[])(void); + +void func_8017D4E8(void *a0) { + D_801892CC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D524); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D5A4); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017D73C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DA00); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DA3C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DBB0); + + +extern void (*D_80189560[])(void); + +void func_8017DCD0(void *a0) { + D_80189560[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017DD0C(void *a0) { + *(s8 *)((s32)a0 + 0xC1) = 0; + *(s16 *)((s32)a0 + 0x5E) = 0; + *(s16 *)((s32)a0 + 0x5C) &= 0xC800; + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DD24); + + +void func_8017DE04(void *a0) { + void *a1 = *(void **)((char *)a0 + 0x20); + *(u16 *)((char *)a1 + 0x12) += *(u16 *)((char *)a0 + 0xfc); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DE20); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DEEC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DF28); + +void func_8017DFBC(void) { +} + + +s32 func_8017DFC4(void) { + return 111; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DFCC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017DFEC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E140); + + +extern void (*D_801895AC[])(void); + +void func_8017E1A0(void *a0) { + D_801895AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern s32 func_8012AD50(void *a0); + void func_8017E1DC(s32 *a0) { + *(s16 *)((s32)a0 + 0xFC) = 0; + *(s16 *)((s32)a0 + 0xFE) = 0; + *(s16 *)((s32)a0 + 0x100) = 0; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E204); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E37C); + + +extern void (*D_80189604[])(void); + +void func_8017E4BC(void *a0) { + D_80189604[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E4F8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E580); + + +extern void (*D_80189620[])(void); + +void func_8017E5F0(void *a0) { + D_80189620[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E62C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E694); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E6F0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017E830); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017EBAC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017EC48); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017ED80); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017EF54); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017F100); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017F2E8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017F624); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017F8CC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017F9FC); + + +extern void (*D_8019C968[])(void); + +void func_8017FAD4(void *a0) { + D_8019C968[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FB10); + + +extern void (*D_8019C988[])(void); + +void func_8017FC84(void *a0) { + D_8019C988[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FCC0); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8017ED80(void); + +void func_8017FD48(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_8017ED80)(a0); +} + + +extern void func_8017EF54(void); + void func_8017FD80(s32 *param) { + *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; + func_8017EF54(); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FDA8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FDDC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FE28); + +extern void func_8017ED80(void); + void func_8017FF14(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; + ((void (*)(void))func_8017ED80)(); + } + + +extern void func_8017ED80(void); + void func_8017FF48(s32 a0) { + s32 v0; + v0 = 0xc; + *(s8 *)(a0 + 0xc1) = v0; + *(s32 *)(a0 + 0x1c) = 0x3c; + ((void (*)(void))func_8017ED80)(); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8017FF74); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80180128); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018025C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801802BC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018037C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80180450); + + +extern s32 D_801AA178; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80180548(s32 a0, s32 a1) { + D_801AA178 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80180578); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801807BC); + + +extern void (*D_8019E73C[])(void); + +void func_80180A5C(void *a0) { + D_8019E73C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80180A98); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80180CA8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801810AC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80181220); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801813D0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018165C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80181B20); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80181CF0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80181EE0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801821F8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801823F0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80182838); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80182A48); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80182E8C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018309C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183320); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183340); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183440); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801834E0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801835A0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183638); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183658); + +void func_80183748(void) { +} + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183750); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183824); + +extern void func_8012B370(int a0); + void func_801838E4(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183904); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183924); + +void func_80183A18(void) { +} + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183A20); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183B14); + +extern void func_8012B370(int a0); + void func_80183BD4(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183BF4); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183D10); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183D68); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183DB8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183E24); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183F78); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183FCC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80183FF0); + + +extern void (*D_801A6970[])(void); + +void func_80184034(void *a0) { + D_801A6970[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184070); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801841BC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184234); + +void func_80184264(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184278); + + +extern void (*D_801A69A8[])(void); + +void func_801842E0(void *a0) { + D_801A69A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018431C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184368); + +void func_801843B0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801843B8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018451C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184898); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801848F0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_8018494C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801849A8); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184AEC); + + +extern void (*D_801A6BB0[])(void); + +void func_80184B5C(void *a0) { + D_801A6BB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184B98); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184C70); + +void func_80184C98(void) { +} + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_801A6B60; + void func_80184CA0(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 4; + func_80178CBC((int)arg0, (int)&D_801A6B60); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184CCC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184D0C); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184DCC); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184E38); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184E48); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184E58); + +extern void func_800296F8(void); + s32 func_80184E70(s32 arg0) { + ((void (*)(s32))func_800296F8)(*(s32 *)(arg0 + 0xdc)); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80184E94); + + +extern void (*D_801A75D0[])(void); + +void func_80184FE8(void *a0) { + D_801A75D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185024); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801850F8); + +void func_80185120(void) { +} + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185128); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185274); + + +extern void func_8012C218(void *a0); + s32 func_80185394(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801853C0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801853D0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801853E0); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_80185420(s32 arg0) { + s32 temp_v0 = *(s32 *)(arg0 + 0xdc); + ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +extern s16 func_80174764(void); + s32 func_80185454(void) { + return ((u32)((s32 (*)(void))func_80174764)() == 1); + } + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185478); + + +extern void (*D_801A75F8[])(void); + +void func_801854DC(void *a0) { + D_801A75F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185518); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801855A0); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_80185660); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_80178D40", func_801856D0); + + diff --git a/src/ov_SC06_010/ov_SC06_010_jr_801734BC.c b/src/ov_SC06_010/ov_SC06_010_jr_801734BC.c index 75bbfe497..e20eab597 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_801734BC.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_801734BC.c @@ -3084,1210 +3084,3 @@ void func_80178D18(void) { D_801B2C7C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1F9C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B1F9C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1F9C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B1F9C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B1FC4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B1FC4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B1F80; - -s32 func_8017A3B0(void) { - switch (D_801B1F80) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B1FBC; -extern short D_801B1FB8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B1FBC) { - case 0: - func_800D0CA0(1); - D_801B1FBC = D_801B1FBC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B1FB8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B1FBC = D_801B1FBC + 1; - if (D_801B1FBC < 0x1E) { - return 0; - } - D_801B1FBC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B1FFC; - extern s16 D_801B1FFE; - extern s16 D_801B2000; - extern s16 D_801B1FF4; - extern s16 D_801B1FF6; - extern s16 D_801B1FF8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B1FFC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B1FFE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B2000, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B1FF4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B1FF6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B1FF8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B1F84; -extern u16 D_801B2004; -extern u16 D_801B2006; -extern u16 D_801B2008; -extern s16 D_801B2C08; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B2C08 = 0; - D_801B1F84 = 0; - D_801B2004 = D_80126B5E; - D_801B2006 = D_80126B62; - D_801B2008 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A330[]; - extern s16 D_801B1FFC; - extern s16 D_801B1FF4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A330[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A330[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B1FFC; - s16 *p78C = &D_801B1FF4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B2C08 = 1; - D_801B1F84 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B1FA4; - extern SV4_8017B368 D_801B1FAC; - extern s16 D_801B1FFC; - extern s16 D_801B1FF4; - extern u16 D_8018A330; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B1FA4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B1FAC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A330)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A330)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B1FFC) = loc0; - (*(SV4_8017B368 *)&D_801B1FF4) = loc1; - D_801B2C08 = 1; - D_801B1F84 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A330[]; - extern s16 D_801B1FFC; - extern s16 D_801B1FFE; - extern s16 D_801B2000; - extern s16 D_801B1FF4; - extern s16 D_801B1FF6; - extern s16 D_801B1FF8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A330[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A330[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B1FFC; - s16 *p78C = &D_801B1FF4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B1FFE; - v798 = D_801B2000; - v78C = *p78C; - v78E = D_801B1FF6; - v790 = D_801B1FF8; - __asm__ __volatile__(""); - D_801B2C08 = 1; - D_801B1F84 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B1F84; -extern s16 D_801B1FFC; -extern s16 D_801B1FFE; -extern s16 D_801B2000; -extern s16 D_801B1FF4; -extern s16 D_801B1FF6; -extern s16 D_801B1FF8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B1F84 = 0; - D_801B1FFC = (s16) D_80114F30; - D_801B1FFE = (s16) D_80114F34; - D_801B2000 = (s16) D_80114F38; - D_801B1FF4 = (s16) D_80114F24; - D_801B1FF6 = (s16) D_80114F28; - D_801B1FF8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B2014; -extern s16 D_801B2016; -extern s16 D_801B2018; -extern s16 D_801B201C; -extern s16 D_801B201E; -extern s16 D_801B2020; - -void func_8017B824(void) { - D_801B2014 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B2016 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B2018 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B201C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B201E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B2020 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B2014; -extern s16 D_801B2016; -extern s16 D_801B2018; -extern s16 D_801B201C; -extern s16 D_801B201E; -extern s16 D_801B2020; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B2014; - D_80114F34 = D_801B2016; - D_80114F38 = D_801B2018; - D_80114F24 = D_801B201C; - D_80114F28 = D_801B201E; - D_80114F2C = D_801B2020; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B1FFC), src[8..15] -> (*(S8_8017B8E8 *)&D_801B1FF4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B1FFC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B1FF4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B2004; -extern u16 D_801B2006; -extern u16 D_801B2008; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B1F84; -extern short D_801B200C; -extern short D_801B200E; -extern short D_801B2010; -extern s16 D_801B1FFC; -extern s16 D_801B1FFE; -extern s16 D_801B2000; -extern s16 D_801B1FF4; -extern s16 D_801B1FF6; -extern s16 D_801B1FF8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B2004); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B2006); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B2008); - (*(s16 *)&D_801B200C) = buf[0]; - (*(s16 *)&D_801B200E) = buf[1]; - (*(s16 *)&D_801B2010) = buf[2]; - D_801B1FFC = D_80114F30 + buf[0]; - D_801B1F84 = 0; - D_801B1FFE = D_80114F34 + buf[1]; - D_801B2000 = D_80114F38 + buf[2]; - D_801B1FF4 = D_80114F24 + buf[0]; - D_801B1FF6 = D_80114F28 + buf[1]; - D_801B1FF8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B1FA4; -extern SV4 D_801B1FAC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1FAC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B1FA4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B1FAC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1FAC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B1FA4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B1FAC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B1FCC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B1FCC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B1F84; -extern s16 D_801B2C08; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B1F84 = D_801B1F84 + 1; - if (D_801B1F84 >= 0x1F) { - D_801B2C08 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B1F84; -extern s16 D_801B2C08; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B1F84 = D_801B1F84 + 1; - if (0x18 < D_801B1F84) { - func_8012A4BC(); - D_801B2C08 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B1F84; -extern void (*D_801B1FC8)(void); -extern short D_801B200C; -extern short D_801B200E; -extern short D_801B2010; -extern s16 D_801B2C08; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B1F84 = D_801B1F84 + 1; - if (D_801B1F84 >= 0x19) { - if (D_801B1FC8 != 0) { - (*D_801B1FC8)(); - } else { - D_80114F30 = D_80114F30 + D_801B200C; - D_80114F34 = D_80114F34 + D_801B200E; - D_80114F38 = D_80114F38 + D_801B2010; - D_80114F24 = D_80114F24 + D_801B200C; - D_80114F28 = D_80114F28 + D_801B200E; - D_80114F2C = D_80114F2C + D_801B2010; - func_8012A4BC(); - } - D_801B2C08 = 0; - } -} - - - -extern void (*D_8018A3D0[])(void); - -void func_8017BE60(void *a0) { - D_8018A3D0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017CA80); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017CAD4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D6A0); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D6F8); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D748); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D7CC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D928); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D97C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017D9A0); - - -extern void (*D_8018A410[])(void); - -void func_8017D9E4(void *a0) { - D_8018A410[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DA20); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DB6C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DBE4); - -void func_8017DC14(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DC28); - - -extern void (*D_8018A448[])(void); - -void func_8017DC90(void *a0) { - D_8018A448[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DCCC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DD18); - -void func_8017DD60(void) { -} - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DD68); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017DECC); - -extern void func_8002931C(void); - void func_8017E248(void) { - ((void (*)(int))func_8002931C)(0x1A40000); - } - - - -extern void (*D_8018A54C[])(void); - -void func_8017E268(void *a0) { - D_8018A54C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E2A4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E2E8(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018A554[])(void); - -void func_8017E30C(void *a0) { - D_8018A554[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E348); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E388(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E404); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern char D_8018A560; - -void func_8017E424(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018A560, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E44C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E474); - - -extern void (*D_8018A570[])(void); - -void func_8017E510(void *a0) { - D_8018A570[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E54C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E5CC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017E764); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017EE3C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F024); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F098); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F10C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F278); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F438); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F600); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017F978); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017FAAC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017FC80); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8017FE3C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80180170); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801802E0); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80180450); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801804B0); - -void func_80180598(void) { -} - -extern void func_8002A04C(s32 a0); - void func_801805A0(s32 *a0) { - *(s16 *)((s32)a0 + 0x2) = 0x4; - *(s16 *)((s32)a0 + 0x5C) = 0; - *(s16 *)((s32)a0 + 0x5E) = 0; - *(s8 *)((s32)a0 + 0xC1) = 0; - ((void (*)(void))func_8002A04C)(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801805D0); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018072C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801807AC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80180834); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80180864); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018098C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801809E4); - -extern s32 func_80180A88(void); - s32 func_80180A68(void) { - return func_80180A88(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80180A88); - -s32 func_801810F4(void) { - return 0x6F; - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801810FC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181234); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181408); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801815B4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018179C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181AD8); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181D80); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181EB0); - - -extern void (*D_801A4C5C[])(void); - -void func_80181F88(void *a0) { - D_801A4C5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80181FC4); - - -extern void (*D_801A4C7C[])(void); - -void func_80182138(void *a0) { - D_801A4C7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182174); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_80181234(void); - -void func_801821FC(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_80181234)(a0); -} - - - - -extern void func_80181408(void); - void func_80182234(s32 *param) { - *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; - func_80181408(); - } - - -extern void func_80181408(void); - void func_8018225C(u8 *a0) { - s32 v1 = *(s32 *)(a0 + 0x20); - *(u16 *)(v1 + 0x10) += 0x20; - func_80181408(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182290); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801822DC); - -extern void func_80181234(void); - void func_801823C8(s32 *param) { - param[0x10 / sizeof(s32)] >>= 1; - param[0x18 / sizeof(s32)] >>= 1; - func_80181234(); - } - - -extern void func_80181234(void); - void func_801823FC(u8 *param_1) { - param_1[0xC1] = 0xC; - *(s32 *)(param_1 + 0x1C) = 0x3C; - ((void (*)(void))func_80181234)(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182428); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801824B4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801825DC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182710); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182770); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182830); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182904); - - -extern s32 D_801B2B08; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_801829FC(s32 a0, s32 a1) { - D_801B2B08 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182A2C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182C70); - - -extern void (*D_801A6A30[])(void); - -void func_80182F10(void *a0) { - D_801A6A30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80182F4C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018315C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80183560); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801836D4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80183884); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80183B10); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80183FD4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801841A4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80184394); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801846AC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801848A4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80184CEC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80184EFC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185340); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185550); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801857D4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801857F4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801858F4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185994); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185A54); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185AEC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185B0C); - -void func_80185BFC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185C04); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185CD8); - -extern void func_8012B370(int a0); - void func_80185D98(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185DB8); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185DD8); - -void func_80185ECC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185ED4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80185FC8); - -extern void func_8012B370(int a0); - void func_80186088(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801860A8); - -extern void (*D_801AEF60[])(void); - -void func_801861C4(void *a0) { - D_801AEF60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80186200); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801862D4); - -void func_801862FC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80186304); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80186450); - - -extern void func_8012C218(void *a0); - s32 func_80186570(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018659C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801865AC); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801865BC); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_801865FC(void *arg0) { - s32 temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - func_8014ADA8((s32)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80186630); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_80186654); - -extern void (*D_801AEF88[])(void); - -void func_801866B8(void *a0) { - D_801AEF88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801866F4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018677C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_8018683C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_801734BC", func_801868AC); - diff --git a/src/ov_SC06_010/ov_SC06_010_jr_80178D40.c b/src/ov_SC06_010/ov_SC06_010_jr_80178D40.c new file mode 100644 index 000000000..1530e0929 --- /dev/null +++ b/src/ov_SC06_010/ov_SC06_010_jr_80178D40.c @@ -0,0 +1,4656 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80189BD8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B12F0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80189BCC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80189C10[]; +extern unsigned short D_80189C18[]; +extern unsigned short D_80189C20[]; +extern unsigned char D_801B12F8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B12F0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189C28[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B142C; +extern M2C_UNK D_801B1430; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B13B8; +extern void (*D_80189C58[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B1434[]; +extern u8 D_801B143C[]; +extern u8 D_801B13EC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189C60[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189C7C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189C84[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189CEC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189C90; +extern u8 D_80189C9C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80189D20[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189D28[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189D7C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189DB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189DA0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80189DCC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80189E44[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189E4C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80189E54[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189E5C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189E64[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189E6C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189E78[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189E84[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189E90[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189EA0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189EB0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189EB8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189EC0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189EC8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189ED0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189ED8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189EE0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189EE8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189EF0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189EF8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80189F00[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189F08[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80189F10[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189F18[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80189F20[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189F28[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80189F30[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189F38[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80189F40[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189F48[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80189F50[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189F58[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189F60[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189FA4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189F68; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189FD4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018A010[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018A068[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018A078[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018A080[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018A1E8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018A1F4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B0A1C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B2C08; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B1B70; +extern short D_801B2C7C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B2C7C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B2C7C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B1B70 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B2C7C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B2BD8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B2BD8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B2C7C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B2C7C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B1FCC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B1B74; + extern s32 D_801B1F88; + extern s16 D_801B1F8C; + extern s16 D_801B1F90; + extern s16 D_801B1F94; + extern s16 D_801B1F98; + extern s32 D_801B1FA0; + extern s32 D_801B1FA4; + extern s32 D_801B1FB4; + extern s16 D_801B1FB8; + extern s16 D_801B1FBC; + extern s32 D_801B1FC0; + extern s32 D_801B1FC8; + extern s32 D_801B1FCC[10]; + extern s32 D_801B2B20; + extern s16 D_801B2BD8; + extern s32 D_801B2C04; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B2BD8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B1F88); + D_801B1F88 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B1F94, D_801B1F98 ? 0x48 : 0x40); + (*(s16*)&D_801B2C7C) = 2; + break; + case 0: + func_80179B28(D_801B1F88); + D_801B1F88 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B1F8C, D_801B1F90 ? 0x48 : 0x40); + (*(s16*)&D_801B2C7C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B2B20 != 0) { + func_80179B28(D_801B1F88); + D_801B1F88 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B1F8C, D_801B1F90 ? 0x48 : 0x40); + (*(s16*)&D_801B2C7C) = 1; + } else { + (*(s16*)&D_801B2C7C) = 3; + } + break; + case 0x32: + func_80179B28(D_801B1F88); + D_801B1F88 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B1F8C, + D_801B1F90 ? 0x48 : 0x40); + (*(s16*)&D_801B2C7C) = 1; + break; + case 2: + func_80179B28(D_801B1F88); + if (D_801B1FA0 != 0) { + D_801B1B70 = D_801B1FA0; + D_801B1FA0 = 0; + (*(s16*)&D_801B2C7C) = 3; + return; + } + (*(s16*)&D_801B2C7C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B2C7C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2C7C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2C7C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x1B: + D_801B1FC0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B2C7C) = 4; + D_801B1B74 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B2C7C) = 5; + D_801B1FB4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B1FB4 = (s32)func_8017A3B0; + (*(s16*)&D_801B2C7C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x24: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2C7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2C7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B2C7C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2C7C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2C7C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2C7C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B2C7C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B1FA4); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B1FA4); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B1FA4); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B1FA4); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x4E: + D_801B1FC8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x2B: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B2C7C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B2C04 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x34: + (*(s16*)&D_801B2C7C) = 3; + D_801B1B70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B1FA0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B2C7C) = 3; + D_801B1B70 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B2C7C) = 3; + D_801B1B70 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B1B70 = *(s32 *)(D_801B1B70 + 4); + return; + case 0x37: + (*(s16*)&D_801B2C7C) = 3; + D_801B1F8C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1F90 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B2C7C) = 3; + D_801B1F94 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1F98 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B2C7C) = 3; + D_801B1F8C = w1; + D_801B1F90 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B2C7C) = 3; + D_801B1F94 = w2; + D_801B1F98 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x43: + D_801B1FB4 = (s32)func_8017A3D8; + D_801B1FBC = 0; + (*(s16*)&D_801B2C7C) = 5; + D_801B1FB8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2C7C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2C7C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B1FCC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B2C7C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B1FCC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B2C7C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B1FCC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B2C7C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B1FCC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B2C7C) = 3; + break; + default: + break; + } +Lend: + D_801B1B70 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1F9C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B1F9C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1F9C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B1F9C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B1FC4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B1FC4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B1F80; + +s32 func_8017A3B0(void) { + switch (D_801B1F80) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B1FBC; +extern short D_801B1FB8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B1FBC) { + case 0: + func_800D0CA0(1); + D_801B1FBC = D_801B1FBC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B1FB8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B1FBC = D_801B1FBC + 1; + if (D_801B1FBC < 0x1E) { + return 0; + } + D_801B1FBC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B1FFC; + extern s16 D_801B1FFE; + extern s16 D_801B2000; + extern s16 D_801B1FF4; + extern s16 D_801B1FF6; + extern s16 D_801B1FF8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B1FFC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B1FFE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B2000, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B1FF4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B1FF6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B1FF8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B1F84; +extern u16 D_801B2004; +extern u16 D_801B2006; +extern u16 D_801B2008; +extern s16 D_801B2C08; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B2C08 = 0; + D_801B1F84 = 0; + D_801B2004 = D_80126B5E; + D_801B2006 = D_80126B62; + D_801B2008 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A330[]; + extern s16 D_801B1FFC; + extern s16 D_801B1FF4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A330[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A330[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B1FFC; + s16 *p78C = &D_801B1FF4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B2C08 = 1; + D_801B1F84 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B1FA4; + extern SV4_8017B368 D_801B1FAC; + extern s16 D_801B1FFC; + extern s16 D_801B1FF4; + extern u16 D_8018A330; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B1FA4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B1FAC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A330)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A330)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B1FFC) = loc0; + (*(SV4_8017B368 *)&D_801B1FF4) = loc1; + D_801B2C08 = 1; + D_801B1F84 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A330[]; + extern s16 D_801B1FFC; + extern s16 D_801B1FFE; + extern s16 D_801B2000; + extern s16 D_801B1FF4; + extern s16 D_801B1FF6; + extern s16 D_801B1FF8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A330[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A330[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B1FFC; + s16 *p78C = &D_801B1FF4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B1FFE; + v798 = D_801B2000; + v78C = *p78C; + v78E = D_801B1FF6; + v790 = D_801B1FF8; + __asm__ __volatile__(""); + D_801B2C08 = 1; + D_801B1F84 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B1F84; +extern s16 D_801B1FFC; +extern s16 D_801B1FFE; +extern s16 D_801B2000; +extern s16 D_801B1FF4; +extern s16 D_801B1FF6; +extern s16 D_801B1FF8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B1F84 = 0; + D_801B1FFC = (s16) D_80114F30; + D_801B1FFE = (s16) D_80114F34; + D_801B2000 = (s16) D_80114F38; + D_801B1FF4 = (s16) D_80114F24; + D_801B1FF6 = (s16) D_80114F28; + D_801B1FF8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B2014; +extern s16 D_801B2016; +extern s16 D_801B2018; +extern s16 D_801B201C; +extern s16 D_801B201E; +extern s16 D_801B2020; + +void func_8017B824(void) { + D_801B2014 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B2016 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B2018 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B201C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B201E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B2020 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B2014; +extern s16 D_801B2016; +extern s16 D_801B2018; +extern s16 D_801B201C; +extern s16 D_801B201E; +extern s16 D_801B2020; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B2014; + D_80114F34 = D_801B2016; + D_80114F38 = D_801B2018; + D_80114F24 = D_801B201C; + D_80114F28 = D_801B201E; + D_80114F2C = D_801B2020; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B1FFC), src[8..15] -> (*(S8_8017B8E8 *)&D_801B1FF4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B1FFC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B1FF4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B2004; +extern u16 D_801B2006; +extern u16 D_801B2008; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B1F84; +extern short D_801B200C; +extern short D_801B200E; +extern short D_801B2010; +extern s16 D_801B1FFC; +extern s16 D_801B1FFE; +extern s16 D_801B2000; +extern s16 D_801B1FF4; +extern s16 D_801B1FF6; +extern s16 D_801B1FF8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B2004); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B2006); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B2008); + (*(s16 *)&D_801B200C) = buf[0]; + (*(s16 *)&D_801B200E) = buf[1]; + (*(s16 *)&D_801B2010) = buf[2]; + D_801B1FFC = D_80114F30 + buf[0]; + D_801B1F84 = 0; + D_801B1FFE = D_80114F34 + buf[1]; + D_801B2000 = D_80114F38 + buf[2]; + D_801B1FF4 = D_80114F24 + buf[0]; + D_801B1FF6 = D_80114F28 + buf[1]; + D_801B1FF8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B1FA4; +extern SV4 D_801B1FAC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1FAC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B1FA4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B1FAC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1FAC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B1FA4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B1FAC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B1FCC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B1FCC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B1F84; +extern s16 D_801B2C08; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B1F84 = D_801B1F84 + 1; + if (D_801B1F84 >= 0x1F) { + D_801B2C08 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B1F84; +extern s16 D_801B2C08; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B1F84 = D_801B1F84 + 1; + if (0x18 < D_801B1F84) { + func_8012A4BC(); + D_801B2C08 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B1F84; +extern void (*D_801B1FC8)(void); +extern short D_801B200C; +extern short D_801B200E; +extern short D_801B2010; +extern s16 D_801B2C08; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B1F84 = D_801B1F84 + 1; + if (D_801B1F84 >= 0x19) { + if (D_801B1FC8 != 0) { + (*D_801B1FC8)(); + } else { + D_80114F30 = D_80114F30 + D_801B200C; + D_80114F34 = D_80114F34 + D_801B200E; + D_80114F38 = D_80114F38 + D_801B2010; + D_80114F24 = D_80114F24 + D_801B200C; + D_80114F28 = D_80114F28 + D_801B200E; + D_80114F2C = D_80114F2C + D_801B2010; + func_8012A4BC(); + } + D_801B2C08 = 0; + } +} + + + +extern void (*D_8018A3D0[])(void); + +void func_8017BE60(void *a0) { + D_8018A3D0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017CA80); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017CAD4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D6A0); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D6F8); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D748); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D7CC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D928); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D97C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017D9A0); + + +extern void (*D_8018A410[])(void); + +void func_8017D9E4(void *a0) { + D_8018A410[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DA20); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DB6C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DBE4); + +void func_8017DC14(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DC28); + + +extern void (*D_8018A448[])(void); + +void func_8017DC90(void *a0) { + D_8018A448[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DCCC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DD18); + +void func_8017DD60(void) { +} + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DD68); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017DECC); + +extern void func_8002931C(void); + void func_8017E248(void) { + ((void (*)(int))func_8002931C)(0x1A40000); + } + + + +extern void (*D_8018A54C[])(void); + +void func_8017E268(void *a0) { + D_8018A54C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E2A4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E2E8(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018A554[])(void); + +void func_8017E30C(void *a0) { + D_8018A554[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E348); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E388(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E404); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern char D_8018A560; + +void func_8017E424(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018A560, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E44C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E474); + + +extern void (*D_8018A570[])(void); + +void func_8017E510(void *a0) { + D_8018A570[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E54C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E5CC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017E764); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017EE3C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F024); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F098); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F10C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F278); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F438); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F600); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017F978); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017FAAC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017FC80); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8017FE3C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80180170); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801802E0); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80180450); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801804B0); + +void func_80180598(void) { +} + +extern void func_8002A04C(s32 a0); + void func_801805A0(s32 *a0) { + *(s16 *)((s32)a0 + 0x2) = 0x4; + *(s16 *)((s32)a0 + 0x5C) = 0; + *(s16 *)((s32)a0 + 0x5E) = 0; + *(s8 *)((s32)a0 + 0xC1) = 0; + ((void (*)(void))func_8002A04C)(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801805D0); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018072C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801807AC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80180834); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80180864); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018098C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801809E4); + +extern s32 func_80180A88(void); + s32 func_80180A68(void) { + return func_80180A88(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80180A88); + +s32 func_801810F4(void) { + return 0x6F; + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801810FC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181234); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181408); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801815B4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018179C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181AD8); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181D80); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181EB0); + + +extern void (*D_801A4C5C[])(void); + +void func_80181F88(void *a0) { + D_801A4C5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80181FC4); + + +extern void (*D_801A4C7C[])(void); + +void func_80182138(void *a0) { + D_801A4C7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182174); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_80181234(void); + +void func_801821FC(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_80181234)(a0); +} + + + + +extern void func_80181408(void); + void func_80182234(s32 *param) { + *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; + func_80181408(); + } + + +extern void func_80181408(void); + void func_8018225C(u8 *a0) { + s32 v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(v1 + 0x10) += 0x20; + func_80181408(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182290); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801822DC); + +extern void func_80181234(void); + void func_801823C8(s32 *param) { + param[0x10 / sizeof(s32)] >>= 1; + param[0x18 / sizeof(s32)] >>= 1; + func_80181234(); + } + + +extern void func_80181234(void); + void func_801823FC(u8 *param_1) { + param_1[0xC1] = 0xC; + *(s32 *)(param_1 + 0x1C) = 0x3C; + ((void (*)(void))func_80181234)(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182428); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801824B4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801825DC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182710); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182770); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182830); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182904); + + +extern s32 D_801B2B08; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_801829FC(s32 a0, s32 a1) { + D_801B2B08 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182A2C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182C70); + + +extern void (*D_801A6A30[])(void); + +void func_80182F10(void *a0) { + D_801A6A30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80182F4C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018315C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80183560); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801836D4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80183884); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80183B10); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80183FD4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801841A4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80184394); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801846AC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801848A4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80184CEC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80184EFC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185340); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185550); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801857D4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801857F4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801858F4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185994); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185A54); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185AEC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185B0C); + +void func_80185BFC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185C04); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185CD8); + +extern void func_8012B370(int a0); + void func_80185D98(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185DB8); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185DD8); + +void func_80185ECC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185ED4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80185FC8); + +extern void func_8012B370(int a0); + void func_80186088(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801860A8); + +extern void (*D_801AEF60[])(void); + +void func_801861C4(void *a0) { + D_801AEF60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80186200); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801862D4); + +void func_801862FC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80186304); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80186450); + + +extern void func_8012C218(void *a0); + s32 func_80186570(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018659C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801865AC); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801865BC); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_801865FC(void *arg0) { + s32 temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + func_8014ADA8((s32)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80186630); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_80186654); + +extern void (*D_801AEF88[])(void); + +void func_801866B8(void *a0) { + D_801AEF88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801866F4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018677C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_8018683C); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_80178D40", func_801868AC); + + diff --git a/src/ov_SC06_011/ov_SC06_011_jr_801734BC.c b/src/ov_SC06_011/ov_SC06_011_jr_801734BC.c index 1a998441a..2ac3da773 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_801734BC.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_801734BC.c @@ -3084,1099 +3084,3 @@ void func_80178D18(void) { D_801ABD54 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ABB4C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801ABB4C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801ABB4C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801ABB4C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801ABB74; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801ABB74 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801ABB30; - -s32 func_8017A3B0(void) { - switch (D_801ABB30) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801ABB6C; -extern short D_801ABB68; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801ABB6C) { - case 0: - func_800D0CA0(1); - D_801ABB6C = D_801ABB6C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801ABB68; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801ABB6C = D_801ABB6C + 1; - if (D_801ABB6C < 0x1E) { - return 0; - } - D_801ABB6C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801ABBAC; - extern s16 D_801ABBAE; - extern s16 D_801ABBB0; - extern s16 D_801ABBA4; - extern s16 D_801ABBA6; - extern s16 D_801ABBA8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ABBAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ABBAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ABBB0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ABBA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ABBA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ABBA8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801ABB34; -extern u16 D_801ABBB4; -extern u16 D_801ABBB6; -extern u16 D_801ABBB8; -extern s16 D_801ABCE0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801ABCE0 = 0; - D_801ABB34 = 0; - D_801ABBB4 = D_80126B5E; - D_801ABBB6 = D_80126B62; - D_801ABBB8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183D90[]; - extern s16 D_801ABBAC; - extern s16 D_801ABBA4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183D90[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183D90[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ABBAC; - s16 *p78C = &D_801ABBA4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801ABCE0 = 1; - D_801ABB34 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801ABB54; - extern SV4_8017B368 D_801ABB5C; - extern s16 D_801ABBAC; - extern s16 D_801ABBA4; - extern u16 D_80183D90; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801ABB54; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801ABB5C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183D90)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183D90)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801ABBAC) = loc0; - (*(SV4_8017B368 *)&D_801ABBA4) = loc1; - D_801ABCE0 = 1; - D_801ABB34 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183D90[]; - extern s16 D_801ABBAC; - extern s16 D_801ABBAE; - extern s16 D_801ABBB0; - extern s16 D_801ABBA4; - extern s16 D_801ABBA6; - extern s16 D_801ABBA8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183D90[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183D90[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801ABBAC; - s16 *p78C = &D_801ABBA4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801ABBAE; - v798 = D_801ABBB0; - v78C = *p78C; - v78E = D_801ABBA6; - v790 = D_801ABBA8; - __asm__ __volatile__(""); - D_801ABCE0 = 1; - D_801ABB34 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ABB34; -extern s16 D_801ABBAC; -extern s16 D_801ABBAE; -extern s16 D_801ABBB0; -extern s16 D_801ABBA4; -extern s16 D_801ABBA6; -extern s16 D_801ABBA8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801ABB34 = 0; - D_801ABBAC = (s16) D_80114F30; - D_801ABBAE = (s16) D_80114F34; - D_801ABBB0 = (s16) D_80114F38; - D_801ABBA4 = (s16) D_80114F24; - D_801ABBA6 = (s16) D_80114F28; - D_801ABBA8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801ABBC4; -extern s16 D_801ABBC6; -extern s16 D_801ABBC8; -extern s16 D_801ABBCC; -extern s16 D_801ABBCE; -extern s16 D_801ABBD0; - -void func_8017B824(void) { - D_801ABBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801ABBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801ABBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801ABBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801ABBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801ABBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801ABBC4; -extern s16 D_801ABBC6; -extern s16 D_801ABBC8; -extern s16 D_801ABBCC; -extern s16 D_801ABBCE; -extern s16 D_801ABBD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801ABBC4; - D_80114F34 = D_801ABBC6; - D_80114F38 = D_801ABBC8; - D_80114F24 = D_801ABBCC; - D_80114F28 = D_801ABBCE; - D_80114F2C = D_801ABBD0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801ABBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801ABBA4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801ABBAC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801ABBA4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801ABBB4; -extern u16 D_801ABBB6; -extern u16 D_801ABBB8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801ABB34; -extern short D_801ABBBC; -extern short D_801ABBBE; -extern short D_801ABBC0; -extern s16 D_801ABBAC; -extern s16 D_801ABBAE; -extern s16 D_801ABBB0; -extern s16 D_801ABBA4; -extern s16 D_801ABBA6; -extern s16 D_801ABBA8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ABBB4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ABBB6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ABBB8); - (*(s16 *)&D_801ABBBC) = buf[0]; - (*(s16 *)&D_801ABBBE) = buf[1]; - (*(s16 *)&D_801ABBC0) = buf[2]; - D_801ABBAC = D_80114F30 + buf[0]; - D_801ABB34 = 0; - D_801ABBAE = D_80114F34 + buf[1]; - D_801ABBB0 = D_80114F38 + buf[2]; - D_801ABBA4 = D_80114F24 + buf[0]; - D_801ABBA6 = D_80114F28 + buf[1]; - D_801ABBA8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801ABB54; -extern SV4 D_801ABB5C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ABB5C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801ABB54 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801ABB5C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ABB5C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801ABB54) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801ABB5C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801ABB7C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801ABB7C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801ABB34; -extern s16 D_801ABCE0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801ABB34 = D_801ABB34 + 1; - if (D_801ABB34 >= 0x1F) { - D_801ABCE0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801ABB34; -extern s16 D_801ABCE0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ABB34 = D_801ABB34 + 1; - if (0x18 < D_801ABB34) { - func_8012A4BC(); - D_801ABCE0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801ABB34; -extern void (*D_801ABB78)(void); -extern short D_801ABBBC; -extern short D_801ABBBE; -extern short D_801ABBC0; -extern s16 D_801ABCE0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801ABB34 = D_801ABB34 + 1; - if (D_801ABB34 >= 0x19) { - if (D_801ABB78 != 0) { - (*D_801ABB78)(); - } else { - D_80114F30 = D_80114F30 + D_801ABBBC; - D_80114F34 = D_80114F34 + D_801ABBBE; - D_80114F38 = D_80114F38 + D_801ABBC0; - D_80114F24 = D_80114F24 + D_801ABBBC; - D_80114F28 = D_80114F28 + D_801ABBBE; - D_80114F2C = D_80114F2C + D_801ABBC0; - func_8012A4BC(); - } - D_801ABCE0 = 0; - } -} - - - -extern void (*D_80183E30[])(void); - -void func_8017BE60(void *a0) { - D_80183E30[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CDE4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CE2C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CE74); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CEC4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CF18); - - -extern void (*D_801840BC[])(void); - -void func_8017CF60(void *a0) { - D_801840BC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017CF9C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CFE0(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801840C4[])(void); - -void func_8017D004(void *a0) { - D_801840C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D040); - - -extern void (*D_801840CC[])(void); - -void func_8017D084(void *a0) { - D_801840CC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D0C0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D100(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D17C(void) { - func_800D1EBC(); - } - - - -extern void (*D_801840D8[])(void); - -void func_8017D19C(void *a0) { - D_801840D8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D1D8); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D24C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D274); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D29C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D334); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D3CC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D464); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D4FC); - - -extern void (*D_801840F0[])(void); - -void func_8017D594(void *a0) { - D_801840F0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D5D0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D670); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D710); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D7B0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D850); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017D8F0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017DA88); - - -extern void (*D_80184170[])(void); - -void func_8017DAB8(void *a0) { - D_80184170[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801841C0[])(void); - -void func_8017DAF4(void *a0) { - D_801841C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017DB30); - - -extern void (*D_8018420C[])(void); - -void func_8017DD9C(void *a0) { - D_8018420C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80184258[])(void); - -void func_8017DDD8(void *a0) { - D_80184258[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017DE14); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017DF7C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E0FC); - -void func_8017E174(void) { -} - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E17C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E1DC); - -void func_8017E254(void) { -} - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E25C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E2F4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E394); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E3F8); - -void func_8017E4A8(void) { -} - - -extern void (*D_80184288[])(void); - -void func_8017E4B0(void *a0) { - D_80184288[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E4EC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E534); - -void func_8017E5C0(void) { -} - -extern s32 func_8017E5C8(void); - -s32 func_8017E5C8(void) { - return 0x6E; -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E5D0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017E9F4); - - -extern void (*D_8019E1EC[])(void); - -void func_8017ED68(void *a0) { - D_8019E1EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017EDA4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017EEEC); - - -extern void (*D_8019E268[])(void); - -void func_8017F09C(void *a0) { - D_8019E268[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019E2A4[])(void); - -void func_8017F0D8(void *a0) { - D_8019E2A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F114); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F1BC); - -extern void func_8017E5D0(void); - void func_8017F240(s32 arg0) { - s32 temp_v0; - func_8017E5D0(); - temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; - *(s32 *)(arg0 + 0x1c) = temp_v0; - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_801A077C; - void func_8017F278(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801A077C, 0x1000000); - } - - - -extern void (*D_801A0794[])(void); - -void func_8017F2A0(void *a0) { - D_801A0794[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F2DC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F324); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_801A079C; - -void func_8017F364(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801A079C, 0x1000000); -} - - - -extern void (*D_801A07A8[])(void); - -void func_8017F38C(void *a0) { - D_801A07A8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F3C8); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F4D0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F510); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F5F0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F6CC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F760); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F7D4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F8AC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017F8F8); - - -extern void func_8012A828(s32 *a0, s32 a1); - extern short D_801A89A0; - void func_8017FA00(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - *(short *)((char *)a0 + 0x34) = 0; - func_8012A828((s32 *)a0, (s32)&D_801A89A0); - } - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FA30); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FAB4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FC7C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FCC0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FE34); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FEB4); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8017FF58(void) { - func_8002D4C8(0x6AA, 0); - } - - - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8017FF7C(u8 *a0) { - if (*(u8 *)(a0 + 0x5E) == 0xC) { - func_8002D4C8(0x9DA, 0); - } - } - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FFAC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8017FFF0); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_80180098); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_8018015C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_801801AC); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_80180298); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801734BC", func_80180360); - diff --git a/src/ov_SC06_011/ov_SC06_011_jr_80178D40.c b/src/ov_SC06_011/ov_SC06_011_jr_80178D40.c new file mode 100644 index 000000000..ef349bcd3 --- /dev/null +++ b/src/ov_SC06_011/ov_SC06_011_jr_80178D40.c @@ -0,0 +1,4545 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183638[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801AAEA0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018362C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183670[]; +extern unsigned short D_80183678[]; +extern unsigned short D_80183680[]; +extern unsigned char D_801AAEA8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801AAEA0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183688[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801AAFDC; +extern M2C_UNK D_801AAFE0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801AAF68; +extern void (*D_801836B8[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801AAFE4[]; +extern u8 D_801AAFEC[]; +extern u8 D_801AAF9C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801836C0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801836DC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801836E4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018374C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801836F0; +extern u8 D_801836FC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183780[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183788[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801837DC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80183810[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80183800[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018382C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801838A4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801838AC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801838B4[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801838BC[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801838C4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801838CC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801838D8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801838E4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801838F0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80183900[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80183910[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80183918[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80183920[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183928[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80183930[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183938[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80183940[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80183948[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80183950[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183958[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183960[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183968[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183970[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183978[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183980[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183988[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183990[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183998[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801839A0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801839A8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801839B0[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801839B8[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801839C0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80183A04[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801839C8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80183A34[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80183A70[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183AC8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183AD8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183AE0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80183C48[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80183C54[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801AA57C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801ABCE0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AB720; +extern short D_801ABD54; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801ABD54) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801ABD54)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AB720 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801ABD54) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801ABCB0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801ABCB0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801ABD54) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801ABD54) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801ABB7C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AB724; + extern s32 D_801ABB38; + extern s16 D_801ABB3C; + extern s16 D_801ABB40; + extern s16 D_801ABB44; + extern s16 D_801ABB48; + extern s32 D_801ABB50; + extern s32 D_801ABB54; + extern s32 D_801ABB64; + extern s16 D_801ABB68; + extern s16 D_801ABB6C; + extern s32 D_801ABB70; + extern s32 D_801ABB78; + extern s32 D_801ABB7C[10]; + extern s32 D_801ABBF0; + extern s16 D_801ABCB0; + extern s32 D_801ABCDC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801ABCB0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801ABB38); + D_801ABB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ABB44, D_801ABB48 ? 0x48 : 0x40); + (*(s16*)&D_801ABD54) = 2; + break; + case 0: + func_80179B28(D_801ABB38); + D_801ABB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801ABB3C, D_801ABB40 ? 0x48 : 0x40); + (*(s16*)&D_801ABD54) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801ABBF0 != 0) { + func_80179B28(D_801ABB38); + D_801ABB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801ABB3C, D_801ABB40 ? 0x48 : 0x40); + (*(s16*)&D_801ABD54) = 1; + } else { + (*(s16*)&D_801ABD54) = 3; + } + break; + case 0x32: + func_80179B28(D_801ABB38); + D_801ABB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801ABB3C, + D_801ABB40 ? 0x48 : 0x40); + (*(s16*)&D_801ABD54) = 1; + break; + case 2: + func_80179B28(D_801ABB38); + if (D_801ABB50 != 0) { + D_801AB720 = D_801ABB50; + D_801ABB50 = 0; + (*(s16*)&D_801ABD54) = 3; + return; + } + (*(s16*)&D_801ABD54) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801ABD54) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801ABD54) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801ABD54) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801ABD54) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801ABD54) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x1B: + D_801ABB70 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801ABD54) = 4; + D_801AB724 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801ABD54) = 5; + D_801ABB64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801ABB64 = (s32)func_8017A3B0; + (*(s16*)&D_801ABD54) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x24: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ABD54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801ABD54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801ABD54) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ABD54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ABD54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801ABD54) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ABD54) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801ABD54) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801ABD54) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ABB54); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801ABB54); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ABB54); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801ABB54); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x4E: + D_801ABB78 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x2B: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801ABD54) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801ABCDC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x34: + (*(s16*)&D_801ABD54) = 3; + D_801AB720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801ABB50 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801ABD54) = 3; + D_801AB720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801ABD54) = 3; + D_801AB720 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AB720 = *(s32 *)(D_801AB720 + 4); + return; + case 0x37: + (*(s16*)&D_801ABD54) = 3; + D_801ABB3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ABB40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801ABD54) = 3; + D_801ABB44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801ABB48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801ABD54) = 3; + D_801ABB3C = w1; + D_801ABB40 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801ABD54) = 3; + D_801ABB44 = w2; + D_801ABB48 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x43: + D_801ABB64 = (s32)func_8017A3D8; + D_801ABB6C = 0; + (*(s16*)&D_801ABD54) = 5; + D_801ABB68 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801ABD54) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801ABD54) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801ABB7C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801ABD54) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801ABB7C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801ABD54) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801ABB7C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801ABD54) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801ABB7C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801ABD54) = 3; + break; + default: + break; + } +Lend: + D_801AB720 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ABB4C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801ABB4C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801ABB4C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801ABB4C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801ABB74; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801ABB74 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801ABB30; + +s32 func_8017A3B0(void) { + switch (D_801ABB30) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801ABB6C; +extern short D_801ABB68; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801ABB6C) { + case 0: + func_800D0CA0(1); + D_801ABB6C = D_801ABB6C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801ABB68; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801ABB6C = D_801ABB6C + 1; + if (D_801ABB6C < 0x1E) { + return 0; + } + D_801ABB6C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801ABBAC; + extern s16 D_801ABBAE; + extern s16 D_801ABBB0; + extern s16 D_801ABBA4; + extern s16 D_801ABBA6; + extern s16 D_801ABBA8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801ABBAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801ABBAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801ABBB0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801ABBA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801ABBA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801ABBA8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801ABB34; +extern u16 D_801ABBB4; +extern u16 D_801ABBB6; +extern u16 D_801ABBB8; +extern s16 D_801ABCE0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801ABCE0 = 0; + D_801ABB34 = 0; + D_801ABBB4 = D_80126B5E; + D_801ABBB6 = D_80126B62; + D_801ABBB8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183D90[]; + extern s16 D_801ABBAC; + extern s16 D_801ABBA4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183D90[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183D90[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ABBAC; + s16 *p78C = &D_801ABBA4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801ABCE0 = 1; + D_801ABB34 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801ABB54; + extern SV4_8017B368 D_801ABB5C; + extern s16 D_801ABBAC; + extern s16 D_801ABBA4; + extern u16 D_80183D90; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801ABB54; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801ABB5C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183D90)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183D90)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801ABBAC) = loc0; + (*(SV4_8017B368 *)&D_801ABBA4) = loc1; + D_801ABCE0 = 1; + D_801ABB34 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183D90[]; + extern s16 D_801ABBAC; + extern s16 D_801ABBAE; + extern s16 D_801ABBB0; + extern s16 D_801ABBA4; + extern s16 D_801ABBA6; + extern s16 D_801ABBA8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183D90[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183D90[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801ABBAC; + s16 *p78C = &D_801ABBA4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801ABBAE; + v798 = D_801ABBB0; + v78C = *p78C; + v78E = D_801ABBA6; + v790 = D_801ABBA8; + __asm__ __volatile__(""); + D_801ABCE0 = 1; + D_801ABB34 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ABB34; +extern s16 D_801ABBAC; +extern s16 D_801ABBAE; +extern s16 D_801ABBB0; +extern s16 D_801ABBA4; +extern s16 D_801ABBA6; +extern s16 D_801ABBA8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801ABB34 = 0; + D_801ABBAC = (s16) D_80114F30; + D_801ABBAE = (s16) D_80114F34; + D_801ABBB0 = (s16) D_80114F38; + D_801ABBA4 = (s16) D_80114F24; + D_801ABBA6 = (s16) D_80114F28; + D_801ABBA8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801ABBC4; +extern s16 D_801ABBC6; +extern s16 D_801ABBC8; +extern s16 D_801ABBCC; +extern s16 D_801ABBCE; +extern s16 D_801ABBD0; + +void func_8017B824(void) { + D_801ABBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801ABBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801ABBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801ABBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801ABBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801ABBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801ABBC4; +extern s16 D_801ABBC6; +extern s16 D_801ABBC8; +extern s16 D_801ABBCC; +extern s16 D_801ABBCE; +extern s16 D_801ABBD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801ABBC4; + D_80114F34 = D_801ABBC6; + D_80114F38 = D_801ABBC8; + D_80114F24 = D_801ABBCC; + D_80114F28 = D_801ABBCE; + D_80114F2C = D_801ABBD0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801ABBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801ABBA4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801ABBAC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801ABBA4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801ABBB4; +extern u16 D_801ABBB6; +extern u16 D_801ABBB8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801ABB34; +extern short D_801ABBBC; +extern short D_801ABBBE; +extern short D_801ABBC0; +extern s16 D_801ABBAC; +extern s16 D_801ABBAE; +extern s16 D_801ABBB0; +extern s16 D_801ABBA4; +extern s16 D_801ABBA6; +extern s16 D_801ABBA8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801ABBB4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801ABBB6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801ABBB8); + (*(s16 *)&D_801ABBBC) = buf[0]; + (*(s16 *)&D_801ABBBE) = buf[1]; + (*(s16 *)&D_801ABBC0) = buf[2]; + D_801ABBAC = D_80114F30 + buf[0]; + D_801ABB34 = 0; + D_801ABBAE = D_80114F34 + buf[1]; + D_801ABBB0 = D_80114F38 + buf[2]; + D_801ABBA4 = D_80114F24 + buf[0]; + D_801ABBA6 = D_80114F28 + buf[1]; + D_801ABBA8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801ABB54; +extern SV4 D_801ABB5C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801ABB5C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801ABB54 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801ABB5C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801ABB5C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801ABB54) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801ABB5C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801ABB7C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801ABB7C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801ABB34; +extern s16 D_801ABCE0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801ABB34 = D_801ABB34 + 1; + if (D_801ABB34 >= 0x1F) { + D_801ABCE0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801ABB34; +extern s16 D_801ABCE0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ABB34 = D_801ABB34 + 1; + if (0x18 < D_801ABB34) { + func_8012A4BC(); + D_801ABCE0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801ABB34; +extern void (*D_801ABB78)(void); +extern short D_801ABBBC; +extern short D_801ABBBE; +extern short D_801ABBC0; +extern s16 D_801ABCE0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801ABB34 = D_801ABB34 + 1; + if (D_801ABB34 >= 0x19) { + if (D_801ABB78 != 0) { + (*D_801ABB78)(); + } else { + D_80114F30 = D_80114F30 + D_801ABBBC; + D_80114F34 = D_80114F34 + D_801ABBBE; + D_80114F38 = D_80114F38 + D_801ABBC0; + D_80114F24 = D_80114F24 + D_801ABBBC; + D_80114F28 = D_80114F28 + D_801ABBBE; + D_80114F2C = D_80114F2C + D_801ABBC0; + func_8012A4BC(); + } + D_801ABCE0 = 0; + } +} + + + +extern void (*D_80183E30[])(void); + +void func_8017BE60(void *a0) { + D_80183E30[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CDE4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CE2C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CE74); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CEC4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CF18); + + +extern void (*D_801840BC[])(void); + +void func_8017CF60(void *a0) { + D_801840BC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017CF9C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CFE0(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801840C4[])(void); + +void func_8017D004(void *a0) { + D_801840C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D040); + + +extern void (*D_801840CC[])(void); + +void func_8017D084(void *a0) { + D_801840CC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D0C0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D100(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D17C(void) { + func_800D1EBC(); + } + + + +extern void (*D_801840D8[])(void); + +void func_8017D19C(void *a0) { + D_801840D8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D1D8); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D24C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D274); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D29C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D334); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D3CC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D464); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D4FC); + + +extern void (*D_801840F0[])(void); + +void func_8017D594(void *a0) { + D_801840F0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D5D0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D670); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D710); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D7B0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D850); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017D8F0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017DA88); + + +extern void (*D_80184170[])(void); + +void func_8017DAB8(void *a0) { + D_80184170[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801841C0[])(void); + +void func_8017DAF4(void *a0) { + D_801841C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017DB30); + + +extern void (*D_8018420C[])(void); + +void func_8017DD9C(void *a0) { + D_8018420C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80184258[])(void); + +void func_8017DDD8(void *a0) { + D_80184258[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017DE14); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017DF7C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E0FC); + +void func_8017E174(void) { +} + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E17C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E1DC); + +void func_8017E254(void) { +} + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E25C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E2F4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E394); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E3F8); + +void func_8017E4A8(void) { +} + + +extern void (*D_80184288[])(void); + +void func_8017E4B0(void *a0) { + D_80184288[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E4EC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E534); + +void func_8017E5C0(void) { +} + +extern s32 func_8017E5C8(void); + +s32 func_8017E5C8(void) { + return 0x6E; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E5D0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017E9F4); + + +extern void (*D_8019E1EC[])(void); + +void func_8017ED68(void *a0) { + D_8019E1EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017EDA4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017EEEC); + + +extern void (*D_8019E268[])(void); + +void func_8017F09C(void *a0) { + D_8019E268[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019E2A4[])(void); + +void func_8017F0D8(void *a0) { + D_8019E2A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F114); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F1BC); + +extern void func_8017E5D0(void); + void func_8017F240(s32 arg0) { + s32 temp_v0; + func_8017E5D0(); + temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; + *(s32 *)(arg0 + 0x1c) = temp_v0; + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_801A077C; + void func_8017F278(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801A077C, 0x1000000); + } + + + +extern void (*D_801A0794[])(void); + +void func_8017F2A0(void *a0) { + D_801A0794[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F2DC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F324); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801A079C; + +void func_8017F364(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801A079C, 0x1000000); +} + + + +extern void (*D_801A07A8[])(void); + +void func_8017F38C(void *a0) { + D_801A07A8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F3C8); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F4D0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F510); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F5F0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F6CC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F760); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F7D4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F8AC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017F8F8); + + +extern void func_8012A828(s32 *a0, s32 a1); + extern short D_801A89A0; + void func_8017FA00(short *a0) { + *(short *)((char *)a0 + 0x2) = 0x2; + *(short *)((char *)a0 + 0x34) = 0; + func_8012A828((s32 *)a0, (s32)&D_801A89A0); + } + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FA30); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FAB4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FC7C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FCC0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FE34); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FEB4); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8017FF58(void) { + func_8002D4C8(0x6AA, 0); + } + + + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8017FF7C(u8 *a0) { + if (*(u8 *)(a0 + 0x5E) == 0xC) { + func_8002D4C8(0x9DA, 0); + } + } + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FFAC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8017FFF0); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_80180098); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_8018015C); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_801801AC); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_80180298); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_80178D40", func_80180360); + + diff --git a/src/ov_SC06_013/ov_SC06_013_jr_801734BC.c b/src/ov_SC06_013/ov_SC06_013_jr_801734BC.c index 907ef0d40..4499dd6b1 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_801734BC.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_801734BC.c @@ -3084,983 +3084,3 @@ void func_80178D18(void) { D_8019AC04 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019AA04; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019AA04 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019AA04; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019AA04 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019AA2C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019AA2C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019A9E8; - -s32 func_8017A3B0(void) { - switch (D_8019A9E8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019AA24; -extern short D_8019AA20; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019AA24) { - case 0: - func_800D0CA0(1); - D_8019AA24 = D_8019AA24 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019AA20; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019AA24 = D_8019AA24 + 1; - if (D_8019AA24 < 0x1E) { - return 0; - } - D_8019AA24 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019AA64; - extern s16 D_8019AA66; - extern s16 D_8019AA68; - extern s16 D_8019AA5C; - extern s16 D_8019AA5E; - extern s16 D_8019AA60; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019AA64, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019AA66, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019AA68, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019AA5C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019AA5E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019AA60, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019A9EC; -extern u16 D_8019AA6C; -extern u16 D_8019AA6E; -extern u16 D_8019AA70; -extern s16 D_8019AB90; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019AB90 = 0; - D_8019A9EC = 0; - D_8019AA6C = D_80126B5E; - D_8019AA6E = D_80126B62; - D_8019AA70 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018250C[]; - extern s16 D_8019AA64; - extern s16 D_8019AA5C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018250C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018250C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019AA64; - s16 *p78C = &D_8019AA5C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019AB90 = 1; - D_8019A9EC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019AA0C; - extern SV4_8017B368 D_8019AA14; - extern s16 D_8019AA64; - extern s16 D_8019AA5C; - extern u16 D_8018250C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019AA0C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019AA14; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018250C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018250C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019AA64) = loc0; - (*(SV4_8017B368 *)&D_8019AA5C) = loc1; - D_8019AB90 = 1; - D_8019A9EC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018250C[]; - extern s16 D_8019AA64; - extern s16 D_8019AA66; - extern s16 D_8019AA68; - extern s16 D_8019AA5C; - extern s16 D_8019AA5E; - extern s16 D_8019AA60; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018250C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018250C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019AA64; - s16 *p78C = &D_8019AA5C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019AA66; - v798 = D_8019AA68; - v78C = *p78C; - v78E = D_8019AA5E; - v790 = D_8019AA60; - __asm__ __volatile__(""); - D_8019AB90 = 1; - D_8019A9EC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A9EC; -extern s16 D_8019AA64; -extern s16 D_8019AA66; -extern s16 D_8019AA68; -extern s16 D_8019AA5C; -extern s16 D_8019AA5E; -extern s16 D_8019AA60; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019A9EC = 0; - D_8019AA64 = (s16) D_80114F30; - D_8019AA66 = (s16) D_80114F34; - D_8019AA68 = (s16) D_80114F38; - D_8019AA5C = (s16) D_80114F24; - D_8019AA5E = (s16) D_80114F28; - D_8019AA60 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019AA7C; -extern s16 D_8019AA7E; -extern s16 D_8019AA80; -extern s16 D_8019AA84; -extern s16 D_8019AA86; -extern s16 D_8019AA88; - -void func_8017B824(void) { - D_8019AA7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019AA7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019AA80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019AA84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019AA86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019AA88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019AA7C; -extern s16 D_8019AA7E; -extern s16 D_8019AA80; -extern s16 D_8019AA84; -extern s16 D_8019AA86; -extern s16 D_8019AA88; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019AA7C; - D_80114F34 = D_8019AA7E; - D_80114F38 = D_8019AA80; - D_80114F24 = D_8019AA84; - D_80114F28 = D_8019AA86; - D_80114F2C = D_8019AA88; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019AA64), src[8..15] -> (*(S8_8017B8E8 *)&D_8019AA5C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019AA64) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019AA5C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019AA6C; -extern u16 D_8019AA6E; -extern u16 D_8019AA70; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019A9EC; -extern short D_8019AA74; -extern short D_8019AA76; -extern short D_8019AA78; -extern s16 D_8019AA64; -extern s16 D_8019AA66; -extern s16 D_8019AA68; -extern s16 D_8019AA5C; -extern s16 D_8019AA5E; -extern s16 D_8019AA60; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019AA6C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019AA6E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019AA70); - (*(s16 *)&D_8019AA74) = buf[0]; - (*(s16 *)&D_8019AA76) = buf[1]; - (*(s16 *)&D_8019AA78) = buf[2]; - D_8019AA64 = D_80114F30 + buf[0]; - D_8019A9EC = 0; - D_8019AA66 = D_80114F34 + buf[1]; - D_8019AA68 = D_80114F38 + buf[2]; - D_8019AA5C = D_80114F24 + buf[0]; - D_8019AA5E = D_80114F28 + buf[1]; - D_8019AA60 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019AA0C; -extern SV4 D_8019AA14; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019AA14) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019AA0C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019AA14 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019AA14)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019AA0C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019AA14) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019AA34[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019AA34; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019A9EC; -extern s16 D_8019AB90; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019A9EC = D_8019A9EC + 1; - if (D_8019A9EC >= 0x1F) { - D_8019AB90 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019A9EC; -extern s16 D_8019AB90; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A9EC = D_8019A9EC + 1; - if (0x18 < D_8019A9EC) { - func_8012A4BC(); - D_8019AB90 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019A9EC; -extern void (*D_8019AA30)(void); -extern short D_8019AA74; -extern short D_8019AA76; -extern short D_8019AA78; -extern s16 D_8019AB90; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019A9EC = D_8019A9EC + 1; - if (D_8019A9EC >= 0x19) { - if (D_8019AA30 != 0) { - (*D_8019AA30)(); - } else { - D_80114F30 = D_80114F30 + D_8019AA74; - D_80114F34 = D_80114F34 + D_8019AA76; - D_80114F38 = D_80114F38 + D_8019AA78; - D_80114F24 = D_80114F24 + D_8019AA74; - D_80114F28 = D_80114F28 + D_8019AA76; - D_80114F2C = D_80114F2C + D_8019AA78; - func_8012A4BC(); - } - D_8019AB90 = 0; - } -} - - - -extern void (*D_801825AC[])(void); - -void func_8017BE60(void *a0) { - D_801825AC[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017CDE4); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017CE2C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE70(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801826B0[])(void); - -void func_8017CE94(void *a0) { - D_801826B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017CED0); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017CF14); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF54(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CFD0(void) { - func_800D1EBC(); - } - - - -extern void (*D_801826C4[])(void); - -void func_8017CFF0(void *a0) { - D_801826C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D02C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D0A0); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D0C8); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D0F0); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D188); - - -extern void (*D_801826DC[])(void); - -void func_8017D220(void *a0) { - D_801826DC[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D25C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D2FC); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D39C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D534); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D564); - - -extern void (*D_80182738[])(void); - -void func_8017D688(void *a0) { - D_80182738[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80182784[])(void); - -void func_8017D6C4(void *a0) { - D_80182784[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D700); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D784); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D87C); - - -extern void (*D_801827AC[])(void); - -void func_8017D928(void *a0) { - D_801827AC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_8018279C; - -void func_8017D964(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8018279C | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_8017D9E0(void) { -} - -extern s32 func_8017D9E8(void); - -s32 func_8017D9E8(void) { - return 0x6E; -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017D9F0); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017DE14); - - -extern void (*D_80195AD4[])(void); - -void func_8017E188(void *a0) { - D_80195AD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E1C4); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E30C); - - -extern void (*D_80195B50[])(void); - -void func_8017E4BC(void *a0) { - D_80195B50[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80195B8C[])(void); - -void func_8017E4F8(void *a0) { - D_80195B8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E534); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E5DC); - -extern void func_8017D9F0(void); - void func_8017E660(s32 *a0) { - s32 *p = a0; - func_8017D9F0(); - p[0x1C / 4] += 1; - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_80198064; - -void func_8017E698(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80198064, 0x1000000); -} - - - -extern void (*D_8019807C[])(void); - -void func_8017E6C0(void *a0) { - D_8019807C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E6FC); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E744); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_80198084; - -void func_8017E784(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80198084, 0x1000000); -} - - - -extern void (*D_80198090[])(void); - -void func_8017E7AC(void *a0) { - D_80198090[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E7E8); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E8F0); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017E930); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017EA10); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_801734BC", func_8017EAEC); - diff --git a/src/ov_SC06_013/ov_SC06_013_jr_80178D40.c b/src/ov_SC06_013/ov_SC06_013_jr_80178D40.c new file mode 100644 index 000000000..95430970e --- /dev/null +++ b/src/ov_SC06_013/ov_SC06_013_jr_80178D40.c @@ -0,0 +1,4429 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181DB4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80199D58; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181DA8[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181DEC[]; +extern unsigned short D_80181DF4[]; +extern unsigned short D_80181DFC[]; +extern unsigned char D_80199D60[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80199D58; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181E04[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80199E94; +extern M2C_UNK D_80199E98; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80199E20; +extern void (*D_80181E34[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80199E9C[]; +extern u8 D_80199EA4[]; +extern u8 D_80199E54[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181E3C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181E58[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181E60[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181EC8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181E6C; +extern u8 D_80181E78; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181EFC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181F04[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181F58[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181F8C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181F7C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181FA8; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182020[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182028[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182030[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182038[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182040[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182048[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182054[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182060[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018206C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018207C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018208C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182094[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018209C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801820A4[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801820AC[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801820B4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801820BC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801820C4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801820CC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801820D4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801820DC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801820E4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801820EC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801820F4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801820FC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80182104[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018210C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80182114[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018211C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80182124[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018212C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80182134[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018213C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80182180[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182144; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801821B0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801821EC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182244[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182254[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018225C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801823C4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801823D0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80199450; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019AB90; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019A5D8; +extern short D_8019AC04; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019AC04) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019AC04)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019A5D8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019AC04) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019AB60 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019AB60 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019AC04) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019AC04) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019AA34[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019A5DC; + extern s32 D_8019A9F0; + extern s16 D_8019A9F4; + extern s16 D_8019A9F8; + extern s16 D_8019A9FC; + extern s16 D_8019AA00; + extern s32 D_8019AA08; + extern s32 D_8019AA0C; + extern s32 D_8019AA1C; + extern s16 D_8019AA20; + extern s16 D_8019AA24; + extern s32 D_8019AA28; + extern s32 D_8019AA30; + extern s32 D_8019AA34[10]; + extern s32 D_8019AAA8; + extern s16 D_8019AB60; + extern s32 D_8019AB8C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019AB60; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019A9F0); + D_8019A9F0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A9FC, D_8019AA00 ? 0x48 : 0x40); + (*(s16*)&D_8019AC04) = 2; + break; + case 0: + func_80179B28(D_8019A9F0); + D_8019A9F0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019A9F4, D_8019A9F8 ? 0x48 : 0x40); + (*(s16*)&D_8019AC04) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019AAA8 != 0) { + func_80179B28(D_8019A9F0); + D_8019A9F0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019A9F4, D_8019A9F8 ? 0x48 : 0x40); + (*(s16*)&D_8019AC04) = 1; + } else { + (*(s16*)&D_8019AC04) = 3; + } + break; + case 0x32: + func_80179B28(D_8019A9F0); + D_8019A9F0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019A9F4, + D_8019A9F8 ? 0x48 : 0x40); + (*(s16*)&D_8019AC04) = 1; + break; + case 2: + func_80179B28(D_8019A9F0); + if (D_8019AA08 != 0) { + D_8019A5D8 = D_8019AA08; + D_8019AA08 = 0; + (*(s16*)&D_8019AC04) = 3; + return; + } + (*(s16*)&D_8019AC04) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019AC04) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019AC04) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019AC04) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019AC04) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019AC04) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x1B: + D_8019AA28 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019AC04) = 4; + D_8019A5DC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019AC04) = 5; + D_8019AA1C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019AA1C = (s32)func_8017A3B0; + (*(s16*)&D_8019AC04) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x24: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019AC04) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019AC04) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019AC04) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC04) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC04) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019AC04) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019AC04) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019AC04) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019AC04) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019AA0C); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019AA0C); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019AA0C); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019AA0C); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x4E: + D_8019AA30 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x2B: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019AC04) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019AB8C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x34: + (*(s16*)&D_8019AC04) = 3; + D_8019A5D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019AA08 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019AC04) = 3; + D_8019A5D8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019AC04) = 3; + D_8019A5D8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019A5D8 = *(s32 *)(D_8019A5D8 + 4); + return; + case 0x37: + (*(s16*)&D_8019AC04) = 3; + D_8019A9F4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019A9F8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019AC04) = 3; + D_8019A9FC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019AA00 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019AC04) = 3; + D_8019A9F4 = w1; + D_8019A9F8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019AC04) = 3; + D_8019A9FC = w2; + D_8019AA00 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x43: + D_8019AA1C = (s32)func_8017A3D8; + D_8019AA24 = 0; + (*(s16*)&D_8019AC04) = 5; + D_8019AA20 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019AC04) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019AC04) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019AA34; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019AC04) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019AA34; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019AC04) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019AA34[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019AC04) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019AA34; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019AC04) = 3; + break; + default: + break; + } +Lend: + D_8019A5D8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019AA04; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019AA04 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019AA04; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019AA04 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019AA2C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019AA2C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019A9E8; + +s32 func_8017A3B0(void) { + switch (D_8019A9E8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019AA24; +extern short D_8019AA20; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019AA24) { + case 0: + func_800D0CA0(1); + D_8019AA24 = D_8019AA24 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019AA20; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019AA24 = D_8019AA24 + 1; + if (D_8019AA24 < 0x1E) { + return 0; + } + D_8019AA24 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019AA64; + extern s16 D_8019AA66; + extern s16 D_8019AA68; + extern s16 D_8019AA5C; + extern s16 D_8019AA5E; + extern s16 D_8019AA60; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019AA64, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019AA66, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019AA68, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019AA5C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019AA5E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019AA60, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019A9EC; +extern u16 D_8019AA6C; +extern u16 D_8019AA6E; +extern u16 D_8019AA70; +extern s16 D_8019AB90; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019AB90 = 0; + D_8019A9EC = 0; + D_8019AA6C = D_80126B5E; + D_8019AA6E = D_80126B62; + D_8019AA70 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018250C[]; + extern s16 D_8019AA64; + extern s16 D_8019AA5C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018250C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018250C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019AA64; + s16 *p78C = &D_8019AA5C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019AB90 = 1; + D_8019A9EC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019AA0C; + extern SV4_8017B368 D_8019AA14; + extern s16 D_8019AA64; + extern s16 D_8019AA5C; + extern u16 D_8018250C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019AA0C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019AA14; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018250C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018250C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019AA64) = loc0; + (*(SV4_8017B368 *)&D_8019AA5C) = loc1; + D_8019AB90 = 1; + D_8019A9EC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018250C[]; + extern s16 D_8019AA64; + extern s16 D_8019AA66; + extern s16 D_8019AA68; + extern s16 D_8019AA5C; + extern s16 D_8019AA5E; + extern s16 D_8019AA60; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018250C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018250C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019AA64; + s16 *p78C = &D_8019AA5C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019AA66; + v798 = D_8019AA68; + v78C = *p78C; + v78E = D_8019AA5E; + v790 = D_8019AA60; + __asm__ __volatile__(""); + D_8019AB90 = 1; + D_8019A9EC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A9EC; +extern s16 D_8019AA64; +extern s16 D_8019AA66; +extern s16 D_8019AA68; +extern s16 D_8019AA5C; +extern s16 D_8019AA5E; +extern s16 D_8019AA60; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019A9EC = 0; + D_8019AA64 = (s16) D_80114F30; + D_8019AA66 = (s16) D_80114F34; + D_8019AA68 = (s16) D_80114F38; + D_8019AA5C = (s16) D_80114F24; + D_8019AA5E = (s16) D_80114F28; + D_8019AA60 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019AA7C; +extern s16 D_8019AA7E; +extern s16 D_8019AA80; +extern s16 D_8019AA84; +extern s16 D_8019AA86; +extern s16 D_8019AA88; + +void func_8017B824(void) { + D_8019AA7C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019AA7E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019AA80 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019AA84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019AA86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019AA88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019AA7C; +extern s16 D_8019AA7E; +extern s16 D_8019AA80; +extern s16 D_8019AA84; +extern s16 D_8019AA86; +extern s16 D_8019AA88; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019AA7C; + D_80114F34 = D_8019AA7E; + D_80114F38 = D_8019AA80; + D_80114F24 = D_8019AA84; + D_80114F28 = D_8019AA86; + D_80114F2C = D_8019AA88; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019AA64), src[8..15] -> (*(S8_8017B8E8 *)&D_8019AA5C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019AA64) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019AA5C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019AA6C; +extern u16 D_8019AA6E; +extern u16 D_8019AA70; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019A9EC; +extern short D_8019AA74; +extern short D_8019AA76; +extern short D_8019AA78; +extern s16 D_8019AA64; +extern s16 D_8019AA66; +extern s16 D_8019AA68; +extern s16 D_8019AA5C; +extern s16 D_8019AA5E; +extern s16 D_8019AA60; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019AA6C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019AA6E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019AA70); + (*(s16 *)&D_8019AA74) = buf[0]; + (*(s16 *)&D_8019AA76) = buf[1]; + (*(s16 *)&D_8019AA78) = buf[2]; + D_8019AA64 = D_80114F30 + buf[0]; + D_8019A9EC = 0; + D_8019AA66 = D_80114F34 + buf[1]; + D_8019AA68 = D_80114F38 + buf[2]; + D_8019AA5C = D_80114F24 + buf[0]; + D_8019AA5E = D_80114F28 + buf[1]; + D_8019AA60 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019AA0C; +extern SV4 D_8019AA14; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019AA14) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019AA0C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019AA14 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019AA14)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019AA0C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019AA14) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019AA34[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019AA34; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019A9EC; +extern s16 D_8019AB90; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019A9EC = D_8019A9EC + 1; + if (D_8019A9EC >= 0x1F) { + D_8019AB90 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019A9EC; +extern s16 D_8019AB90; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A9EC = D_8019A9EC + 1; + if (0x18 < D_8019A9EC) { + func_8012A4BC(); + D_8019AB90 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019A9EC; +extern void (*D_8019AA30)(void); +extern short D_8019AA74; +extern short D_8019AA76; +extern short D_8019AA78; +extern s16 D_8019AB90; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019A9EC = D_8019A9EC + 1; + if (D_8019A9EC >= 0x19) { + if (D_8019AA30 != 0) { + (*D_8019AA30)(); + } else { + D_80114F30 = D_80114F30 + D_8019AA74; + D_80114F34 = D_80114F34 + D_8019AA76; + D_80114F38 = D_80114F38 + D_8019AA78; + D_80114F24 = D_80114F24 + D_8019AA74; + D_80114F28 = D_80114F28 + D_8019AA76; + D_80114F2C = D_80114F2C + D_8019AA78; + func_8012A4BC(); + } + D_8019AB90 = 0; + } +} + + + +extern void (*D_801825AC[])(void); + +void func_8017BE60(void *a0) { + D_801825AC[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017CDE4); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017CE2C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE70(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801826B0[])(void); + +void func_8017CE94(void *a0) { + D_801826B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017CED0); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017CF14); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF54(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CFD0(void) { + func_800D1EBC(); + } + + + +extern void (*D_801826C4[])(void); + +void func_8017CFF0(void *a0) { + D_801826C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D02C); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D0A0); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D0C8); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D0F0); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D188); + + +extern void (*D_801826DC[])(void); + +void func_8017D220(void *a0) { + D_801826DC[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D25C); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D2FC); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D39C); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D534); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D564); + + +extern void (*D_80182738[])(void); + +void func_8017D688(void *a0) { + D_80182738[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80182784[])(void); + +void func_8017D6C4(void *a0) { + D_80182784[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D700); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D784); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D87C); + + +extern void (*D_801827AC[])(void); + +void func_8017D928(void *a0) { + D_801827AC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_8018279C; + +void func_8017D964(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8018279C | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_8017D9E0(void) { +} + +extern s32 func_8017D9E8(void); + +s32 func_8017D9E8(void) { + return 0x6E; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017D9F0); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017DE14); + + +extern void (*D_80195AD4[])(void); + +void func_8017E188(void *a0) { + D_80195AD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E1C4); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E30C); + + +extern void (*D_80195B50[])(void); + +void func_8017E4BC(void *a0) { + D_80195B50[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80195B8C[])(void); + +void func_8017E4F8(void *a0) { + D_80195B8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E534); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E5DC); + +extern void func_8017D9F0(void); + void func_8017E660(s32 *a0) { + s32 *p = a0; + func_8017D9F0(); + p[0x1C / 4] += 1; + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_80198064; + +void func_8017E698(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80198064, 0x1000000); +} + + + +extern void (*D_8019807C[])(void); + +void func_8017E6C0(void *a0) { + D_8019807C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E6FC); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E744); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_80198084; + +void func_8017E784(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80198084, 0x1000000); +} + + + +extern void (*D_80198090[])(void); + +void func_8017E7AC(void *a0) { + D_80198090[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E7E8); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E8F0); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017E930); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017EA10); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_80178D40", func_8017EAEC); + + diff --git a/src/ov_SC06_014/ov_SC06_014_jr_801734BC.c b/src/ov_SC06_014/ov_SC06_014_jr_801734BC.c index e1f8a4570..550a078b5 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_801734BC.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_801734BC.c @@ -3084,1089 +3084,3 @@ void func_80178D18(void) { D_801A161C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A13F4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A13F4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A13F4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A13F4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A141C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A141C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A13D8; - -s32 func_8017A3B0(void) { - switch (D_801A13D8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A1414; -extern short D_801A1410; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A1414) { - case 0: - func_800D0CA0(1); - D_801A1414 = D_801A1414 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A1410; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A1414 = D_801A1414 + 1; - if (D_801A1414 < 0x1E) { - return 0; - } - D_801A1414 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A1454; - extern s16 D_801A1456; - extern s16 D_801A1458; - extern s16 D_801A144C; - extern s16 D_801A144E; - extern s16 D_801A1450; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1454, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1456, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1458, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A144C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A144E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1450, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A13DC; -extern u16 D_801A145C; -extern u16 D_801A145E; -extern u16 D_801A1460; -extern s16 D_801A15A8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A15A8 = 0; - D_801A13DC = 0; - D_801A145C = D_80126B5E; - D_801A145E = D_80126B62; - D_801A1460 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183870[]; - extern s16 D_801A1454; - extern s16 D_801A144C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183870[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183870[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1454; - s16 *p78C = &D_801A144C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A15A8 = 1; - D_801A13DC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A13FC; - extern SV4_8017B368 D_801A1404; - extern s16 D_801A1454; - extern s16 D_801A144C; - extern u16 D_80183870; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A13FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A1404; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80183870)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80183870)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A1454) = loc0; - (*(SV4_8017B368 *)&D_801A144C) = loc1; - D_801A15A8 = 1; - D_801A13DC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80183870[]; - extern s16 D_801A1454; - extern s16 D_801A1456; - extern s16 D_801A1458; - extern s16 D_801A144C; - extern s16 D_801A144E; - extern s16 D_801A1450; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80183870[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80183870[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A1454; - s16 *p78C = &D_801A144C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A1456; - v798 = D_801A1458; - v78C = *p78C; - v78E = D_801A144E; - v790 = D_801A1450; - __asm__ __volatile__(""); - D_801A15A8 = 1; - D_801A13DC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A13DC; -extern s16 D_801A1454; -extern s16 D_801A1456; -extern s16 D_801A1458; -extern s16 D_801A144C; -extern s16 D_801A144E; -extern s16 D_801A1450; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A13DC = 0; - D_801A1454 = (s16) D_80114F30; - D_801A1456 = (s16) D_80114F34; - D_801A1458 = (s16) D_80114F38; - D_801A144C = (s16) D_80114F24; - D_801A144E = (s16) D_80114F28; - D_801A1450 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A146C; -extern s16 D_801A146E; -extern s16 D_801A1470; -extern s16 D_801A1474; -extern s16 D_801A1476; -extern s16 D_801A1478; - -void func_8017B824(void) { - D_801A146C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A146E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A1470 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A1474 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A1476 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A1478 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A146C; -extern s16 D_801A146E; -extern s16 D_801A1470; -extern s16 D_801A1474; -extern s16 D_801A1476; -extern s16 D_801A1478; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A146C; - D_80114F34 = D_801A146E; - D_80114F38 = D_801A1470; - D_80114F24 = D_801A1474; - D_80114F28 = D_801A1476; - D_80114F2C = D_801A1478; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A1454), src[8..15] -> (*(S8_8017B8E8 *)&D_801A144C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A1454) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A144C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A145C; -extern u16 D_801A145E; -extern u16 D_801A1460; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A13DC; -extern short D_801A1464; -extern short D_801A1466; -extern short D_801A1468; -extern s16 D_801A1454; -extern s16 D_801A1456; -extern s16 D_801A1458; -extern s16 D_801A144C; -extern s16 D_801A144E; -extern s16 D_801A1450; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A145C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A145E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1460); - (*(s16 *)&D_801A1464) = buf[0]; - (*(s16 *)&D_801A1466) = buf[1]; - (*(s16 *)&D_801A1468) = buf[2]; - D_801A1454 = D_80114F30 + buf[0]; - D_801A13DC = 0; - D_801A1456 = D_80114F34 + buf[1]; - D_801A1458 = D_80114F38 + buf[2]; - D_801A144C = D_80114F24 + buf[0]; - D_801A144E = D_80114F28 + buf[1]; - D_801A1450 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A13FC; -extern SV4 D_801A1404; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A1404) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A13FC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A1404 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A1404)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A13FC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A1404) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A1424[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A1424; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A13DC; -extern s16 D_801A15A8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A13DC = D_801A13DC + 1; - if (D_801A13DC >= 0x1F) { - D_801A15A8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A13DC; -extern s16 D_801A15A8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A13DC = D_801A13DC + 1; - if (0x18 < D_801A13DC) { - func_8012A4BC(); - D_801A15A8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A13DC; -extern void (*D_801A1420)(void); -extern short D_801A1464; -extern short D_801A1466; -extern short D_801A1468; -extern s16 D_801A15A8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A13DC = D_801A13DC + 1; - if (D_801A13DC >= 0x19) { - if (D_801A1420 != 0) { - (*D_801A1420)(); - } else { - D_80114F30 = D_80114F30 + D_801A1464; - D_80114F34 = D_80114F34 + D_801A1466; - D_80114F38 = D_80114F38 + D_801A1468; - D_80114F24 = D_80114F24 + D_801A1464; - D_80114F28 = D_80114F28 + D_801A1466; - D_80114F2C = D_80114F2C + D_801A1468; - func_8012A4BC(); - } - D_801A15A8 = 0; - } -} - - - -extern void (*D_80183910[])(void); - -void func_8017BE60(void *a0) { - D_80183910[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017BEBC); - - -extern void (*D_80183934[])(void); - -void func_8017CD9C(void *a0) { - D_80183934[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017CDD8); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017CF9C); - - -extern void (*D_8018393C[])(void); - -void func_8017D030(void *a0) { - D_8018393C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80183928; - -void func_8017D06C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80183928, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D1BC); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D204); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D248(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80183A8C[])(void); - -void func_8017D26C(void *a0) { - D_80183A8C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D2A8); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D2EC); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D32C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D3A8(void) { - func_800D1EBC(); - } - - - -extern void (*D_80183AA0[])(void); - -void func_8017D3C8(void *a0) { - D_80183AA0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D404); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D478); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D4A0); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D4C8); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D560); - - -extern void (*D_80183AB8[])(void); - -void func_8017D5F8(void *a0) { - D_80183AB8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D634); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D6D4); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D774); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D90C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D93C); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801A1480; -extern u16 D_80183AC8[]; -extern u16 D_801A1484[]; -extern s32 D_80183AE8; - -extern void func_800183E0(s32 a0); - -void func_8017D95C(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80183AC8; - base = D_801A1480 >> 8; - p = D_801A1484; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80183AE8); - D_801A1480 = D_801A1480 + 0x100; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017D9E8); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017DB68); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017DC40); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017DDE0); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017DF08); - - -extern void (*D_80183BAC[])(void); - -void func_8017DFF8(void *a0) { - D_80183BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E034); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E164); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E220); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E29C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E32C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E3B8); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E4B4); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E5C0); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E778); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E80C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E874); - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_80183DCC[]; - s32 func_8017E8AC(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80183DCC[0], &D_80183DCC[8], 10) != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E8D8); - -extern u8 D_80078EC1; - s32 func_8017E9A8(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017E9C0); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EA2C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EADC); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EB34); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EB78); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EBA0); - -void func_8017EC68(void) { -} - -void func_8017EC70(void) { -} - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017EC78); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017ECEC); - -extern s32 func_8017ED4C(void); - -s32 func_8017ED4C(void) { - return 0x6E; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017ED54); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017F178); - - -extern void (*D_80199EB4[])(void); - -void func_8017F4EC(void *a0) { - D_80199EB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017F528); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017F670); - - -extern void (*D_80199F30[])(void); - -void func_8017F820(void *a0) { - D_80199F30[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_80199F6C[])(void); - -void func_8017F85C(void *a0) { - D_80199F6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017F898); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017F940); - -extern void func_8017ED54(void); - void func_8017F9C4(s32 *a0) { - s32 *p = a0; - func_8017ED54(); - p[0x1C / 4] += 1; - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8019C444; - -void func_8017F9FC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019C444, 0x1000000); -} - - - -extern void (*D_8019C45C[])(void); - -void func_8017FA24(void *a0) { - D_8019C45C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FA60); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FAA8); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8019C464; - -void func_8017FAE8(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019C464, 0x1000000); -} - - - -extern void (*D_8019C470[])(void); - -void func_8017FB10(void *a0) { - D_8019C470[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FB4C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FC54); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FC94); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FD74); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_801734BC", func_8017FE50); - diff --git a/src/ov_SC06_014/ov_SC06_014_jr_80178D40.c b/src/ov_SC06_014/ov_SC06_014_jr_80178D40.c new file mode 100644 index 000000000..c5f347913 --- /dev/null +++ b/src/ov_SC06_014/ov_SC06_014_jr_80178D40.c @@ -0,0 +1,4535 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80183118[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A0748; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018310C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80183150[]; +extern unsigned short D_80183158[]; +extern unsigned short D_80183160[]; +extern unsigned char D_801A0750[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A0748; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80183168[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A0884; +extern M2C_UNK D_801A0888; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A0810; +extern void (*D_80183198[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A088C[]; +extern u8 D_801A0894[]; +extern u8 D_801A0844[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801831A0[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801831BC[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801831C4[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018322C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801831D0; +extern u8 D_801831DC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80183260[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80183268[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801832BC[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801832F0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801832E0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018330C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80183384[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018338C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80183394[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018339C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801833A4[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801833AC[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801833B8[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801833C4[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801833D0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801833E0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801833F0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801833F8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80183400[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80183408[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80183410[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80183418[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80183420[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80183428[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80183430[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80183438[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80183440[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80183448[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80183450[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80183458[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80183460[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183468[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183470[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183478[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183480[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183488[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183490[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183498[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801834A0[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801834E4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801834A8; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80183514[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80183550[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801835A8[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801835B8[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801835C0[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80183728[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80183734[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019FE40; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A15A8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A0FC8; +extern short D_801A161C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A161C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A161C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A0FC8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A161C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A1578 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A1578 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A161C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A161C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A1424[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A0FCC; + extern s32 D_801A13E0; + extern s16 D_801A13E4; + extern s16 D_801A13E8; + extern s16 D_801A13EC; + extern s16 D_801A13F0; + extern s32 D_801A13F8; + extern s32 D_801A13FC; + extern s32 D_801A140C; + extern s16 D_801A1410; + extern s16 D_801A1414; + extern s32 D_801A1418; + extern s32 D_801A1420; + extern s32 D_801A1424[10]; + extern s32 D_801A14C0; + extern s16 D_801A1578; + extern s32 D_801A15A4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A1578; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A13E0); + D_801A13E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A13EC, D_801A13F0 ? 0x48 : 0x40); + (*(s16*)&D_801A161C) = 2; + break; + case 0: + func_80179B28(D_801A13E0); + D_801A13E0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A13E4, D_801A13E8 ? 0x48 : 0x40); + (*(s16*)&D_801A161C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A14C0 != 0) { + func_80179B28(D_801A13E0); + D_801A13E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A13E4, D_801A13E8 ? 0x48 : 0x40); + (*(s16*)&D_801A161C) = 1; + } else { + (*(s16*)&D_801A161C) = 3; + } + break; + case 0x32: + func_80179B28(D_801A13E0); + D_801A13E0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A13E4, + D_801A13E8 ? 0x48 : 0x40); + (*(s16*)&D_801A161C) = 1; + break; + case 2: + func_80179B28(D_801A13E0); + if (D_801A13F8 != 0) { + D_801A0FC8 = D_801A13F8; + D_801A13F8 = 0; + (*(s16*)&D_801A161C) = 3; + return; + } + (*(s16*)&D_801A161C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A161C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A161C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A161C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A161C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A161C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A161C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A161C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A161C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A161C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A161C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A161C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x1B: + D_801A1418 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A161C) = 4; + D_801A0FCC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A161C) = 5; + D_801A140C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A140C = (s32)func_8017A3B0; + (*(s16*)&D_801A161C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x24: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A161C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A161C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A161C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A161C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A161C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A161C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A161C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A161C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A161C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A13FC); + (*(s16*)&D_801A161C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A13FC); + (*(s16*)&D_801A161C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A13FC); + (*(s16*)&D_801A161C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A13FC); + (*(s16*)&D_801A161C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + break; + case 0x4E: + D_801A1420 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x2B: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A161C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A15A4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A161C) = 3; + break; + case 0x34: + (*(s16*)&D_801A161C) = 3; + D_801A0FC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A13F8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A161C) = 3; + D_801A0FC8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A161C) = 3; + D_801A0FC8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A0FC8 = *(s32 *)(D_801A0FC8 + 4); + return; + case 0x37: + (*(s16*)&D_801A161C) = 3; + D_801A13E4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A13E8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A161C) = 3; + D_801A13EC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A13F0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A161C) = 3; + D_801A13E4 = w1; + D_801A13E8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A161C) = 3; + D_801A13EC = w2; + D_801A13F0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + case 0x43: + D_801A140C = (s32)func_8017A3D8; + D_801A1414 = 0; + (*(s16*)&D_801A161C) = 5; + D_801A1410 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A161C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A161C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A161C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A1424; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A161C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A1424; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A161C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A1424[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A161C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A1424; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A161C) = 3; + break; + default: + break; + } +Lend: + D_801A0FC8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A13F4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A13F4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A13F4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A13F4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A141C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A141C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A13D8; + +s32 func_8017A3B0(void) { + switch (D_801A13D8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A1414; +extern short D_801A1410; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A1414) { + case 0: + func_800D0CA0(1); + D_801A1414 = D_801A1414 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A1410; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A1414 = D_801A1414 + 1; + if (D_801A1414 < 0x1E) { + return 0; + } + D_801A1414 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A1454; + extern s16 D_801A1456; + extern s16 D_801A1458; + extern s16 D_801A144C; + extern s16 D_801A144E; + extern s16 D_801A1450; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A1454, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A1456, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A1458, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A144C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A144E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A1450, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A13DC; +extern u16 D_801A145C; +extern u16 D_801A145E; +extern u16 D_801A1460; +extern s16 D_801A15A8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A15A8 = 0; + D_801A13DC = 0; + D_801A145C = D_80126B5E; + D_801A145E = D_80126B62; + D_801A1460 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183870[]; + extern s16 D_801A1454; + extern s16 D_801A144C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183870[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183870[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1454; + s16 *p78C = &D_801A144C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A15A8 = 1; + D_801A13DC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A13FC; + extern SV4_8017B368 D_801A1404; + extern s16 D_801A1454; + extern s16 D_801A144C; + extern u16 D_80183870; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A13FC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A1404; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80183870)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80183870)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A1454) = loc0; + (*(SV4_8017B368 *)&D_801A144C) = loc1; + D_801A15A8 = 1; + D_801A13DC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80183870[]; + extern s16 D_801A1454; + extern s16 D_801A1456; + extern s16 D_801A1458; + extern s16 D_801A144C; + extern s16 D_801A144E; + extern s16 D_801A1450; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80183870[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80183870[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A1454; + s16 *p78C = &D_801A144C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A1456; + v798 = D_801A1458; + v78C = *p78C; + v78E = D_801A144E; + v790 = D_801A1450; + __asm__ __volatile__(""); + D_801A15A8 = 1; + D_801A13DC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A13DC; +extern s16 D_801A1454; +extern s16 D_801A1456; +extern s16 D_801A1458; +extern s16 D_801A144C; +extern s16 D_801A144E; +extern s16 D_801A1450; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A13DC = 0; + D_801A1454 = (s16) D_80114F30; + D_801A1456 = (s16) D_80114F34; + D_801A1458 = (s16) D_80114F38; + D_801A144C = (s16) D_80114F24; + D_801A144E = (s16) D_80114F28; + D_801A1450 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A146C; +extern s16 D_801A146E; +extern s16 D_801A1470; +extern s16 D_801A1474; +extern s16 D_801A1476; +extern s16 D_801A1478; + +void func_8017B824(void) { + D_801A146C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A146E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A1470 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A1474 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A1476 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A1478 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A146C; +extern s16 D_801A146E; +extern s16 D_801A1470; +extern s16 D_801A1474; +extern s16 D_801A1476; +extern s16 D_801A1478; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A146C; + D_80114F34 = D_801A146E; + D_80114F38 = D_801A1470; + D_80114F24 = D_801A1474; + D_80114F28 = D_801A1476; + D_80114F2C = D_801A1478; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A1454), src[8..15] -> (*(S8_8017B8E8 *)&D_801A144C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A1454) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A144C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A145C; +extern u16 D_801A145E; +extern u16 D_801A1460; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A13DC; +extern short D_801A1464; +extern short D_801A1466; +extern short D_801A1468; +extern s16 D_801A1454; +extern s16 D_801A1456; +extern s16 D_801A1458; +extern s16 D_801A144C; +extern s16 D_801A144E; +extern s16 D_801A1450; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A145C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A145E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A1460); + (*(s16 *)&D_801A1464) = buf[0]; + (*(s16 *)&D_801A1466) = buf[1]; + (*(s16 *)&D_801A1468) = buf[2]; + D_801A1454 = D_80114F30 + buf[0]; + D_801A13DC = 0; + D_801A1456 = D_80114F34 + buf[1]; + D_801A1458 = D_80114F38 + buf[2]; + D_801A144C = D_80114F24 + buf[0]; + D_801A144E = D_80114F28 + buf[1]; + D_801A1450 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A13FC; +extern SV4 D_801A1404; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A1404) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A13FC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A1404 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A1404)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A13FC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A1404) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A1424[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A1424; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A13DC; +extern s16 D_801A15A8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A13DC = D_801A13DC + 1; + if (D_801A13DC >= 0x1F) { + D_801A15A8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A13DC; +extern s16 D_801A15A8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A13DC = D_801A13DC + 1; + if (0x18 < D_801A13DC) { + func_8012A4BC(); + D_801A15A8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A13DC; +extern void (*D_801A1420)(void); +extern short D_801A1464; +extern short D_801A1466; +extern short D_801A1468; +extern s16 D_801A15A8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A13DC = D_801A13DC + 1; + if (D_801A13DC >= 0x19) { + if (D_801A1420 != 0) { + (*D_801A1420)(); + } else { + D_80114F30 = D_80114F30 + D_801A1464; + D_80114F34 = D_80114F34 + D_801A1466; + D_80114F38 = D_80114F38 + D_801A1468; + D_80114F24 = D_80114F24 + D_801A1464; + D_80114F28 = D_80114F28 + D_801A1466; + D_80114F2C = D_80114F2C + D_801A1468; + func_8012A4BC(); + } + D_801A15A8 = 0; + } +} + + + +extern void (*D_80183910[])(void); + +void func_8017BE60(void *a0) { + D_80183910[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017BEBC); + + +extern void (*D_80183934[])(void); + +void func_8017CD9C(void *a0) { + D_80183934[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017CDD8); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017CF9C); + + +extern void (*D_8018393C[])(void); + +void func_8017D030(void *a0) { + D_8018393C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80183928; + +void func_8017D06C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80183928, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D1BC); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D204); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D248(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80183A8C[])(void); + +void func_8017D26C(void *a0) { + D_80183A8C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D2A8); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D2EC); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D32C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D3A8(void) { + func_800D1EBC(); + } + + + +extern void (*D_80183AA0[])(void); + +void func_8017D3C8(void *a0) { + D_80183AA0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D404); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D478); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D4A0); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D4C8); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D560); + + +extern void (*D_80183AB8[])(void); + +void func_8017D5F8(void *a0) { + D_80183AB8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D634); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D6D4); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D774); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D90C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D93C); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_801A1480; +extern u16 D_80183AC8[]; +extern u16 D_801A1484[]; +extern s32 D_80183AE8; + +extern void func_800183E0(s32 a0); + +void func_8017D95C(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80183AC8; + base = D_801A1480 >> 8; + p = D_801A1484; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80183AE8); + D_801A1480 = D_801A1480 + 0x100; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017D9E8); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017DB68); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017DC40); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017DDE0); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017DF08); + + +extern void (*D_80183BAC[])(void); + +void func_8017DFF8(void *a0) { + D_80183BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E034); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E164); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E220); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E29C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E32C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E3B8); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E4B4); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E5C0); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E778); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E80C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E874); + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_80183DCC[]; + s32 func_8017E8AC(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_80183DCC[0], &D_80183DCC[8], 10) != 0; + } + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E8D8); + +extern u8 D_80078EC1; + s32 func_8017E9A8(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017E9C0); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EA2C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EADC); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EB34); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EB78); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EBA0); + +void func_8017EC68(void) { +} + +void func_8017EC70(void) { +} + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017EC78); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017ECEC); + +extern s32 func_8017ED4C(void); + +s32 func_8017ED4C(void) { + return 0x6E; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017ED54); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017F178); + + +extern void (*D_80199EB4[])(void); + +void func_8017F4EC(void *a0) { + D_80199EB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017F528); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017F670); + + +extern void (*D_80199F30[])(void); + +void func_8017F820(void *a0) { + D_80199F30[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void (*D_80199F6C[])(void); + +void func_8017F85C(void *a0) { + D_80199F6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017F898); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017F940); + +extern void func_8017ED54(void); + void func_8017F9C4(s32 *a0) { + s32 *p = a0; + func_8017ED54(); + p[0x1C / 4] += 1; + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019C444; + +void func_8017F9FC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019C444, 0x1000000); +} + + + +extern void (*D_8019C45C[])(void); + +void func_8017FA24(void *a0) { + D_8019C45C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FA60); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FAA8); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019C464; + +void func_8017FAE8(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019C464, 0x1000000); +} + + + +extern void (*D_8019C470[])(void); + +void func_8017FB10(void *a0) { + D_8019C470[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FB4C); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FC54); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FC94); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FD74); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_80178D40", func_8017FE50); + + diff --git a/src/ov_SC06_015/ov_SC06_015_jr_801734BC.c b/src/ov_SC06_015/ov_SC06_015_jr_801734BC.c index b18c3efff..a886635dc 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_801734BC.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_801734BC.c @@ -3084,1009 +3084,3 @@ void func_80178D18(void) { D_801949FC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801947D4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801947D4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801947D4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801947D4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801947FC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801947FC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801947B8; - -s32 func_8017A3B0(void) { - switch (D_801947B8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801947F4; -extern short D_801947F0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801947F4) { - case 0: - func_800D0CA0(1); - D_801947F4 = D_801947F4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801947F0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801947F4 = D_801947F4 + 1; - if (D_801947F4 < 0x1E) { - return 0; - } - D_801947F4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_80194834; - extern s16 D_80194836; - extern s16 D_80194838; - extern s16 D_8019482C; - extern s16 D_8019482E; - extern s16 D_80194830; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194834, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194836, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194838, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019482C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019482E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194830, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801947BC; -extern u16 D_8019483C; -extern u16 D_8019483E; -extern u16 D_80194840; -extern s16 D_80194988; - -void func_8017B1D8(void) { - func_8012A418(); - D_80194988 = 0; - D_801947BC = 0; - D_8019483C = D_80126B5E; - D_8019483E = D_80126B62; - D_80194840 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801823C8[]; - extern s16 D_80194834; - extern s16 D_8019482C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801823C8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801823C8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194834; - s16 *p78C = &D_8019482C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_80194988 = 1; - D_801947BC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801947DC; - extern SV4_8017B368 D_801947E4; - extern s16 D_80194834; - extern s16 D_8019482C; - extern u16 D_801823C8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801947DC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801947E4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801823C8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801823C8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_80194834) = loc0; - (*(SV4_8017B368 *)&D_8019482C) = loc1; - D_80194988 = 1; - D_801947BC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801823C8[]; - extern s16 D_80194834; - extern s16 D_80194836; - extern s16 D_80194838; - extern s16 D_8019482C; - extern s16 D_8019482E; - extern s16 D_80194830; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801823C8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801823C8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_80194834; - s16 *p78C = &D_8019482C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_80194836; - v798 = D_80194838; - v78C = *p78C; - v78E = D_8019482E; - v790 = D_80194830; - __asm__ __volatile__(""); - D_80194988 = 1; - D_801947BC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801947BC; -extern s16 D_80194834; -extern s16 D_80194836; -extern s16 D_80194838; -extern s16 D_8019482C; -extern s16 D_8019482E; -extern s16 D_80194830; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801947BC = 0; - D_80194834 = (s16) D_80114F30; - D_80194836 = (s16) D_80114F34; - D_80194838 = (s16) D_80114F38; - D_8019482C = (s16) D_80114F24; - D_8019482E = (s16) D_80114F28; - D_80194830 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019484C; -extern s16 D_8019484E; -extern s16 D_80194850; -extern s16 D_80194854; -extern s16 D_80194856; -extern s16 D_80194858; - -void func_8017B824(void) { - D_8019484C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019484E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_80194850 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_80194854 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_80194856 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_80194858 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019484C; -extern s16 D_8019484E; -extern s16 D_80194850; -extern s16 D_80194854; -extern s16 D_80194856; -extern s16 D_80194858; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019484C; - D_80114F34 = D_8019484E; - D_80114F38 = D_80194850; - D_80114F24 = D_80194854; - D_80114F28 = D_80194856; - D_80114F2C = D_80194858; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_80194834), src[8..15] -> (*(S8_8017B8E8 *)&D_8019482C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_80194834) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019482C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019483C; -extern u16 D_8019483E; -extern u16 D_80194840; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801947BC; -extern short D_80194844; -extern short D_80194846; -extern short D_80194848; -extern s16 D_80194834; -extern s16 D_80194836; -extern s16 D_80194838; -extern s16 D_8019482C; -extern s16 D_8019482E; -extern s16 D_80194830; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019483C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019483E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194840); - (*(s16 *)&D_80194844) = buf[0]; - (*(s16 *)&D_80194846) = buf[1]; - (*(s16 *)&D_80194848) = buf[2]; - D_80194834 = D_80114F30 + buf[0]; - D_801947BC = 0; - D_80194836 = D_80114F34 + buf[1]; - D_80194838 = D_80114F38 + buf[2]; - D_8019482C = D_80114F24 + buf[0]; - D_8019482E = D_80114F28 + buf[1]; - D_80194830 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801947DC; -extern SV4 D_801947E4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801947E4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801947DC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801947E4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801947E4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801947DC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801947E4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_80194804[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_80194804; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801947BC; -extern s16 D_80194988; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801947BC = D_801947BC + 1; - if (D_801947BC >= 0x1F) { - D_80194988 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801947BC; -extern s16 D_80194988; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801947BC = D_801947BC + 1; - if (0x18 < D_801947BC) { - func_8012A4BC(); - D_80194988 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801947BC; -extern void (*D_80194800)(void); -extern short D_80194844; -extern short D_80194846; -extern short D_80194848; -extern s16 D_80194988; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801947BC = D_801947BC + 1; - if (D_801947BC >= 0x19) { - if (D_80194800 != 0) { - (*D_80194800)(); - } else { - D_80114F30 = D_80114F30 + D_80194844; - D_80114F34 = D_80114F34 + D_80194846; - D_80114F38 = D_80114F38 + D_80194848; - D_80114F24 = D_80114F24 + D_80194844; - D_80114F28 = D_80114F28 + D_80194846; - D_80114F2C = D_80114F2C + D_80194848; - func_8012A4BC(); - } - D_80194988 = 0; - } -} - - - -extern void (*D_80182468[])(void); - -void func_8017BE60(void *a0) { - D_80182468[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017BEBC); - - -extern void (*D_8018248C[])(void); - -void func_8017CD9C(void *a0) { - D_8018248C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017CDD8); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017CF9C); - - -extern void (*D_80182494[])(void); - -void func_8017D030(void *a0) { - D_80182494[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80182480; - -void func_8017D06C(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80182480, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D110); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D174); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D1BC); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D200(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80182544[])(void); - -void func_8017D224(void *a0) { - D_80182544[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D260); - - -extern void (*D_8018254C[])(void); - -void func_8017D2A4(void *a0) { - D_8018254C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D2E0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D320(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D39C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80182558[])(void); - -void func_8017D3BC(void *a0) { - D_80182558[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D3F8); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D46C); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D494); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D4BC); - - -extern void (*D_80182570[])(void); - -void func_8017D554(void *a0) { - D_80182570[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D590); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D630); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D7C8); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D7F8); - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_80194860; -extern u16 D_80182578[]; -extern u16 D_80194864[]; -extern s32 D_80182598; - -extern void func_800183E0(s32 a0); - -void func_8017D818(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_80182578; - base = D_80194860 >> 8; - p = D_80194864; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_80182598); - D_80194860 = D_80194860 + 0x100; -} - - -extern s32 func_8017D8A4(void); - -s32 func_8017D8A4(void) { - return 0x6E; -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017D8AC); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017DCD0); - - -extern void (*D_8018F8A4[])(void); - -void func_8017E044(void *a0) { - D_8018F8A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E080); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E1C8); - - -extern void (*D_8018F920[])(void); - -void func_8017E378(void *a0) { - D_8018F920[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018F95C[])(void); - -void func_8017E3B4(void *a0) { - D_8018F95C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E3F0); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E498); - - -extern void func_8017D8AC(void); - void func_8017E51C(s32 arg0) { - s32 temp_v0; - func_8017D8AC(); - temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; - *(s32 *)(arg0 + 0x1c) = temp_v0; - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_80191E34; - -void func_8017E554(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80191E34, 0x1000000); -} - - -extern void (*D_80191E4C[])(void); - -void func_8017E57C(u8 *a0) { - D_80191E4C[a0[0x216]](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E5B8); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E600); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E640); - - -extern void (*D_80191E60[])(void); - -void func_8017E668(void *a0) { - D_80191E60[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E6A4); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E7AC); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E7EC); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E8CC); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_801734BC", func_8017E9A8); - diff --git a/src/ov_SC06_015/ov_SC06_015_jr_80178D40.c b/src/ov_SC06_015/ov_SC06_015_jr_80178D40.c new file mode 100644 index 000000000..e88ca5e58 --- /dev/null +++ b/src/ov_SC06_015/ov_SC06_015_jr_80178D40.c @@ -0,0 +1,4455 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80181C70[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80193B28; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80181C64[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80181CA8[]; +extern unsigned short D_80181CB0[]; +extern unsigned short D_80181CB8[]; +extern unsigned char D_80193B30[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80193B28; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80181CC0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_80193C64; +extern M2C_UNK D_80193C68; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80193BF0; +extern void (*D_80181CF0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80193C6C[]; +extern u8 D_80193C74[]; +extern u8 D_80193C24[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181CF8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181D14[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181D1C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80181D84[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181D28; +extern u8 D_80181D34; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181DB8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80181DC0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181E14[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181E48[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181E38[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181E64; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181EDC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181EE4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181EEC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181EF4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181EFC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181F04[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80181F10[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181F1C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181F28[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181F38[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181F48[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80181F50[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181F58[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80181F60[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181F68[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80181F70[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181F78[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80181F80[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80181F88[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80181F90[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80181F98[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80181FA0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80181FA8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80181FB0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181FB8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80181FC0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181FC8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80181FD0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181FD8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80181FE0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181FE8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80181FF0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181FF8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018203C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80182000; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018206C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801820A8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80182100[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80182110[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80182118[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80182280[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018228C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80193220; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_80194988; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801943A8; +extern short D_801949FC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801949FC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801949FC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801943A8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801949FC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_80194958 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_80194958 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801949FC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801949FC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_80194804[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801943AC; + extern s32 D_801947C0; + extern s16 D_801947C4; + extern s16 D_801947C8; + extern s16 D_801947CC; + extern s16 D_801947D0; + extern s32 D_801947D8; + extern s32 D_801947DC; + extern s32 D_801947EC; + extern s16 D_801947F0; + extern s16 D_801947F4; + extern s32 D_801947F8; + extern s32 D_80194800; + extern s32 D_80194804[10]; + extern s32 D_801948A0; + extern s16 D_80194958; + extern s32 D_80194984; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_80194958; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801947C0); + D_801947C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801947CC, D_801947D0 ? 0x48 : 0x40); + (*(s16*)&D_801949FC) = 2; + break; + case 0: + func_80179B28(D_801947C0); + D_801947C0 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801947C4, D_801947C8 ? 0x48 : 0x40); + (*(s16*)&D_801949FC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801948A0 != 0) { + func_80179B28(D_801947C0); + D_801947C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801947C4, D_801947C8 ? 0x48 : 0x40); + (*(s16*)&D_801949FC) = 1; + } else { + (*(s16*)&D_801949FC) = 3; + } + break; + case 0x32: + func_80179B28(D_801947C0); + D_801947C0 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801947C4, + D_801947C8 ? 0x48 : 0x40); + (*(s16*)&D_801949FC) = 1; + break; + case 2: + func_80179B28(D_801947C0); + if (D_801947D8 != 0) { + D_801943A8 = D_801947D8; + D_801947D8 = 0; + (*(s16*)&D_801949FC) = 3; + return; + } + (*(s16*)&D_801949FC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801949FC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801949FC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801949FC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801949FC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801949FC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801949FC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801949FC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801949FC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801949FC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801949FC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801949FC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x1B: + D_801947F8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801949FC) = 4; + D_801943AC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801949FC) = 5; + D_801947EC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801947EC = (s32)func_8017A3B0; + (*(s16*)&D_801949FC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x24: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801949FC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801949FC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801949FC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801949FC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801949FC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801949FC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801949FC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801949FC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801949FC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801947DC); + (*(s16*)&D_801949FC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801947DC); + (*(s16*)&D_801949FC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801947DC); + (*(s16*)&D_801949FC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801947DC); + (*(s16*)&D_801949FC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + break; + case 0x4E: + D_80194800 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x2B: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801949FC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_80194984 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801949FC) = 3; + break; + case 0x34: + (*(s16*)&D_801949FC) = 3; + D_801943A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801947D8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801949FC) = 3; + D_801943A8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801949FC) = 3; + D_801943A8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801943A8 = *(s32 *)(D_801943A8 + 4); + return; + case 0x37: + (*(s16*)&D_801949FC) = 3; + D_801947C4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801947C8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801949FC) = 3; + D_801947CC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801947D0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801949FC) = 3; + D_801947C4 = w1; + D_801947C8 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801949FC) = 3; + D_801947CC = w2; + D_801947D0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + case 0x43: + D_801947EC = (s32)func_8017A3D8; + D_801947F4 = 0; + (*(s16*)&D_801949FC) = 5; + D_801947F0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801949FC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801949FC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801949FC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_80194804; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801949FC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_80194804; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801949FC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_80194804[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801949FC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_80194804; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801949FC) = 3; + break; + default: + break; + } +Lend: + D_801943A8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801947D4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801947D4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801947D4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801947D4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801947FC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801947FC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801947B8; + +s32 func_8017A3B0(void) { + switch (D_801947B8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801947F4; +extern short D_801947F0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801947F4) { + case 0: + func_800D0CA0(1); + D_801947F4 = D_801947F4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801947F0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801947F4 = D_801947F4 + 1; + if (D_801947F4 < 0x1E) { + return 0; + } + D_801947F4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_80194834; + extern s16 D_80194836; + extern s16 D_80194838; + extern s16 D_8019482C; + extern s16 D_8019482E; + extern s16 D_80194830; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_80194834, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_80194836, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_80194838, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019482C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019482E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_80194830, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801947BC; +extern u16 D_8019483C; +extern u16 D_8019483E; +extern u16 D_80194840; +extern s16 D_80194988; + +void func_8017B1D8(void) { + func_8012A418(); + D_80194988 = 0; + D_801947BC = 0; + D_8019483C = D_80126B5E; + D_8019483E = D_80126B62; + D_80194840 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801823C8[]; + extern s16 D_80194834; + extern s16 D_8019482C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801823C8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801823C8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194834; + s16 *p78C = &D_8019482C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_80194988 = 1; + D_801947BC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801947DC; + extern SV4_8017B368 D_801947E4; + extern s16 D_80194834; + extern s16 D_8019482C; + extern u16 D_801823C8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801947DC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801947E4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801823C8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801823C8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_80194834) = loc0; + (*(SV4_8017B368 *)&D_8019482C) = loc1; + D_80194988 = 1; + D_801947BC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801823C8[]; + extern s16 D_80194834; + extern s16 D_80194836; + extern s16 D_80194838; + extern s16 D_8019482C; + extern s16 D_8019482E; + extern s16 D_80194830; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801823C8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801823C8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_80194834; + s16 *p78C = &D_8019482C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_80194836; + v798 = D_80194838; + v78C = *p78C; + v78E = D_8019482E; + v790 = D_80194830; + __asm__ __volatile__(""); + D_80194988 = 1; + D_801947BC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801947BC; +extern s16 D_80194834; +extern s16 D_80194836; +extern s16 D_80194838; +extern s16 D_8019482C; +extern s16 D_8019482E; +extern s16 D_80194830; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801947BC = 0; + D_80194834 = (s16) D_80114F30; + D_80194836 = (s16) D_80114F34; + D_80194838 = (s16) D_80114F38; + D_8019482C = (s16) D_80114F24; + D_8019482E = (s16) D_80114F28; + D_80194830 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019484C; +extern s16 D_8019484E; +extern s16 D_80194850; +extern s16 D_80194854; +extern s16 D_80194856; +extern s16 D_80194858; + +void func_8017B824(void) { + D_8019484C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019484E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_80194850 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_80194854 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_80194856 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_80194858 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019484C; +extern s16 D_8019484E; +extern s16 D_80194850; +extern s16 D_80194854; +extern s16 D_80194856; +extern s16 D_80194858; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019484C; + D_80114F34 = D_8019484E; + D_80114F38 = D_80194850; + D_80114F24 = D_80194854; + D_80114F28 = D_80194856; + D_80114F2C = D_80194858; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_80194834), src[8..15] -> (*(S8_8017B8E8 *)&D_8019482C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_80194834) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019482C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019483C; +extern u16 D_8019483E; +extern u16 D_80194840; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801947BC; +extern short D_80194844; +extern short D_80194846; +extern short D_80194848; +extern s16 D_80194834; +extern s16 D_80194836; +extern s16 D_80194838; +extern s16 D_8019482C; +extern s16 D_8019482E; +extern s16 D_80194830; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019483C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019483E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_80194840); + (*(s16 *)&D_80194844) = buf[0]; + (*(s16 *)&D_80194846) = buf[1]; + (*(s16 *)&D_80194848) = buf[2]; + D_80194834 = D_80114F30 + buf[0]; + D_801947BC = 0; + D_80194836 = D_80114F34 + buf[1]; + D_80194838 = D_80114F38 + buf[2]; + D_8019482C = D_80114F24 + buf[0]; + D_8019482E = D_80114F28 + buf[1]; + D_80194830 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801947DC; +extern SV4 D_801947E4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801947E4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801947DC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801947E4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801947E4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801947DC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801947E4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_80194804[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_80194804; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801947BC; +extern s16 D_80194988; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801947BC = D_801947BC + 1; + if (D_801947BC >= 0x1F) { + D_80194988 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801947BC; +extern s16 D_80194988; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801947BC = D_801947BC + 1; + if (0x18 < D_801947BC) { + func_8012A4BC(); + D_80194988 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801947BC; +extern void (*D_80194800)(void); +extern short D_80194844; +extern short D_80194846; +extern short D_80194848; +extern s16 D_80194988; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801947BC = D_801947BC + 1; + if (D_801947BC >= 0x19) { + if (D_80194800 != 0) { + (*D_80194800)(); + } else { + D_80114F30 = D_80114F30 + D_80194844; + D_80114F34 = D_80114F34 + D_80194846; + D_80114F38 = D_80114F38 + D_80194848; + D_80114F24 = D_80114F24 + D_80194844; + D_80114F28 = D_80114F28 + D_80194846; + D_80114F2C = D_80114F2C + D_80194848; + func_8012A4BC(); + } + D_80194988 = 0; + } +} + + + +extern void (*D_80182468[])(void); + +void func_8017BE60(void *a0) { + D_80182468[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017BEBC); + + +extern void (*D_8018248C[])(void); + +void func_8017CD9C(void *a0) { + D_8018248C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017CDD8); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017CF9C); + + +extern void (*D_80182494[])(void); + +void func_8017D030(void *a0) { + D_80182494[*(u16 *)((s32)a0 + 0x2)](); +} + + + +// @class: plumbing +// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local + +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_80146C3C(void); +extern u8 D_80182480; + +void func_8017D06C(s32 a0) { + s32 r; + s32 buf[12]; + + (void)&buf; + r = func_800D222C(a0, &D_80182480, 0x18); + if (r != 0) { + *(s32 *)(a0 + 0x20) = r; + *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; + func_8001CF30((void *)r); + *(s16 *)(r + 0x10) = 0x400; + *(s16 *)(r + 0x18) = 0x3000; + *(s16 *)(r + 0x1A) = 0x3000; + *(s16 *)(r + 0x28) = 0x248; + *(s16 *)(r + 0x2A) = 0x180; + *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; + } else { + ((void (*)(s32))func_80146C3C)(a0); + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D110); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D174); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D1BC); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D200(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80182544[])(void); + +void func_8017D224(void *a0) { + D_80182544[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D260); + + +extern void (*D_8018254C[])(void); + +void func_8017D2A4(void *a0) { + D_8018254C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D2E0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D320(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D39C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80182558[])(void); + +void func_8017D3BC(void *a0) { + D_80182558[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D3F8); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D46C); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D494); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D4BC); + + +extern void (*D_80182570[])(void); + +void func_8017D554(void *a0) { + D_80182570[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D590); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D630); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D7C8); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D7F8); + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern u32 D_80194860; +extern u16 D_80182578[]; +extern u16 D_80194864[]; +extern s32 D_80182598; + +extern void func_800183E0(s32 a0); + +void func_8017D818(void) +{ + u32 i; + u16 *p; + u32 base; + u16 *tbl; + + i = 0; + tbl = D_80182578; + base = D_80194860 >> 8; + p = D_80194864; + do { + *p = tbl[(base + i) & 0xF] | 0x8000; + i = i + 1; + p = p + 1; + } while (i < 0x10); + func_800183E0((s32)&D_80182598); + D_80194860 = D_80194860 + 0x100; +} + + +extern s32 func_8017D8A4(void); + +s32 func_8017D8A4(void) { + return 0x6E; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017D8AC); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017DCD0); + + +extern void (*D_8018F8A4[])(void); + +void func_8017E044(void *a0) { + D_8018F8A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E080); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E1C8); + + +extern void (*D_8018F920[])(void); + +void func_8017E378(void *a0) { + D_8018F920[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018F95C[])(void); + +void func_8017E3B4(void *a0) { + D_8018F95C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E3F0); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E498); + + +extern void func_8017D8AC(void); + void func_8017E51C(s32 arg0) { + s32 temp_v0; + func_8017D8AC(); + temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; + *(s32 *)(arg0 + 0x1c) = temp_v0; + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_80191E34; + +void func_8017E554(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80191E34, 0x1000000); +} + + +extern void (*D_80191E4C[])(void); + +void func_8017E57C(u8 *a0) { + D_80191E4C[a0[0x216]](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E5B8); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E600); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E640); + + +extern void (*D_80191E60[])(void); + +void func_8017E668(void *a0) { + D_80191E60[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E6A4); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E7AC); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E7EC); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E8CC); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_80178D40", func_8017E9A8); + + diff --git a/src/ov_SC06_016/ov_SC06_016_jr_801734BC.c b/src/ov_SC06_016/ov_SC06_016_jr_801734BC.c index 288ba3fab..c8401c8dc 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_801734BC.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_801734BC.c @@ -3084,1333 +3084,3 @@ void func_80178D18(void) { D_801A026C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019F5A4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019F5A4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019F5A4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019F5A4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019F5CC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019F5CC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019F588; - -s32 func_8017A3B0(void) { - switch (D_8019F588) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019F5C4; -extern short D_8019F5C0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019F5C4) { - case 0: - func_800D0CA0(1); - D_8019F5C4 = D_8019F5C4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019F5C0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019F5C4 = D_8019F5C4 + 1; - if (D_8019F5C4 < 0x1E) { - return 0; - } - D_8019F5C4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019F604; - extern s16 D_8019F606; - extern s16 D_8019F608; - extern s16 D_8019F5FC; - extern s16 D_8019F5FE; - extern s16 D_8019F600; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019F604, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019F606, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019F608, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019F5FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019F5FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019F600, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019F58C; -extern u16 D_8019F60C; -extern u16 D_8019F60E; -extern u16 D_8019F610; -extern s16 D_801A01F8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A01F8 = 0; - D_8019F58C = 0; - D_8019F60C = D_80126B5E; - D_8019F60E = D_80126B62; - D_8019F610 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801887D8[]; - extern s16 D_8019F604; - extern s16 D_8019F5FC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801887D8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801887D8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019F604; - s16 *p78C = &D_8019F5FC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A01F8 = 1; - D_8019F58C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019F5AC; - extern SV4_8017B368 D_8019F5B4; - extern s16 D_8019F604; - extern s16 D_8019F5FC; - extern u16 D_801887D8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019F5AC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019F5B4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801887D8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801887D8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019F604) = loc0; - (*(SV4_8017B368 *)&D_8019F5FC) = loc1; - D_801A01F8 = 1; - D_8019F58C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801887D8[]; - extern s16 D_8019F604; - extern s16 D_8019F606; - extern s16 D_8019F608; - extern s16 D_8019F5FC; - extern s16 D_8019F5FE; - extern s16 D_8019F600; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801887D8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801887D8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019F604; - s16 *p78C = &D_8019F5FC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019F606; - v798 = D_8019F608; - v78C = *p78C; - v78E = D_8019F5FE; - v790 = D_8019F600; - __asm__ __volatile__(""); - D_801A01F8 = 1; - D_8019F58C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019F58C; -extern s16 D_8019F604; -extern s16 D_8019F606; -extern s16 D_8019F608; -extern s16 D_8019F5FC; -extern s16 D_8019F5FE; -extern s16 D_8019F600; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019F58C = 0; - D_8019F604 = (s16) D_80114F30; - D_8019F606 = (s16) D_80114F34; - D_8019F608 = (s16) D_80114F38; - D_8019F5FC = (s16) D_80114F24; - D_8019F5FE = (s16) D_80114F28; - D_8019F600 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019F61C; -extern s16 D_8019F61E; -extern s16 D_8019F620; -extern s16 D_8019F624; -extern s16 D_8019F626; -extern s16 D_8019F628; - -void func_8017B824(void) { - D_8019F61C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019F61E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019F620 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019F624 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019F626 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019F628 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019F61C; -extern s16 D_8019F61E; -extern s16 D_8019F620; -extern s16 D_8019F624; -extern s16 D_8019F626; -extern s16 D_8019F628; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019F61C; - D_80114F34 = D_8019F61E; - D_80114F38 = D_8019F620; - D_80114F24 = D_8019F624; - D_80114F28 = D_8019F626; - D_80114F2C = D_8019F628; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019F604), src[8..15] -> (*(S8_8017B8E8 *)&D_8019F5FC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019F604) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019F5FC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019F60C; -extern u16 D_8019F60E; -extern u16 D_8019F610; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019F58C; -extern short D_8019F614; -extern short D_8019F616; -extern short D_8019F618; -extern s16 D_8019F604; -extern s16 D_8019F606; -extern s16 D_8019F608; -extern s16 D_8019F5FC; -extern s16 D_8019F5FE; -extern s16 D_8019F600; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019F60C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019F60E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019F610); - (*(s16 *)&D_8019F614) = buf[0]; - (*(s16 *)&D_8019F616) = buf[1]; - (*(s16 *)&D_8019F618) = buf[2]; - D_8019F604 = D_80114F30 + buf[0]; - D_8019F58C = 0; - D_8019F606 = D_80114F34 + buf[1]; - D_8019F608 = D_80114F38 + buf[2]; - D_8019F5FC = D_80114F24 + buf[0]; - D_8019F5FE = D_80114F28 + buf[1]; - D_8019F600 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019F5AC; -extern SV4 D_8019F5B4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019F5B4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019F5AC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019F5B4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019F5B4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019F5AC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019F5B4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019F5D4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019F5D4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019F58C; -extern s16 D_801A01F8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019F58C = D_8019F58C + 1; - if (D_8019F58C >= 0x1F) { - D_801A01F8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019F58C; -extern s16 D_801A01F8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019F58C = D_8019F58C + 1; - if (0x18 < D_8019F58C) { - func_8012A4BC(); - D_801A01F8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019F58C; -extern void (*D_8019F5D0)(void); -extern short D_8019F614; -extern short D_8019F616; -extern short D_8019F618; -extern s16 D_801A01F8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019F58C = D_8019F58C + 1; - if (D_8019F58C >= 0x19) { - if (D_8019F5D0 != 0) { - (*D_8019F5D0)(); - } else { - D_80114F30 = D_80114F30 + D_8019F614; - D_80114F34 = D_80114F34 + D_8019F616; - D_80114F38 = D_80114F38 + D_8019F618; - D_80114F24 = D_80114F24 + D_8019F614; - D_80114F28 = D_80114F28 + D_8019F616; - D_80114F2C = D_80114F2C + D_8019F618; - func_8012A4BC(); - } - D_801A01F8 = 0; - } -} - - - -extern void (*D_80188878[])(void); - -void func_8017BE60(void *a0) { - D_80188878[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017C068); - - -extern void (*D_801888D8[])(void); - -void func_8017C114(void *a0) { - D_801888D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017C8D0); - -extern void func_8002931C(void); - void func_8017D7B0(void) { - ((void (*)(s32))func_8002931C)(0x1A40000); - } - - - -extern void (*D_80188930[])(void); - -void func_8017D7D0(void *a0) { - D_80188930[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017D80C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D850(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188938[])(void); - -void func_8017D874(void *a0) { - D_80188938[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017D8B0); - - -extern void (*D_80188940[])(void); - -void func_8017D8F4(void *a0) { - D_80188940[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017D930); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D970(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D9EC(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018894C[])(void); - -void func_8017DA0C(void *a0) { - D_8018894C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DA48); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DAC4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DB0C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DB34); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DB5C); - - -extern void (*D_80188970[])(void); - -void func_8017DBF8(void *a0) { - D_80188970[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DC34); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DD14); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DEAC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DEC4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DF24); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017DFFC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E074); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E0D4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E114); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E190); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E1D8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E26C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E4AC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E4FC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E54C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E710); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E7D0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E8A8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E910); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E96C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017E9CC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EAE4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EB3C); - -extern void func_8017EEFC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern s32 D_80193CE4; - -void func_8017EB8C(void *arg0) { - func_8017EEFC((s32)arg0, 0xF, 0, &D_80193CE4); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EBB8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EC50); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017ECE0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EDA0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EE78); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EEB4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EEFC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017EFBC); - -void func_8017F124(void *a0) { - *(u16 *)((char *)a0 + 0xAE) = 0x6000; - *(u16 *)((char *)a0 + 0x5C) |= 0x8800; - } - - -void func_8017F13C(void *a0) { - *(s16 *)((char *)a0 + 0xAE) = -1; - *(u16 *)((char *)a0 + 0x5C) |= 0x8800; - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F154); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F3B8); - - -extern void (*D_80188E60[])(void); - -void func_8017F578(void *a0) { - D_80188E60[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F5B4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F5FC); - -void func_8017F68C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F694); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017F784); - - -extern void (*D_801890AC[])(void); - -void func_8017FE54(void *a0) { - D_801890AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8017FE90); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801800E0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801803BC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801803FC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018048C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801806FC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801807C4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80180894); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80180BF0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80180D24); - - -extern void (*D_801890B4[])(void); - -void func_80180DE8(void *a0) { - D_801890B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80180E24); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80180F68); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181018); - - -extern void (*D_801890E4[])(void); - -void func_80181068(void *a0) { - D_801890E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801810A4); - - -extern void (*D_80189104[])(void); - -void func_80181254(void *a0) { - D_80189104[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181290); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801813B0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181478); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801816DC); - - -extern void (*D_80189110[])(void); - -void func_80181804(void *a0) { - D_80189110[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181840); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018191C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181998); - - -extern void (*D_801891D4[])(void); - -void func_80181B14(void *a0) { - D_801891D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s16 D_8019F71C; - s32 func_80181B50(void) { - return D_8019F71C; - } - - -void func_80181B60(void) { -} - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181B68); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181C78); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181CD0); - -extern s32 func_8012BEE8(s32 arg); - extern void func_8017E1D8(s32 *a0); - void func_80181D44(s32 a0) { - if (func_8012BEE8(a0)) { - ((void (*)(s32))func_8017E1D8)(a0); - } - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181D7C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181DBC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181DFC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181E3C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181EE8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80181FB0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182008); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018205C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801820E0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801821B8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801821D4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182224); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_801822A0(void) { - func_8002D4C8(0xC0B, 0); - } - - -extern void func_8014708C(void *a0); -extern s32 func_801472C8(struct S *a0); - -void func_801822C4(void) { - extern s32 D_80126B58; - register s32 p __asm__("$16"); - register s32 r __asm__("$17"); - - p = &D_80126B58; - func_8014708C(p); - r = ((s32 (*)(s32))func_801472C8)(p); -} - - -extern void func_80147084(s32 *a0); -extern void func_801472B4(void *a0); - -void func_801822FC(void) { - extern s32 D_80126B58; - register s32 p __asm__("$16"); - p = &D_80126B58; - ((void (*)(void *))func_80147084)((void *)p); - func_801472B4((void *)p); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182334); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182424); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801824F4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801825DC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182638); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801826B4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182744); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182810); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801828A0); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182990); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182A1C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182A64); - -extern void func_8012B2CC(s32 a0); - void func_80182B2C(void) { - ((void (*)(void))func_8012B2CC)(); - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182B4C); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8019A464; - -void func_80182BCC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019A464, 0x1000000); -} - - - -extern void (*D_8019A47C[])(void); - -void func_80182BF4(void *a0) { - D_8019A47C[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182C30); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182C78); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8019A484; - -void func_80182CB8(void) { - ((void (*)(s32 *, s32))func_8016EE40)(&D_8019A484, 0x1000000); -} - - - -extern void (*D_8019A490[])(void); - -void func_80182CE0(void *a0) { - D_8019A490[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182D1C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182E24); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182E64); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80182F44); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183020); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801830B4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801834D8); - - -extern void (*D_8019A524[])(void); - -void func_8018384C(void *a0) { - D_8019A524[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183888); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801839D0); - - -extern void (*D_8019A5A0[])(void); - -void func_80183B80(void *a0) { - D_8019A5A0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8019A5DC[])(void); - -void func_80183BBC(void *a0) { - D_8019A5DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183BF8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183CA0); - -extern void func_801830B4(void); - void func_80183D24(s32 arg0) { - s32 temp_v0; - func_801830B4(); - temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; - *(s32 *)(arg0 + 0x1c) = temp_v0; - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183D5C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183D80); - - -extern s16 D_801A0014; - extern s16 D_801A0016; - extern s16 D_801A0018; - extern s16 D_801A001A; - void func_80183E20(s32 arg0, s32 arg1, s32 arg2) { - D_801A0014 = *(u16 *)((s32)arg0 + 0x0); - D_801A0016 = *(u16 *)((s32)arg0 + 0x2); - D_801A0018 = arg1; - D_801A001A = arg2; - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183E50); - -extern s16 D_801A001A; - void func_80183EC8(s32 arg0) { - *(s16 *)((s32)&D_801A001A + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183EE4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80183F3C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184010); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018404C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184098); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184174); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184438); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018445C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184484); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_8018450C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184578); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801845E8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184660); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801846AC); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_801847C8); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184804); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184918); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801734BC", func_80184BFC); - diff --git a/src/ov_SC06_016/ov_SC06_016_jr_80178D40.c b/src/ov_SC06_016/ov_SC06_016_jr_80178D40.c new file mode 100644 index 000000000..fb83f01e1 --- /dev/null +++ b/src/ov_SC06_016/ov_SC06_016_jr_80178D40.c @@ -0,0 +1,4779 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188080[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019E8F8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80188074[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801880B8[]; +extern unsigned short D_801880C0[]; +extern unsigned short D_801880C8[]; +extern unsigned char D_8019E900[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019E8F8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801880D0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019EA34; +extern M2C_UNK D_8019EA38; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019E9C0; +extern void (*D_80188100[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019EA3C[]; +extern u8 D_8019EA44[]; +extern u8 D_8019E9F4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80188108[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80188124[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018812C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188194[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80188138; +extern u8 D_80188144; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801881C8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801881D0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188224[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188258[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188248[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188274; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801882EC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801882F4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801882FC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188304[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018830C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188314[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80188320[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018832C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188338[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188348[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188358[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188360[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188368[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188370[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188378[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188380[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188388[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188390[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188398[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801883A0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801883A8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801883B0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801883B8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801883C0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801883C8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801883D0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801883D8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801883E0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801883E8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801883F0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801883F8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80188400[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188408[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018844C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80188410; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018847C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801884B8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80188510[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80188520[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188528[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188690[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018869C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019DE68; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A01F8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019F178; +extern short D_801A026C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A026C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A026C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019F178 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A026C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A01C8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A01C8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A026C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A026C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019F5D4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019F17C; + extern s32 D_8019F590; + extern s16 D_8019F594; + extern s16 D_8019F598; + extern s16 D_8019F59C; + extern s16 D_8019F5A0; + extern s32 D_8019F5A8; + extern s32 D_8019F5AC; + extern s32 D_8019F5BC; + extern s16 D_8019F5C0; + extern s16 D_8019F5C4; + extern s32 D_8019F5C8; + extern s32 D_8019F5D0; + extern s32 D_8019F5D4[10]; + extern s32 D_801A0110; + extern s16 D_801A01C8; + extern s32 D_801A01F4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A01C8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019F590); + D_8019F590 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019F59C, D_8019F5A0 ? 0x48 : 0x40); + (*(s16*)&D_801A026C) = 2; + break; + case 0: + func_80179B28(D_8019F590); + D_8019F590 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019F594, D_8019F598 ? 0x48 : 0x40); + (*(s16*)&D_801A026C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A0110 != 0) { + func_80179B28(D_8019F590); + D_8019F590 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019F594, D_8019F598 ? 0x48 : 0x40); + (*(s16*)&D_801A026C) = 1; + } else { + (*(s16*)&D_801A026C) = 3; + } + break; + case 0x32: + func_80179B28(D_8019F590); + D_8019F590 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019F594, + D_8019F598 ? 0x48 : 0x40); + (*(s16*)&D_801A026C) = 1; + break; + case 2: + func_80179B28(D_8019F590); + if (D_8019F5A8 != 0) { + D_8019F178 = D_8019F5A8; + D_8019F5A8 = 0; + (*(s16*)&D_801A026C) = 3; + return; + } + (*(s16*)&D_801A026C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A026C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A026C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A026C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A026C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A026C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A026C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A026C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A026C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A026C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A026C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A026C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x1B: + D_8019F5C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A026C) = 4; + D_8019F17C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A026C) = 5; + D_8019F5BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019F5BC = (s32)func_8017A3B0; + (*(s16*)&D_801A026C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x24: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A026C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A026C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A026C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A026C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A026C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A026C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A026C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A026C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A026C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019F5AC); + (*(s16*)&D_801A026C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019F5AC); + (*(s16*)&D_801A026C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019F5AC); + (*(s16*)&D_801A026C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019F5AC); + (*(s16*)&D_801A026C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + break; + case 0x4E: + D_8019F5D0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x2B: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A026C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A01F4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A026C) = 3; + break; + case 0x34: + (*(s16*)&D_801A026C) = 3; + D_8019F178 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019F5A8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A026C) = 3; + D_8019F178 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A026C) = 3; + D_8019F178 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019F178 = *(s32 *)(D_8019F178 + 4); + return; + case 0x37: + (*(s16*)&D_801A026C) = 3; + D_8019F594 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019F598 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A026C) = 3; + D_8019F59C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019F5A0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A026C) = 3; + D_8019F594 = w1; + D_8019F598 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A026C) = 3; + D_8019F59C = w2; + D_8019F5A0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + case 0x43: + D_8019F5BC = (s32)func_8017A3D8; + D_8019F5C4 = 0; + (*(s16*)&D_801A026C) = 5; + D_8019F5C0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A026C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A026C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A026C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019F5D4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A026C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019F5D4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A026C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019F5D4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A026C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019F5D4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A026C) = 3; + break; + default: + break; + } +Lend: + D_8019F178 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019F5A4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019F5A4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019F5A4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019F5A4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019F5CC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019F5CC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019F588; + +s32 func_8017A3B0(void) { + switch (D_8019F588) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019F5C4; +extern short D_8019F5C0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019F5C4) { + case 0: + func_800D0CA0(1); + D_8019F5C4 = D_8019F5C4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019F5C0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019F5C4 = D_8019F5C4 + 1; + if (D_8019F5C4 < 0x1E) { + return 0; + } + D_8019F5C4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019F604; + extern s16 D_8019F606; + extern s16 D_8019F608; + extern s16 D_8019F5FC; + extern s16 D_8019F5FE; + extern s16 D_8019F600; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019F604, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019F606, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019F608, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019F5FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019F5FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019F600, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019F58C; +extern u16 D_8019F60C; +extern u16 D_8019F60E; +extern u16 D_8019F610; +extern s16 D_801A01F8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A01F8 = 0; + D_8019F58C = 0; + D_8019F60C = D_80126B5E; + D_8019F60E = D_80126B62; + D_8019F610 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801887D8[]; + extern s16 D_8019F604; + extern s16 D_8019F5FC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801887D8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801887D8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019F604; + s16 *p78C = &D_8019F5FC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A01F8 = 1; + D_8019F58C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019F5AC; + extern SV4_8017B368 D_8019F5B4; + extern s16 D_8019F604; + extern s16 D_8019F5FC; + extern u16 D_801887D8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019F5AC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019F5B4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801887D8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801887D8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019F604) = loc0; + (*(SV4_8017B368 *)&D_8019F5FC) = loc1; + D_801A01F8 = 1; + D_8019F58C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801887D8[]; + extern s16 D_8019F604; + extern s16 D_8019F606; + extern s16 D_8019F608; + extern s16 D_8019F5FC; + extern s16 D_8019F5FE; + extern s16 D_8019F600; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801887D8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801887D8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019F604; + s16 *p78C = &D_8019F5FC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019F606; + v798 = D_8019F608; + v78C = *p78C; + v78E = D_8019F5FE; + v790 = D_8019F600; + __asm__ __volatile__(""); + D_801A01F8 = 1; + D_8019F58C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019F58C; +extern s16 D_8019F604; +extern s16 D_8019F606; +extern s16 D_8019F608; +extern s16 D_8019F5FC; +extern s16 D_8019F5FE; +extern s16 D_8019F600; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019F58C = 0; + D_8019F604 = (s16) D_80114F30; + D_8019F606 = (s16) D_80114F34; + D_8019F608 = (s16) D_80114F38; + D_8019F5FC = (s16) D_80114F24; + D_8019F5FE = (s16) D_80114F28; + D_8019F600 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019F61C; +extern s16 D_8019F61E; +extern s16 D_8019F620; +extern s16 D_8019F624; +extern s16 D_8019F626; +extern s16 D_8019F628; + +void func_8017B824(void) { + D_8019F61C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019F61E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019F620 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019F624 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019F626 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019F628 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019F61C; +extern s16 D_8019F61E; +extern s16 D_8019F620; +extern s16 D_8019F624; +extern s16 D_8019F626; +extern s16 D_8019F628; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019F61C; + D_80114F34 = D_8019F61E; + D_80114F38 = D_8019F620; + D_80114F24 = D_8019F624; + D_80114F28 = D_8019F626; + D_80114F2C = D_8019F628; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019F604), src[8..15] -> (*(S8_8017B8E8 *)&D_8019F5FC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019F604) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019F5FC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019F60C; +extern u16 D_8019F60E; +extern u16 D_8019F610; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019F58C; +extern short D_8019F614; +extern short D_8019F616; +extern short D_8019F618; +extern s16 D_8019F604; +extern s16 D_8019F606; +extern s16 D_8019F608; +extern s16 D_8019F5FC; +extern s16 D_8019F5FE; +extern s16 D_8019F600; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019F60C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019F60E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019F610); + (*(s16 *)&D_8019F614) = buf[0]; + (*(s16 *)&D_8019F616) = buf[1]; + (*(s16 *)&D_8019F618) = buf[2]; + D_8019F604 = D_80114F30 + buf[0]; + D_8019F58C = 0; + D_8019F606 = D_80114F34 + buf[1]; + D_8019F608 = D_80114F38 + buf[2]; + D_8019F5FC = D_80114F24 + buf[0]; + D_8019F5FE = D_80114F28 + buf[1]; + D_8019F600 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019F5AC; +extern SV4 D_8019F5B4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019F5B4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019F5AC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019F5B4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019F5B4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019F5AC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019F5B4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019F5D4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019F5D4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019F58C; +extern s16 D_801A01F8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019F58C = D_8019F58C + 1; + if (D_8019F58C >= 0x1F) { + D_801A01F8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019F58C; +extern s16 D_801A01F8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019F58C = D_8019F58C + 1; + if (0x18 < D_8019F58C) { + func_8012A4BC(); + D_801A01F8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019F58C; +extern void (*D_8019F5D0)(void); +extern short D_8019F614; +extern short D_8019F616; +extern short D_8019F618; +extern s16 D_801A01F8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019F58C = D_8019F58C + 1; + if (D_8019F58C >= 0x19) { + if (D_8019F5D0 != 0) { + (*D_8019F5D0)(); + } else { + D_80114F30 = D_80114F30 + D_8019F614; + D_80114F34 = D_80114F34 + D_8019F616; + D_80114F38 = D_80114F38 + D_8019F618; + D_80114F24 = D_80114F24 + D_8019F614; + D_80114F28 = D_80114F28 + D_8019F616; + D_80114F2C = D_80114F2C + D_8019F618; + func_8012A4BC(); + } + D_801A01F8 = 0; + } +} + + + +extern void (*D_80188878[])(void); + +void func_8017BE60(void *a0) { + D_80188878[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017C068); + + +extern void (*D_801888D8[])(void); + +void func_8017C114(void *a0) { + D_801888D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017C8D0); + +extern void func_8002931C(void); + void func_8017D7B0(void) { + ((void (*)(s32))func_8002931C)(0x1A40000); + } + + + +extern void (*D_80188930[])(void); + +void func_8017D7D0(void *a0) { + D_80188930[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017D80C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D850(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188938[])(void); + +void func_8017D874(void *a0) { + D_80188938[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017D8B0); + + +extern void (*D_80188940[])(void); + +void func_8017D8F4(void *a0) { + D_80188940[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017D930); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D970(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D9EC(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018894C[])(void); + +void func_8017DA0C(void *a0) { + D_8018894C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DA48); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DAC4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DB0C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DB34); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DB5C); + + +extern void (*D_80188970[])(void); + +void func_8017DBF8(void *a0) { + D_80188970[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DC34); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DD14); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DEAC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DEC4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DF24); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017DFFC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E074); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E0D4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E114); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E190); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E1D8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E26C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E4AC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E4FC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E54C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E710); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E7D0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E8A8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E910); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E96C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017E9CC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EAE4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EB3C); + +extern void func_8017EEFC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 D_80193CE4; + +void func_8017EB8C(void *arg0) { + func_8017EEFC((s32)arg0, 0xF, 0, &D_80193CE4); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EBB8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EC50); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017ECE0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EDA0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EE78); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EEB4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EEFC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017EFBC); + +void func_8017F124(void *a0) { + *(u16 *)((char *)a0 + 0xAE) = 0x6000; + *(u16 *)((char *)a0 + 0x5C) |= 0x8800; + } + + +void func_8017F13C(void *a0) { + *(s16 *)((char *)a0 + 0xAE) = -1; + *(u16 *)((char *)a0 + 0x5C) |= 0x8800; + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F154); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F3B8); + + +extern void (*D_80188E60[])(void); + +void func_8017F578(void *a0) { + D_80188E60[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F5B4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F5FC); + +void func_8017F68C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F694); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017F784); + + +extern void (*D_801890AC[])(void); + +void func_8017FE54(void *a0) { + D_801890AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8017FE90); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801800E0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801803BC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801803FC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018048C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801806FC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801807C4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80180894); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80180BF0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80180D24); + + +extern void (*D_801890B4[])(void); + +void func_80180DE8(void *a0) { + D_801890B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80180E24); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80180F68); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181018); + + +extern void (*D_801890E4[])(void); + +void func_80181068(void *a0) { + D_801890E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801810A4); + + +extern void (*D_80189104[])(void); + +void func_80181254(void *a0) { + D_80189104[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181290); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801813B0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181478); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801816DC); + + +extern void (*D_80189110[])(void); + +void func_80181804(void *a0) { + D_80189110[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181840); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018191C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181998); + + +extern void (*D_801891D4[])(void); + +void func_80181B14(void *a0) { + D_801891D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s16 D_8019F71C; + s32 func_80181B50(void) { + return D_8019F71C; + } + + +void func_80181B60(void) { +} + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181B68); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181C78); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181CD0); + +extern s32 func_8012BEE8(s32 arg); + extern void func_8017E1D8(s32 *a0); + void func_80181D44(s32 a0) { + if (func_8012BEE8(a0)) { + ((void (*)(s32))func_8017E1D8)(a0); + } + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181D7C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181DBC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181DFC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181E3C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181EE8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80181FB0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182008); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018205C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801820E0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801821B8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801821D4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182224); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_801822A0(void) { + func_8002D4C8(0xC0B, 0); + } + + +extern void func_8014708C(void *a0); +extern s32 func_801472C8(struct S *a0); + +void func_801822C4(void) { + extern s32 D_80126B58; + register s32 p __asm__("$16"); + register s32 r __asm__("$17"); + + p = &D_80126B58; + func_8014708C(p); + r = ((s32 (*)(s32))func_801472C8)(p); +} + + +extern void func_80147084(s32 *a0); +extern void func_801472B4(void *a0); + +void func_801822FC(void) { + extern s32 D_80126B58; + register s32 p __asm__("$16"); + p = &D_80126B58; + ((void (*)(void *))func_80147084)((void *)p); + func_801472B4((void *)p); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182334); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182424); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801824F4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801825DC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182638); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801826B4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182744); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182810); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801828A0); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182990); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182A1C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182A64); + +extern void func_8012B2CC(s32 a0); + void func_80182B2C(void) { + ((void (*)(void))func_8012B2CC)(); + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182B4C); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8019A464; + +void func_80182BCC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019A464, 0x1000000); +} + + + +extern void (*D_8019A47C[])(void); + +void func_80182BF4(void *a0) { + D_8019A47C[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182C30); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182C78); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8019A484; + +void func_80182CB8(void) { + ((void (*)(s32 *, s32))func_8016EE40)(&D_8019A484, 0x1000000); +} + + + +extern void (*D_8019A490[])(void); + +void func_80182CE0(void *a0) { + D_8019A490[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182D1C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182E24); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182E64); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80182F44); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183020); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801830B4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801834D8); + + +extern void (*D_8019A524[])(void); + +void func_8018384C(void *a0) { + D_8019A524[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183888); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801839D0); + + +extern void (*D_8019A5A0[])(void); + +void func_80183B80(void *a0) { + D_8019A5A0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8019A5DC[])(void); + +void func_80183BBC(void *a0) { + D_8019A5DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183BF8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183CA0); + +extern void func_801830B4(void); + void func_80183D24(s32 arg0) { + s32 temp_v0; + func_801830B4(); + temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; + *(s32 *)(arg0 + 0x1c) = temp_v0; + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183D5C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183D80); + + +extern s16 D_801A0014; + extern s16 D_801A0016; + extern s16 D_801A0018; + extern s16 D_801A001A; + void func_80183E20(s32 arg0, s32 arg1, s32 arg2) { + D_801A0014 = *(u16 *)((s32)arg0 + 0x0); + D_801A0016 = *(u16 *)((s32)arg0 + 0x2); + D_801A0018 = arg1; + D_801A001A = arg2; + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183E50); + +extern s16 D_801A001A; + void func_80183EC8(s32 arg0) { + *(s16 *)((s32)&D_801A001A + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183EE4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80183F3C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184010); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018404C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184098); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184174); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184438); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018445C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184484); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_8018450C); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184578); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801845E8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184660); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801846AC); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_801847C8); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184804); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184918); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_80178D40", func_80184BFC); + + diff --git a/src/ov_SC06_018/ov_SC06_018_jr_801734BC.c b/src/ov_SC06_018/ov_SC06_018_jr_801734BC.c index f6e6a3eee..d527fc575 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_801734BC.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_801734BC.c @@ -3084,1533 +3084,3 @@ void func_80178D18(void) { D_801D5B9C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D4E8C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D4E8C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D4E8C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D4E8C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D4EB4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D4EB4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D4E70; - -s32 func_8017A3B0(void) { - switch (D_801D4E70) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D4EAC; -extern short D_801D4EA8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D4EAC) { - case 0: - func_800D0CA0(1); - D_801D4EAC = D_801D4EAC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D4EA8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D4EAC = D_801D4EAC + 1; - if (D_801D4EAC < 0x1E) { - return 0; - } - D_801D4EAC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D4EEC; - extern s16 D_801D4EEE; - extern s16 D_801D4EF0; - extern s16 D_801D4EE4; - extern s16 D_801D4EE6; - extern s16 D_801D4EE8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D4EEC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D4EEE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4EF0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D4EE4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D4EE6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D4EE8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D4E74; -extern u16 D_801D4EF4; -extern u16 D_801D4EF6; -extern u16 D_801D4EF8; -extern s16 D_801D5B28; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D5B28 = 0; - D_801D4E74 = 0; - D_801D4EF4 = D_80126B5E; - D_801D4EF6 = D_80126B62; - D_801D4EF8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80196F14[]; - extern s16 D_801D4EEC; - extern s16 D_801D4EE4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80196F14[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80196F14[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D4EEC; - s16 *p78C = &D_801D4EE4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D5B28 = 1; - D_801D4E74 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D4E94; - extern SV4_8017B368 D_801D4E9C; - extern s16 D_801D4EEC; - extern s16 D_801D4EE4; - extern u16 D_80196F14; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D4E94; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D4E9C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80196F14)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80196F14)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D4EEC) = loc0; - (*(SV4_8017B368 *)&D_801D4EE4) = loc1; - D_801D5B28 = 1; - D_801D4E74 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80196F14[]; - extern s16 D_801D4EEC; - extern s16 D_801D4EEE; - extern s16 D_801D4EF0; - extern s16 D_801D4EE4; - extern s16 D_801D4EE6; - extern s16 D_801D4EE8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80196F14[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80196F14[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D4EEC; - s16 *p78C = &D_801D4EE4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D4EEE; - v798 = D_801D4EF0; - v78C = *p78C; - v78E = D_801D4EE6; - v790 = D_801D4EE8; - __asm__ __volatile__(""); - D_801D5B28 = 1; - D_801D4E74 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4E74; -extern s16 D_801D4EEC; -extern s16 D_801D4EEE; -extern s16 D_801D4EF0; -extern s16 D_801D4EE4; -extern s16 D_801D4EE6; -extern s16 D_801D4EE8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D4E74 = 0; - D_801D4EEC = (s16) D_80114F30; - D_801D4EEE = (s16) D_80114F34; - D_801D4EF0 = (s16) D_80114F38; - D_801D4EE4 = (s16) D_80114F24; - D_801D4EE6 = (s16) D_80114F28; - D_801D4EE8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D4F04; -extern s16 D_801D4F06; -extern s16 D_801D4F08; -extern s16 D_801D4F0C; -extern s16 D_801D4F0E; -extern s16 D_801D4F10; - -void func_8017B824(void) { - D_801D4F04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D4F06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D4F08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D4F0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D4F0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D4F10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D4F04; -extern s16 D_801D4F06; -extern s16 D_801D4F08; -extern s16 D_801D4F0C; -extern s16 D_801D4F0E; -extern s16 D_801D4F10; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D4F04; - D_80114F34 = D_801D4F06; - D_80114F38 = D_801D4F08; - D_80114F24 = D_801D4F0C; - D_80114F28 = D_801D4F0E; - D_80114F2C = D_801D4F10; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D4EEC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D4EE4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D4EEC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D4EE4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D4EF4; -extern u16 D_801D4EF6; -extern u16 D_801D4EF8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D4E74; -extern short D_801D4EFC; -extern short D_801D4EFE; -extern short D_801D4F00; -extern s16 D_801D4EEC; -extern s16 D_801D4EEE; -extern s16 D_801D4EF0; -extern s16 D_801D4EE4; -extern s16 D_801D4EE6; -extern s16 D_801D4EE8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4EF4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4EF6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4EF8); - (*(s16 *)&D_801D4EFC) = buf[0]; - (*(s16 *)&D_801D4EFE) = buf[1]; - (*(s16 *)&D_801D4F00) = buf[2]; - D_801D4EEC = D_80114F30 + buf[0]; - D_801D4E74 = 0; - D_801D4EEE = D_80114F34 + buf[1]; - D_801D4EF0 = D_80114F38 + buf[2]; - D_801D4EE4 = D_80114F24 + buf[0]; - D_801D4EE6 = D_80114F28 + buf[1]; - D_801D4EE8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D4E94; -extern SV4 D_801D4E9C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D4E9C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D4E94 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D4E9C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D4E9C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D4E94) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D4E9C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D4EBC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D4EBC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D4E74; -extern s16 D_801D5B28; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D4E74 = D_801D4E74 + 1; - if (D_801D4E74 >= 0x1F) { - D_801D5B28 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D4E74; -extern s16 D_801D5B28; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4E74 = D_801D4E74 + 1; - if (0x18 < D_801D4E74) { - func_8012A4BC(); - D_801D5B28 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D4E74; -extern void (*D_801D4EB8)(void); -extern short D_801D4EFC; -extern short D_801D4EFE; -extern short D_801D4F00; -extern s16 D_801D5B28; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D4E74 = D_801D4E74 + 1; - if (D_801D4E74 >= 0x19) { - if (D_801D4EB8 != 0) { - (*D_801D4EB8)(); - } else { - D_80114F30 = D_80114F30 + D_801D4EFC; - D_80114F34 = D_80114F34 + D_801D4EFE; - D_80114F38 = D_80114F38 + D_801D4F00; - D_80114F24 = D_80114F24 + D_801D4EFC; - D_80114F28 = D_80114F28 + D_801D4EFE; - D_80114F2C = D_80114F2C + D_801D4F00; - func_8012A4BC(); - } - D_801D5B28 = 0; - } -} - - - -extern void (*D_80196FB4[])(void); - -void func_8017BE60(void *a0) { - D_80196FB4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80196FCC[])(void); - -void func_8017BEBC(void *a0) { - D_80196FCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017C0A4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017C1DC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017C24C); - -DEFINE_func_8017D12C() /* dedup: shared engine-core @0x8017D12C (src/shared) */ - - - -extern void (*D_80197048[])(void); - -void func_8017D14C(void *a0) { - D_80197048[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D188); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D1CC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80197050[])(void); - -void func_8017D1F0(void *a0) { - D_80197050[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D22C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D26C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D2E8(void) { - func_800D1EBC(); - } - - - -extern void (*D_8019705C[])(void); - -void func_8017D308(void *a0) { - D_8019705C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D344); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D3B8); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_8019706C; - -void func_8017D3E0(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8019706C, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D408); - - -extern void (*D_80197080[])(void); - -void func_8017D4A0(void *a0) { - D_80197080[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D4DC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D648); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D7E0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D874); - - -extern void (*D_80197088[])(void); - -void func_8017D8F8(void *a0) { - D_80197088[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D934); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017D9A4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DB20); - -extern s32 func_8017DC58(void); - -s32 func_8017DC58(void) { - return 0x7E; -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DC60); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DCC0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DD88); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DE08); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DE64); - -DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DEAC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DF04); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DF54); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017DFD8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E134); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E188); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E1AC); - - -extern void (*D_8019714C[])(void); - -void func_8017E1F0(void *a0) { - D_8019714C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E22C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E378); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E3F0); - - -void func_8017E420(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E434); - - -extern void (*D_80197184[])(void); - -void func_8017E49C(void *a0) { - D_80197184[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E4D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E524); - -void func_8017E56C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E574); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017E6D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017EA54); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017EB8C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017ED60); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017EF0C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017F0F4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017F430); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017F6D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017F808); - - -extern void (*D_801AAF88[])(void); - -void func_8017F8E0(void *a0) { - D_801AAF88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017F91C); - - -extern void (*D_801AAFA8[])(void); - -void func_8017FA90(void *a0) { - D_801AAFA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FACC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FB54); - - - -extern void func_8017ED60(void); - void func_8017FB8C(s32 *param) { - *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; - func_8017ED60(); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FBB4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FBE8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FC34); - -extern void func_8017EB8C(s32 arg0); - void func_8017FD20(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; - ((void (*)(s32 *))func_8017EB8C)(a0); - } - - -extern void func_8017EB8C(s32 arg0); - void func_8017FD54(u8 *param_1) { - param_1[0xC1] = 0xC; - *(s32 *)(param_1 + 0x1C) = 0x3C; - ((void (*)(void))func_8017EB8C)(); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FD80); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FE0C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8017FF34); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80180068); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801800C8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80180188); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018025C); - -extern s32 D_801D55A0; -extern s32 func_8012C588(s32 a0, s32 a1); - -void func_80180354(s32 a0, s32 a1) { - D_801D55A0 = a1; - ((void (*)(s32, s32))func_8012C588)(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80180384); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801805C8); - - -extern void (*D_801ACD5C[])(void); - -void func_80180868(void *a0) { - D_801ACD5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801808A4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80180AB4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80180EB8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018102C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801811DC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80181468); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018192C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80181AFC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80181CEC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80182004); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801821FC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80182644); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80182854); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80182C98); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80182EA8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018312C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018314C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018324C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801832EC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801833AC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183444); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183464); - -void func_80183554(void) { -} - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018355C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183630); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801836F0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183710); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183730); - -void func_80183824(void) { -} - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018382C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183920); - -extern void func_8012B370(int a0); - void func_801839E0(void) { - ((s32 (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183A00); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183A70); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183C8C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183CDC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183DA4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183F10); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80183F50); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801840D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018410C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184194); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801841E0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018431C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184370); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801844C0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184500); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018457C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801847FC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184844); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184904); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184944); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184AA8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184AFC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184C0C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80184C74); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801850F4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185268); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185320); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185400); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185440); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801854C0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801854F8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801857CC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185944); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018598C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185C2C); - -extern void func_80187038(void); - void func_80185DA8(s32 arg0) { - if (*(s16 *)((s32)arg0 + 0x98) == 0) { - ((void (*)(void))func_80187038)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185DD8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80185F58); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186270); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801866D4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186738); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186784); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186800); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186850); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186894); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801868DC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186928); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186994); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186D80); - -extern void func_80189E60(s32 arg0, s32 arg1); - void func_80186ED4(s32 arg0) { - func_80189E60(arg0, 0x9B7); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186EF4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80186F78); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187038); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187130); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187250); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187320); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801874E4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018765C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801876BC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801877E4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187844); - - -extern void (*D_801B53F4[])(void); - -void func_80187924(void *a0) { - D_801B53F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187960); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187AEC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80187DD0); - - -extern void (*D_801B554C[])(void); - -void func_80188088(void *a0) { - D_801B554C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801880C4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188234); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018829C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801884F4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188554); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018868C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801886B0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188B00); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188B9C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188D54); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188D90); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80188E10); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189000); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189284); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018931C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189380); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801893CC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018944C); - - -extern void (*D_801B5580[])(void); - -void func_801894B4(void *a0) { - D_801B5580[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801894F0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189954); - - -extern void (*D_801B55A0[])(void); - -void func_801899F8(void *a0) { - D_801B55A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189A34); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189C28); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189D64); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80189E60); - - -extern void (*D_801B55AC[])(void); - -void func_80189FCC(void *a0) { - D_801B55AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A008); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A0B8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A170); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A28C); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018A474(void *arg0) { - *(s16 *)((char *)arg0 + 0x108) = 0; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 2); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A498); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A5D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A61C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A688); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A7C8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A86C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018A974); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AB00); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AB74); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018ABD4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AC58); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018ACD4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AD74); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AE64); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018AF88); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B060); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B1D8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B330); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B4D8); - - -extern void (*D_801CD4B0[])(void); - -void func_8018B65C(void *a0) { - D_801CD4B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B698); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B714); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B774); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B8B0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B8F8); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018B998(void *a0) { - func_8002D4C8(0xAE5, 0); - ((void (*)(void *, int))func_8012AD44)(a0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018B9D4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018BB18); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018BBB8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018BC40); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018BCC4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018BFA8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C090); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C190); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C310); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C334); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C3F8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C7A8); - -void func_8018C884(void) { -} - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C88C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018C9B0); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CA44); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CABC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CB14); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CB88); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CC88); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018CD04); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D1A4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D330); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D364); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D40C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D514); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D654); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018D870); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018DE60); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018DFF4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018E188); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018E5DC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018E9BC); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018EDB8); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018F060); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018F694); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018FE0C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8018FF98); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8019059C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80191020); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80191320); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80191A78); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80191C50); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80192768); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80192B60); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80192F64); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_801932EC); - -void func_8019334C(void) { -} - -void func_80193354(void) { -} - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_8019335C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_801734BC", func_80193458); - -void func_80193580(void) { -} - diff --git a/src/ov_SC06_018/ov_SC06_018_jr_80178D40.c b/src/ov_SC06_018/ov_SC06_018_jr_80178D40.c new file mode 100644 index 000000000..1fb089b08 --- /dev/null +++ b/src/ov_SC06_018/ov_SC06_018_jr_80178D40.c @@ -0,0 +1,4979 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801967BC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801D41E0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801967B0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801967F4[]; +extern unsigned short D_801967FC[]; +extern unsigned short D_80196804[]; +extern unsigned char D_801D41E8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801D41E0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8019680C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801D431C; +extern M2C_UNK D_801D4320; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801D42A8; +extern void (*D_8019683C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801D4324[]; +extern u8 D_801D432C[]; +extern u8 D_801D42DC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80196844[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80196860[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80196868[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801968D0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80196874; +extern u8 D_80196880; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80196904[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8019690C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80196960[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80196994[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80196984[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801969B0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80196A28[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80196A30[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80196A38[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80196A40[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80196A48[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80196A50[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80196A5C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80196A68[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80196A74[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80196A84[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80196A94[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80196A9C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80196AA4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80196AAC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80196AB4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80196ABC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80196AC4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80196ACC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80196AD4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80196ADC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80196AE4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80196AEC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80196AF4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80196AFC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80196B04[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80196B0C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80196B14[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80196B1C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80196B24[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80196B2C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80196B34[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80196B3C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80196B44[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80196B88[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80196B4C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80196BB8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80196BF4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80196C4C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80196C5C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80196C64[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80196DCC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80196DD8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801D36F8; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D5B28; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D4A60; +extern short D_801D5B9C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D5B9C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D5B9C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D4A60 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D5B9C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D5AF8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D5AF8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D5B9C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D5B9C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D4EBC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D4A64; + extern s32 D_801D4E78; + extern s16 D_801D4E7C; + extern s16 D_801D4E80; + extern s16 D_801D4E84; + extern s16 D_801D4E88; + extern s32 D_801D4E90; + extern s32 D_801D4E94; + extern s32 D_801D4EA4; + extern s16 D_801D4EA8; + extern s16 D_801D4EAC; + extern s32 D_801D4EB0; + extern s32 D_801D4EB8; + extern s32 D_801D4EBC[10]; + extern s32 D_801D5A40; + extern s16 D_801D5AF8; + extern s32 D_801D5B24; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D5AF8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D4E78); + D_801D4E78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D4E84, D_801D4E88 ? 0x48 : 0x40); + (*(s16*)&D_801D5B9C) = 2; + break; + case 0: + func_80179B28(D_801D4E78); + D_801D4E78 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D4E7C, D_801D4E80 ? 0x48 : 0x40); + (*(s16*)&D_801D5B9C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D5A40 != 0) { + func_80179B28(D_801D4E78); + D_801D4E78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D4E7C, D_801D4E80 ? 0x48 : 0x40); + (*(s16*)&D_801D5B9C) = 1; + } else { + (*(s16*)&D_801D5B9C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D4E78); + D_801D4E78 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D4E7C, + D_801D4E80 ? 0x48 : 0x40); + (*(s16*)&D_801D5B9C) = 1; + break; + case 2: + func_80179B28(D_801D4E78); + if (D_801D4E90 != 0) { + D_801D4A60 = D_801D4E90; + D_801D4E90 = 0; + (*(s16*)&D_801D5B9C) = 3; + return; + } + (*(s16*)&D_801D5B9C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D5B9C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D5B9C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D5B9C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x1B: + D_801D4EB0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D5B9C) = 4; + D_801D4A64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D5B9C) = 5; + D_801D4EA4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D4EA4 = (s32)func_8017A3B0; + (*(s16*)&D_801D5B9C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x24: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D5B9C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D5B9C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D5B9C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D5B9C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D5B9C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D5B9C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D5B9C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D4E94); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D4E94); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D4E94); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D4E94); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x4E: + D_801D4EB8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x2B: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D5B9C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D5B24 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x34: + (*(s16*)&D_801D5B9C) = 3; + D_801D4A60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D4E90 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D5B9C) = 3; + D_801D4A60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D5B9C) = 3; + D_801D4A60 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D4A60 = *(s32 *)(D_801D4A60 + 4); + return; + case 0x37: + (*(s16*)&D_801D5B9C) = 3; + D_801D4E7C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4E80 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D5B9C) = 3; + D_801D4E84 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D4E88 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D5B9C) = 3; + D_801D4E7C = w1; + D_801D4E80 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D5B9C) = 3; + D_801D4E84 = w2; + D_801D4E88 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x43: + D_801D4EA4 = (s32)func_8017A3D8; + D_801D4EAC = 0; + (*(s16*)&D_801D5B9C) = 5; + D_801D4EA8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D5B9C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D5B9C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D4EBC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D5B9C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D4EBC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D5B9C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D4EBC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D5B9C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D4EBC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D5B9C) = 3; + break; + default: + break; + } +Lend: + D_801D4A60 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D4E8C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D4E8C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D4E8C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D4E8C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D4EB4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D4EB4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D4E70; + +s32 func_8017A3B0(void) { + switch (D_801D4E70) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D4EAC; +extern short D_801D4EA8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D4EAC) { + case 0: + func_800D0CA0(1); + D_801D4EAC = D_801D4EAC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D4EA8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D4EAC = D_801D4EAC + 1; + if (D_801D4EAC < 0x1E) { + return 0; + } + D_801D4EAC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D4EEC; + extern s16 D_801D4EEE; + extern s16 D_801D4EF0; + extern s16 D_801D4EE4; + extern s16 D_801D4EE6; + extern s16 D_801D4EE8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D4EEC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D4EEE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D4EF0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D4EE4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D4EE6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D4EE8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D4E74; +extern u16 D_801D4EF4; +extern u16 D_801D4EF6; +extern u16 D_801D4EF8; +extern s16 D_801D5B28; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D5B28 = 0; + D_801D4E74 = 0; + D_801D4EF4 = D_80126B5E; + D_801D4EF6 = D_80126B62; + D_801D4EF8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80196F14[]; + extern s16 D_801D4EEC; + extern s16 D_801D4EE4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80196F14[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80196F14[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D4EEC; + s16 *p78C = &D_801D4EE4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D5B28 = 1; + D_801D4E74 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D4E94; + extern SV4_8017B368 D_801D4E9C; + extern s16 D_801D4EEC; + extern s16 D_801D4EE4; + extern u16 D_80196F14; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D4E94; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D4E9C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80196F14)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80196F14)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D4EEC) = loc0; + (*(SV4_8017B368 *)&D_801D4EE4) = loc1; + D_801D5B28 = 1; + D_801D4E74 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80196F14[]; + extern s16 D_801D4EEC; + extern s16 D_801D4EEE; + extern s16 D_801D4EF0; + extern s16 D_801D4EE4; + extern s16 D_801D4EE6; + extern s16 D_801D4EE8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80196F14[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80196F14[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D4EEC; + s16 *p78C = &D_801D4EE4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D4EEE; + v798 = D_801D4EF0; + v78C = *p78C; + v78E = D_801D4EE6; + v790 = D_801D4EE8; + __asm__ __volatile__(""); + D_801D5B28 = 1; + D_801D4E74 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4E74; +extern s16 D_801D4EEC; +extern s16 D_801D4EEE; +extern s16 D_801D4EF0; +extern s16 D_801D4EE4; +extern s16 D_801D4EE6; +extern s16 D_801D4EE8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D4E74 = 0; + D_801D4EEC = (s16) D_80114F30; + D_801D4EEE = (s16) D_80114F34; + D_801D4EF0 = (s16) D_80114F38; + D_801D4EE4 = (s16) D_80114F24; + D_801D4EE6 = (s16) D_80114F28; + D_801D4EE8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D4F04; +extern s16 D_801D4F06; +extern s16 D_801D4F08; +extern s16 D_801D4F0C; +extern s16 D_801D4F0E; +extern s16 D_801D4F10; + +void func_8017B824(void) { + D_801D4F04 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D4F06 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D4F08 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D4F0C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D4F0E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D4F10 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D4F04; +extern s16 D_801D4F06; +extern s16 D_801D4F08; +extern s16 D_801D4F0C; +extern s16 D_801D4F0E; +extern s16 D_801D4F10; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D4F04; + D_80114F34 = D_801D4F06; + D_80114F38 = D_801D4F08; + D_80114F24 = D_801D4F0C; + D_80114F28 = D_801D4F0E; + D_80114F2C = D_801D4F10; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D4EEC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D4EE4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D4EEC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D4EE4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D4EF4; +extern u16 D_801D4EF6; +extern u16 D_801D4EF8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D4E74; +extern short D_801D4EFC; +extern short D_801D4EFE; +extern short D_801D4F00; +extern s16 D_801D4EEC; +extern s16 D_801D4EEE; +extern s16 D_801D4EF0; +extern s16 D_801D4EE4; +extern s16 D_801D4EE6; +extern s16 D_801D4EE8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D4EF4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D4EF6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D4EF8); + (*(s16 *)&D_801D4EFC) = buf[0]; + (*(s16 *)&D_801D4EFE) = buf[1]; + (*(s16 *)&D_801D4F00) = buf[2]; + D_801D4EEC = D_80114F30 + buf[0]; + D_801D4E74 = 0; + D_801D4EEE = D_80114F34 + buf[1]; + D_801D4EF0 = D_80114F38 + buf[2]; + D_801D4EE4 = D_80114F24 + buf[0]; + D_801D4EE6 = D_80114F28 + buf[1]; + D_801D4EE8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D4E94; +extern SV4 D_801D4E9C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D4E9C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D4E94 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D4E9C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D4E9C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D4E94) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D4E9C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D4EBC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D4EBC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D4E74; +extern s16 D_801D5B28; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D4E74 = D_801D4E74 + 1; + if (D_801D4E74 >= 0x1F) { + D_801D5B28 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D4E74; +extern s16 D_801D5B28; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4E74 = D_801D4E74 + 1; + if (0x18 < D_801D4E74) { + func_8012A4BC(); + D_801D5B28 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D4E74; +extern void (*D_801D4EB8)(void); +extern short D_801D4EFC; +extern short D_801D4EFE; +extern short D_801D4F00; +extern s16 D_801D5B28; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D4E74 = D_801D4E74 + 1; + if (D_801D4E74 >= 0x19) { + if (D_801D4EB8 != 0) { + (*D_801D4EB8)(); + } else { + D_80114F30 = D_80114F30 + D_801D4EFC; + D_80114F34 = D_80114F34 + D_801D4EFE; + D_80114F38 = D_80114F38 + D_801D4F00; + D_80114F24 = D_80114F24 + D_801D4EFC; + D_80114F28 = D_80114F28 + D_801D4EFE; + D_80114F2C = D_80114F2C + D_801D4F00; + func_8012A4BC(); + } + D_801D5B28 = 0; + } +} + + + +extern void (*D_80196FB4[])(void); + +void func_8017BE60(void *a0) { + D_80196FB4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80196FCC[])(void); + +void func_8017BEBC(void *a0) { + D_80196FCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017C0A4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017C1DC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017C24C); + +DEFINE_func_8017D12C() /* dedup: shared engine-core @0x8017D12C (src/shared) */ + + + +extern void (*D_80197048[])(void); + +void func_8017D14C(void *a0) { + D_80197048[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D188); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D1CC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80197050[])(void); + +void func_8017D1F0(void *a0) { + D_80197050[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D22C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D26C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D2E8(void) { + func_800D1EBC(); + } + + + +extern void (*D_8019705C[])(void); + +void func_8017D308(void *a0) { + D_8019705C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D344); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D3B8); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_8019706C; + +void func_8017D3E0(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8019706C, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D408); + + +extern void (*D_80197080[])(void); + +void func_8017D4A0(void *a0) { + D_80197080[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D4DC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D648); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D7E0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D874); + + +extern void (*D_80197088[])(void); + +void func_8017D8F8(void *a0) { + D_80197088[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D934); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017D9A4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DB20); + +extern s32 func_8017DC58(void); + +s32 func_8017DC58(void) { + return 0x7E; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DC60); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DCC0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DD88); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DE08); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DE64); + +DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DEAC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DF04); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DF54); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017DFD8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E134); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E188); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E1AC); + + +extern void (*D_8019714C[])(void); + +void func_8017E1F0(void *a0) { + D_8019714C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E22C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E378); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E3F0); + + +void func_8017E420(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E434); + + +extern void (*D_80197184[])(void); + +void func_8017E49C(void *a0) { + D_80197184[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E4D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E524); + +void func_8017E56C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E574); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017E6D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017EA54); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017EB8C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017ED60); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017EF0C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017F0F4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017F430); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017F6D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017F808); + + +extern void (*D_801AAF88[])(void); + +void func_8017F8E0(void *a0) { + D_801AAF88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017F91C); + + +extern void (*D_801AAFA8[])(void); + +void func_8017FA90(void *a0) { + D_801AAFA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FACC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FB54); + + + +extern void func_8017ED60(void); + void func_8017FB8C(s32 *param) { + *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; + func_8017ED60(); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FBB4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FBE8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FC34); + +extern void func_8017EB8C(s32 arg0); + void func_8017FD20(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; + ((void (*)(s32 *))func_8017EB8C)(a0); + } + + +extern void func_8017EB8C(s32 arg0); + void func_8017FD54(u8 *param_1) { + param_1[0xC1] = 0xC; + *(s32 *)(param_1 + 0x1C) = 0x3C; + ((void (*)(void))func_8017EB8C)(); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FD80); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FE0C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8017FF34); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80180068); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801800C8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80180188); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018025C); + +extern s32 D_801D55A0; +extern s32 func_8012C588(s32 a0, s32 a1); + +void func_80180354(s32 a0, s32 a1) { + D_801D55A0 = a1; + ((void (*)(s32, s32))func_8012C588)(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80180384); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801805C8); + + +extern void (*D_801ACD5C[])(void); + +void func_80180868(void *a0) { + D_801ACD5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801808A4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80180AB4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80180EB8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018102C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801811DC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80181468); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018192C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80181AFC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80181CEC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80182004); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801821FC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80182644); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80182854); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80182C98); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80182EA8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018312C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018314C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018324C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801832EC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801833AC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183444); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183464); + +void func_80183554(void) { +} + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018355C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183630); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801836F0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183710); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183730); + +void func_80183824(void) { +} + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018382C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183920); + +extern void func_8012B370(int a0); + void func_801839E0(void) { + ((s32 (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183A00); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183A70); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183C8C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183CDC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183DA4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183F10); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80183F50); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801840D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018410C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184194); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801841E0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018431C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184370); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801844C0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184500); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018457C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801847FC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184844); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184904); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184944); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184AA8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184AFC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184C0C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80184C74); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801850F4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185268); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185320); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185400); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185440); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801854C0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801854F8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801857CC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185944); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018598C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185C2C); + +extern void func_80187038(void); + void func_80185DA8(s32 arg0) { + if (*(s16 *)((s32)arg0 + 0x98) == 0) { + ((void (*)(void))func_80187038)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185DD8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80185F58); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186270); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801866D4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186738); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186784); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186800); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186850); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186894); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801868DC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186928); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186994); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186D80); + +extern void func_80189E60(s32 arg0, s32 arg1); + void func_80186ED4(s32 arg0) { + func_80189E60(arg0, 0x9B7); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186EF4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80186F78); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187038); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187130); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187250); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187320); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801874E4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018765C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801876BC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801877E4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187844); + + +extern void (*D_801B53F4[])(void); + +void func_80187924(void *a0) { + D_801B53F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187960); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187AEC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80187DD0); + + +extern void (*D_801B554C[])(void); + +void func_80188088(void *a0) { + D_801B554C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801880C4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188234); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018829C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801884F4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188554); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018868C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801886B0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188B00); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188B9C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188D54); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188D90); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80188E10); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189000); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189284); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018931C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189380); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801893CC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018944C); + + +extern void (*D_801B5580[])(void); + +void func_801894B4(void *a0) { + D_801B5580[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801894F0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189954); + + +extern void (*D_801B55A0[])(void); + +void func_801899F8(void *a0) { + D_801B55A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189A34); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189C28); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189D64); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80189E60); + + +extern void (*D_801B55AC[])(void); + +void func_80189FCC(void *a0) { + D_801B55AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A008); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A0B8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A170); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A28C); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018A474(void *arg0) { + *(s16 *)((char *)arg0 + 0x108) = 0; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 2); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A498); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A5D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A61C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A688); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A7C8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A86C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018A974); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AB00); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AB74); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018ABD4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AC58); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018ACD4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AD74); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AE64); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018AF88); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B060); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B1D8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B330); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B4D8); + + +extern void (*D_801CD4B0[])(void); + +void func_8018B65C(void *a0) { + D_801CD4B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B698); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B714); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B774); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B8B0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B8F8); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018B998(void *a0) { + func_8002D4C8(0xAE5, 0); + ((void (*)(void *, int))func_8012AD44)(a0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018B9D4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018BB18); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018BBB8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018BC40); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018BCC4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018BFA8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C090); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C190); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C310); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C334); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C3F8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C7A8); + +void func_8018C884(void) { +} + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C88C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018C9B0); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CA44); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CABC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CB14); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CB88); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CC88); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018CD04); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D1A4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D330); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D364); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D40C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D514); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D654); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018D870); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018DE60); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018DFF4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018E188); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018E5DC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018E9BC); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018EDB8); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018F060); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018F694); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018FE0C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8018FF98); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8019059C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80191020); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80191320); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80191A78); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80191C50); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80192768); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80192B60); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80192F64); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_801932EC); + +void func_8019334C(void) { +} + +void func_80193354(void) { +} + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_8019335C); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80178D40", func_80193458); + +void func_80193580(void) { +} + + diff --git a/src/ov_SC06_020/ov_SC06_020_jr_801734BC.c b/src/ov_SC06_020/ov_SC06_020_jr_801734BC.c index bd6707136..fcfd16326 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_801734BC.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_801734BC.c @@ -3084,1185 +3084,3 @@ void func_80178D18(void) { D_801BA9EC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BA6A4; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801BA6A4 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801BA6A4; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801BA6A4 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801BA6CC; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801BA6CC = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801BA688; - -s32 func_8017A3B0(void) { - switch (D_801BA688) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801BA6C4; -extern short D_801BA6C0; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801BA6C4) { - case 0: - func_800D0CA0(1); - D_801BA6C4 = D_801BA6C4 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801BA6C0; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801BA6C4 = D_801BA6C4 + 1; - if (D_801BA6C4 < 0x1E) { - return 0; - } - D_801BA6C4 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801BA704; - extern s16 D_801BA706; - extern s16 D_801BA708; - extern s16 D_801BA6FC; - extern s16 D_801BA6FE; - extern s16 D_801BA700; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BA704, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BA706, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BA708, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BA6FC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BA6FE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BA700, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801BA68C; -extern u16 D_801BA70C; -extern u16 D_801BA70E; -extern u16 D_801BA710; -extern s16 D_801BA978; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BA978 = 0; - D_801BA68C = 0; - D_801BA70C = D_80126B5E; - D_801BA70E = D_80126B62; - D_801BA710 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018899C[]; - extern s16 D_801BA704; - extern s16 D_801BA6FC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018899C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018899C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BA704; - s16 *p78C = &D_801BA6FC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BA978 = 1; - D_801BA68C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801BA6AC; - extern SV4_8017B368 D_801BA6B4; - extern s16 D_801BA704; - extern s16 D_801BA6FC; - extern u16 D_8018899C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801BA6AC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801BA6B4; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018899C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018899C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801BA704) = loc0; - (*(SV4_8017B368 *)&D_801BA6FC) = loc1; - D_801BA978 = 1; - D_801BA68C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018899C[]; - extern s16 D_801BA704; - extern s16 D_801BA706; - extern s16 D_801BA708; - extern s16 D_801BA6FC; - extern s16 D_801BA6FE; - extern s16 D_801BA700; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018899C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018899C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801BA704; - s16 *p78C = &D_801BA6FC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801BA706; - v798 = D_801BA708; - v78C = *p78C; - v78E = D_801BA6FE; - v790 = D_801BA700; - __asm__ __volatile__(""); - D_801BA978 = 1; - D_801BA68C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BA68C; -extern s16 D_801BA704; -extern s16 D_801BA706; -extern s16 D_801BA708; -extern s16 D_801BA6FC; -extern s16 D_801BA6FE; -extern s16 D_801BA700; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801BA68C = 0; - D_801BA704 = (s16) D_80114F30; - D_801BA706 = (s16) D_80114F34; - D_801BA708 = (s16) D_80114F38; - D_801BA6FC = (s16) D_80114F24; - D_801BA6FE = (s16) D_80114F28; - D_801BA700 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801BA71C; -extern s16 D_801BA71E; -extern s16 D_801BA720; -extern s16 D_801BA724; -extern s16 D_801BA726; -extern s16 D_801BA728; - -void func_8017B824(void) { - D_801BA71C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801BA71E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801BA720 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801BA724 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801BA726 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801BA728 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801BA71C; -extern s16 D_801BA71E; -extern s16 D_801BA720; -extern s16 D_801BA724; -extern s16 D_801BA726; -extern s16 D_801BA728; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801BA71C; - D_80114F34 = D_801BA71E; - D_80114F38 = D_801BA720; - D_80114F24 = D_801BA724; - D_80114F28 = D_801BA726; - D_80114F2C = D_801BA728; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801BA704), src[8..15] -> (*(S8_8017B8E8 *)&D_801BA6FC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801BA704) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801BA6FC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801BA70C; -extern u16 D_801BA70E; -extern u16 D_801BA710; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801BA68C; -extern short D_801BA714; -extern short D_801BA716; -extern short D_801BA718; -extern s16 D_801BA704; -extern s16 D_801BA706; -extern s16 D_801BA708; -extern s16 D_801BA6FC; -extern s16 D_801BA6FE; -extern s16 D_801BA700; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BA70C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BA70E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BA710); - (*(s16 *)&D_801BA714) = buf[0]; - (*(s16 *)&D_801BA716) = buf[1]; - (*(s16 *)&D_801BA718) = buf[2]; - D_801BA704 = D_80114F30 + buf[0]; - D_801BA68C = 0; - D_801BA706 = D_80114F34 + buf[1]; - D_801BA708 = D_80114F38 + buf[2]; - D_801BA6FC = D_80114F24 + buf[0]; - D_801BA6FE = D_80114F28 + buf[1]; - D_801BA700 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801BA6AC; -extern SV4 D_801BA6B4; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BA6B4) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801BA6AC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801BA6B4 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BA6B4)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801BA6AC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801BA6B4) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801BA6D4[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801BA6D4; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801BA68C; -extern s16 D_801BA978; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801BA68C = D_801BA68C + 1; - if (D_801BA68C >= 0x1F) { - D_801BA978 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801BA68C; -extern s16 D_801BA978; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BA68C = D_801BA68C + 1; - if (0x18 < D_801BA68C) { - func_8012A4BC(); - D_801BA978 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801BA68C; -extern void (*D_801BA6D0)(void); -extern short D_801BA714; -extern short D_801BA716; -extern short D_801BA718; -extern s16 D_801BA978; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801BA68C = D_801BA68C + 1; - if (D_801BA68C >= 0x19) { - if (D_801BA6D0 != 0) { - (*D_801BA6D0)(); - } else { - D_80114F30 = D_80114F30 + D_801BA714; - D_80114F34 = D_80114F34 + D_801BA716; - D_80114F38 = D_80114F38 + D_801BA718; - D_80114F24 = D_80114F24 + D_801BA714; - D_80114F28 = D_80114F28 + D_801BA716; - D_80114F2C = D_80114F2C + D_801BA718; - func_8012A4BC(); - } - D_801BA978 = 0; - } -} - - - -extern void (*D_80188A3C[])(void); - -void func_8017BE60(void *a0) { - D_80188A3C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80188A54[])(void); - -void func_8017BEBC(void *a0) { - D_80188A54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017C0A4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017C1DC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017C24C); - -DEFINE_func_8017D12C() /* dedup: shared engine-core @0x8017D12C (src/shared) */ - - -extern void (*D_80188AD0[])(void); - -void func_8017D14C(void *a0) { - D_80188AD0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D188); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D1CC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D1F0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D230(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D2AC(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188AE4[])(void); - -void func_8017D2CC(void *a0) { - D_80188AE4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D308); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern char D_80188AF0[]; - -void func_8017D37C(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_80188AF0, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D3CC); - - -extern void (*D_80188B10[])(void); - -void func_8017D464(void *a0) { - D_80188B10[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D4A0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D558); - - -extern void (*D_80188B18[])(void); - -void func_8017D6F0(void *a0) { - D_80188B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D72C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D79C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017D918); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DA50); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DAE4); - -extern s32 func_8017DB68(void); - -s32 func_8017DB68(void) { - return 0x7E; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DB70); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DBE0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DDFC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DE4C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017DF14); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E080); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E0C0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E248); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E27C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E304); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E350); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E48C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E4E0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E630); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E670); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E96C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017E9B4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017EA74); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017EAB4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017EC18); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017EC6C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017ED7C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017EDE4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F264); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F3D8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F490); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F570); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F5B0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F630); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F668); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017F93C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017FAB4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017FAFC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017FD9C); - -extern void func_801811A8(void); - void func_8017FF18(s32 arg0) { - if (*(s16 *)(arg0 + 0x98) == 0) { - ((void (*)(void))func_801811A8)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8017FF48); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801800C8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801803E0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180844); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801808A8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801808F4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180970); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801809C0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180A04); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180A4C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180A98); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180B04); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80180EF0); - -extern void func_80183FD0(s32 arg0, s32 arg1); - void func_80181044(void *arg0) { - func_80183FD0((s32)arg0, 0x9B7); - } - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181064); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801810E8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801811A8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801812A0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801813C0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181490); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181654); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801817CC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8018182C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181954); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801819B4); - - -extern void (*D_8019EC24[])(void); - -void func_80181A94(void *a0) { - D_8019EC24[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181AD0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181C5C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80181F40); - - -extern void (*D_8019ED7C[])(void); - -void func_801821F8(void *a0) { - D_8019ED7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182234); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801823A4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8018240C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182664); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801826C4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801827FC); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182820); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182C70); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182D0C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182EC4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182F00); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80182F80); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183170); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801833F4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8018348C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801834F0); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8018353C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_801835BC); - - -extern void (*D_8019EDB0[])(void); - -void func_80183624(void *a0) { - D_8019EDB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183660); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183AC4); - - -extern void (*D_8019EDD0[])(void); - -void func_80183B68(void *a0) { - D_8019EDD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183BA4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183D98); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183ED4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80183FD0); - - -extern void (*D_8019EDDC[])(void); - -void func_8018413C(void *a0) { - D_8019EDDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184178); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184228); - - -extern s32 D_801BA878; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_801842E0(s32 a0, s32 a1) { - D_801BA878 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184310); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184554); - - -extern void (*D_801B6C1C[])(void); - -void func_801847F4(void *a0) { - D_801B6C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801B7524[])(void); - -void func_80184830(void *a0) { - D_801B7524[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_8018486C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184940); - -void func_80184968(void) { -} - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184970); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184ABC); - -extern void func_8012C218(void *a0); - void func_80184BDC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184C08); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184C18); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184C28); - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_80184C68(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184C9C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184CC0); - - -extern void (*D_801B754C[])(void); - -void func_80184D24(void *a0) { - D_801B754C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184D60); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184DE8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184EA8); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801734BC", func_80184F18); - diff --git a/src/ov_SC06_020/ov_SC06_020_jr_80178D40.c b/src/ov_SC06_020/ov_SC06_020_jr_80178D40.c new file mode 100644 index 000000000..b73b2ddae --- /dev/null +++ b/src/ov_SC06_020/ov_SC06_020_jr_80178D40.c @@ -0,0 +1,4631 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80188244[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B99F8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80188238[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018827C[]; +extern unsigned short D_80188284[]; +extern unsigned short D_8018828C[]; +extern unsigned char D_801B9A00[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B99F8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80188294[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B9B34; +extern M2C_UNK D_801B9B38; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B9AC0; +extern void (*D_801882C4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B9B3C[]; +extern u8 D_801B9B44[]; +extern u8 D_801B9AF4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801882CC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801882E8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801882F0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80188358[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801882FC; +extern u8 D_80188308; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018838C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80188394[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801883E8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018841C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018840C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188438; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801884B0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801884B8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801884C0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801884C8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801884D0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801884D8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801884E4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801884F0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801884FC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018850C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018851C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80188524[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018852C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80188534[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018853C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80188544[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018854C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80188554[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018855C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80188564[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018856C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80188574[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018857C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80188584[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018858C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80188594[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018859C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801885A4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801885AC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801885B4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801885BC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801885C4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801885CC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188610[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801885D4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188640[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018867C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801886D4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801886E4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801886EC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80188854[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188860[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B8FE0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BA978; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801BA278; +extern short D_801BA9EC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BA9EC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BA9EC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801BA278 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BA9EC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801BA948 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801BA948 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BA9EC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BA9EC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801BA6D4[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801BA27C; + extern s32 D_801BA690; + extern s16 D_801BA694; + extern s16 D_801BA698; + extern s16 D_801BA69C; + extern s16 D_801BA6A0; + extern s32 D_801BA6A8; + extern s32 D_801BA6AC; + extern s32 D_801BA6BC; + extern s16 D_801BA6C0; + extern s16 D_801BA6C4; + extern s32 D_801BA6C8; + extern s32 D_801BA6D0; + extern s32 D_801BA6D4[10]; + extern s32 D_801BA890; + extern s16 D_801BA948; + extern s32 D_801BA974; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801BA948; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801BA690); + D_801BA690 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BA69C, D_801BA6A0 ? 0x48 : 0x40); + (*(s16*)&D_801BA9EC) = 2; + break; + case 0: + func_80179B28(D_801BA690); + D_801BA690 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801BA694, D_801BA698 ? 0x48 : 0x40); + (*(s16*)&D_801BA9EC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801BA890 != 0) { + func_80179B28(D_801BA690); + D_801BA690 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801BA694, D_801BA698 ? 0x48 : 0x40); + (*(s16*)&D_801BA9EC) = 1; + } else { + (*(s16*)&D_801BA9EC) = 3; + } + break; + case 0x32: + func_80179B28(D_801BA690); + D_801BA690 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801BA694, + D_801BA698 ? 0x48 : 0x40); + (*(s16*)&D_801BA9EC) = 1; + break; + case 2: + func_80179B28(D_801BA690); + if (D_801BA6A8 != 0) { + D_801BA278 = D_801BA6A8; + D_801BA6A8 = 0; + (*(s16*)&D_801BA9EC) = 3; + return; + } + (*(s16*)&D_801BA9EC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BA9EC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BA9EC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BA9EC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x1B: + D_801BA6C8 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BA9EC) = 4; + D_801BA27C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BA9EC) = 5; + D_801BA6BC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801BA6BC = (s32)func_8017A3B0; + (*(s16*)&D_801BA9EC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x24: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BA9EC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BA9EC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BA9EC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA9EC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA9EC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA9EC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BA9EC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BA6AC); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801BA6AC); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BA6AC); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801BA6AC); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x4E: + D_801BA6D0 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x2B: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BA9EC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BA974 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x34: + (*(s16*)&D_801BA9EC) = 3; + D_801BA278 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801BA6A8 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BA9EC) = 3; + D_801BA278 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BA9EC) = 3; + D_801BA278 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801BA278 = *(s32 *)(D_801BA278 + 4); + return; + case 0x37: + (*(s16*)&D_801BA9EC) = 3; + D_801BA694 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BA698 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BA9EC) = 3; + D_801BA69C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801BA6A0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BA9EC) = 3; + D_801BA694 = w1; + D_801BA698 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BA9EC) = 3; + D_801BA69C = w2; + D_801BA6A0 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x43: + D_801BA6BC = (s32)func_8017A3D8; + D_801BA6C4 = 0; + (*(s16*)&D_801BA9EC) = 5; + D_801BA6C0 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA9EC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA9EC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801BA6D4; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BA9EC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801BA6D4; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BA9EC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801BA6D4[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BA9EC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801BA6D4; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BA9EC) = 3; + break; + default: + break; + } +Lend: + D_801BA278 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BA6A4; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801BA6A4 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801BA6A4; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801BA6A4 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801BA6CC; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801BA6CC = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801BA688; + +s32 func_8017A3B0(void) { + switch (D_801BA688) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801BA6C4; +extern short D_801BA6C0; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801BA6C4) { + case 0: + func_800D0CA0(1); + D_801BA6C4 = D_801BA6C4 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801BA6C0; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801BA6C4 = D_801BA6C4 + 1; + if (D_801BA6C4 < 0x1E) { + return 0; + } + D_801BA6C4 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801BA704; + extern s16 D_801BA706; + extern s16 D_801BA708; + extern s16 D_801BA6FC; + extern s16 D_801BA6FE; + extern s16 D_801BA700; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801BA704, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801BA706, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801BA708, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801BA6FC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801BA6FE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801BA700, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801BA68C; +extern u16 D_801BA70C; +extern u16 D_801BA70E; +extern u16 D_801BA710; +extern s16 D_801BA978; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BA978 = 0; + D_801BA68C = 0; + D_801BA70C = D_80126B5E; + D_801BA70E = D_80126B62; + D_801BA710 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018899C[]; + extern s16 D_801BA704; + extern s16 D_801BA6FC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018899C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018899C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BA704; + s16 *p78C = &D_801BA6FC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BA978 = 1; + D_801BA68C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801BA6AC; + extern SV4_8017B368 D_801BA6B4; + extern s16 D_801BA704; + extern s16 D_801BA6FC; + extern u16 D_8018899C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801BA6AC; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801BA6B4; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018899C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018899C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801BA704) = loc0; + (*(SV4_8017B368 *)&D_801BA6FC) = loc1; + D_801BA978 = 1; + D_801BA68C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018899C[]; + extern s16 D_801BA704; + extern s16 D_801BA706; + extern s16 D_801BA708; + extern s16 D_801BA6FC; + extern s16 D_801BA6FE; + extern s16 D_801BA700; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018899C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018899C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801BA704; + s16 *p78C = &D_801BA6FC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801BA706; + v798 = D_801BA708; + v78C = *p78C; + v78E = D_801BA6FE; + v790 = D_801BA700; + __asm__ __volatile__(""); + D_801BA978 = 1; + D_801BA68C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BA68C; +extern s16 D_801BA704; +extern s16 D_801BA706; +extern s16 D_801BA708; +extern s16 D_801BA6FC; +extern s16 D_801BA6FE; +extern s16 D_801BA700; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801BA68C = 0; + D_801BA704 = (s16) D_80114F30; + D_801BA706 = (s16) D_80114F34; + D_801BA708 = (s16) D_80114F38; + D_801BA6FC = (s16) D_80114F24; + D_801BA6FE = (s16) D_80114F28; + D_801BA700 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801BA71C; +extern s16 D_801BA71E; +extern s16 D_801BA720; +extern s16 D_801BA724; +extern s16 D_801BA726; +extern s16 D_801BA728; + +void func_8017B824(void) { + D_801BA71C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801BA71E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801BA720 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801BA724 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801BA726 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801BA728 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801BA71C; +extern s16 D_801BA71E; +extern s16 D_801BA720; +extern s16 D_801BA724; +extern s16 D_801BA726; +extern s16 D_801BA728; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801BA71C; + D_80114F34 = D_801BA71E; + D_80114F38 = D_801BA720; + D_80114F24 = D_801BA724; + D_80114F28 = D_801BA726; + D_80114F2C = D_801BA728; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801BA704), src[8..15] -> (*(S8_8017B8E8 *)&D_801BA6FC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801BA704) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801BA6FC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801BA70C; +extern u16 D_801BA70E; +extern u16 D_801BA710; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801BA68C; +extern short D_801BA714; +extern short D_801BA716; +extern short D_801BA718; +extern s16 D_801BA704; +extern s16 D_801BA706; +extern s16 D_801BA708; +extern s16 D_801BA6FC; +extern s16 D_801BA6FE; +extern s16 D_801BA700; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801BA70C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801BA70E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801BA710); + (*(s16 *)&D_801BA714) = buf[0]; + (*(s16 *)&D_801BA716) = buf[1]; + (*(s16 *)&D_801BA718) = buf[2]; + D_801BA704 = D_80114F30 + buf[0]; + D_801BA68C = 0; + D_801BA706 = D_80114F34 + buf[1]; + D_801BA708 = D_80114F38 + buf[2]; + D_801BA6FC = D_80114F24 + buf[0]; + D_801BA6FE = D_80114F28 + buf[1]; + D_801BA700 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801BA6AC; +extern SV4 D_801BA6B4; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801BA6B4) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801BA6AC = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801BA6B4 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801BA6B4)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801BA6AC) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801BA6B4) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801BA6D4[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801BA6D4; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801BA68C; +extern s16 D_801BA978; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801BA68C = D_801BA68C + 1; + if (D_801BA68C >= 0x1F) { + D_801BA978 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801BA68C; +extern s16 D_801BA978; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BA68C = D_801BA68C + 1; + if (0x18 < D_801BA68C) { + func_8012A4BC(); + D_801BA978 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801BA68C; +extern void (*D_801BA6D0)(void); +extern short D_801BA714; +extern short D_801BA716; +extern short D_801BA718; +extern s16 D_801BA978; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801BA68C = D_801BA68C + 1; + if (D_801BA68C >= 0x19) { + if (D_801BA6D0 != 0) { + (*D_801BA6D0)(); + } else { + D_80114F30 = D_80114F30 + D_801BA714; + D_80114F34 = D_80114F34 + D_801BA716; + D_80114F38 = D_80114F38 + D_801BA718; + D_80114F24 = D_80114F24 + D_801BA714; + D_80114F28 = D_80114F28 + D_801BA716; + D_80114F2C = D_80114F2C + D_801BA718; + func_8012A4BC(); + } + D_801BA978 = 0; + } +} + + + +extern void (*D_80188A3C[])(void); + +void func_8017BE60(void *a0) { + D_80188A3C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80188A54[])(void); + +void func_8017BEBC(void *a0) { + D_80188A54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017C0A4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017C1DC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017C24C); + +DEFINE_func_8017D12C() /* dedup: shared engine-core @0x8017D12C (src/shared) */ + + +extern void (*D_80188AD0[])(void); + +void func_8017D14C(void *a0) { + D_80188AD0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D188); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D1CC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D1F0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D230(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D2AC(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188AE4[])(void); + +void func_8017D2CC(void *a0) { + D_80188AE4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D308); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern char D_80188AF0[]; + +void func_8017D37C(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_80188AF0, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D3CC); + + +extern void (*D_80188B10[])(void); + +void func_8017D464(void *a0) { + D_80188B10[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D4A0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D558); + + +extern void (*D_80188B18[])(void); + +void func_8017D6F0(void *a0) { + D_80188B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D72C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D79C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017D918); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DA50); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DAE4); + +extern s32 func_8017DB68(void); + +s32 func_8017DB68(void) { + return 0x7E; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DB70); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DBE0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DDFC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DE4C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017DF14); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E080); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E0C0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E248); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E27C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E304); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E350); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E48C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E4E0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E630); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E670); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E6EC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E96C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017E9B4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017EA74); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017EAB4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017EC18); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017EC6C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017ED7C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017EDE4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F264); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F3D8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F490); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F570); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F5B0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F630); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F668); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017F93C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017FAB4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017FAFC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017FD9C); + +extern void func_801811A8(void); + void func_8017FF18(s32 arg0) { + if (*(s16 *)(arg0 + 0x98) == 0) { + ((void (*)(void))func_801811A8)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8017FF48); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801800C8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801803E0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180844); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801808A8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801808F4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180970); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801809C0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180A04); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180A4C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180A98); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180B04); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80180EF0); + +extern void func_80183FD0(s32 arg0, s32 arg1); + void func_80181044(void *arg0) { + func_80183FD0((s32)arg0, 0x9B7); + } + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181064); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801810E8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801811A8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801812A0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801813C0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181490); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181654); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801817CC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8018182C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181954); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801819B4); + + +extern void (*D_8019EC24[])(void); + +void func_80181A94(void *a0) { + D_8019EC24[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181AD0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181C5C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80181F40); + + +extern void (*D_8019ED7C[])(void); + +void func_801821F8(void *a0) { + D_8019ED7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182234); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801823A4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8018240C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182664); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801826C4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801827FC); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182820); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182C70); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182D0C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182EC4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182F00); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80182F80); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183170); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801833F4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8018348C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801834F0); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8018353C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_801835BC); + + +extern void (*D_8019EDB0[])(void); + +void func_80183624(void *a0) { + D_8019EDB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183660); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183AC4); + + +extern void (*D_8019EDD0[])(void); + +void func_80183B68(void *a0) { + D_8019EDD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183BA4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183D98); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183ED4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80183FD0); + + +extern void (*D_8019EDDC[])(void); + +void func_8018413C(void *a0) { + D_8019EDDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184178); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184228); + + +extern s32 D_801BA878; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_801842E0(s32 a0, s32 a1) { + D_801BA878 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184310); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184554); + + +extern void (*D_801B6C1C[])(void); + +void func_801847F4(void *a0) { + D_801B6C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801B7524[])(void); + +void func_80184830(void *a0) { + D_801B7524[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_8018486C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184940); + +void func_80184968(void) { +} + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184970); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184ABC); + +extern void func_8012C218(void *a0); + void func_80184BDC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184C08); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184C18); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184C28); + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_80184C68(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184C9C); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184CC0); + + +extern void (*D_801B754C[])(void); + +void func_80184D24(void *a0) { + D_801B754C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184D60); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184DE8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184EA8); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80178D40", func_80184F18); + + diff --git a/src/ov_SC06_022/ov_SC06_022_jr_801734BC.c b/src/ov_SC06_022/ov_SC06_022_jr_801734BC.c index 461965b38..4b0a14abb 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_801734BC.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_801734BC.c @@ -3084,1558 +3084,3 @@ void func_80178D18(void) { D_801E226C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E1F0C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E1F0C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E1F0C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E1F0C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E1F34; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E1F34 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E1EF0; - -s32 func_8017A3B0(void) { - switch (D_801E1EF0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E1F2C; -extern short D_801E1F28; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E1F2C) { - case 0: - func_800D0CA0(1); - D_801E1F2C = D_801E1F2C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E1F28; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E1F2C = D_801E1F2C + 1; - if (D_801E1F2C < 0x1E) { - return 0; - } - D_801E1F2C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E1F6C; - extern s16 D_801E1F6E; - extern s16 D_801E1F70; - extern s16 D_801E1F64; - extern s16 D_801E1F66; - extern s16 D_801E1F68; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E1F6C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E1F6E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E1F70, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E1F64, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E1F66, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E1F68, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E1EF4; -extern u16 D_801E1F74; -extern u16 D_801E1F76; -extern u16 D_801E1F78; -extern s16 D_801E21F8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E21F8 = 0; - D_801E1EF4 = 0; - D_801E1F74 = D_80126B5E; - D_801E1F76 = D_80126B62; - D_801E1F78 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190C58[]; - extern s16 D_801E1F6C; - extern s16 D_801E1F64; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190C58[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190C58[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E1F6C; - s16 *p78C = &D_801E1F64; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E21F8 = 1; - D_801E1EF4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E1F14; - extern SV4_8017B368 D_801E1F1C; - extern s16 D_801E1F6C; - extern s16 D_801E1F64; - extern u16 D_80190C58; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E1F14; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E1F1C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190C58)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190C58)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E1F6C) = loc0; - (*(SV4_8017B368 *)&D_801E1F64) = loc1; - D_801E21F8 = 1; - D_801E1EF4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190C58[]; - extern s16 D_801E1F6C; - extern s16 D_801E1F6E; - extern s16 D_801E1F70; - extern s16 D_801E1F64; - extern s16 D_801E1F66; - extern s16 D_801E1F68; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190C58[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190C58[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E1F6C; - s16 *p78C = &D_801E1F64; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E1F6E; - v798 = D_801E1F70; - v78C = *p78C; - v78E = D_801E1F66; - v790 = D_801E1F68; - __asm__ __volatile__(""); - D_801E21F8 = 1; - D_801E1EF4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1EF4; -extern s16 D_801E1F6C; -extern s16 D_801E1F6E; -extern s16 D_801E1F70; -extern s16 D_801E1F64; -extern s16 D_801E1F66; -extern s16 D_801E1F68; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E1EF4 = 0; - D_801E1F6C = (s16) D_80114F30; - D_801E1F6E = (s16) D_80114F34; - D_801E1F70 = (s16) D_80114F38; - D_801E1F64 = (s16) D_80114F24; - D_801E1F66 = (s16) D_80114F28; - D_801E1F68 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E1F84; -extern s16 D_801E1F86; -extern s16 D_801E1F88; -extern s16 D_801E1F8C; -extern s16 D_801E1F8E; -extern s16 D_801E1F90; - -void func_8017B824(void) { - D_801E1F84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E1F86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E1F88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E1F8C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E1F8E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E1F90 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E1F84; -extern s16 D_801E1F86; -extern s16 D_801E1F88; -extern s16 D_801E1F8C; -extern s16 D_801E1F8E; -extern s16 D_801E1F90; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E1F84; - D_80114F34 = D_801E1F86; - D_80114F38 = D_801E1F88; - D_80114F24 = D_801E1F8C; - D_80114F28 = D_801E1F8E; - D_80114F2C = D_801E1F90; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E1F6C), src[8..15] -> (*(S8_8017B8E8 *)&D_801E1F64) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E1F6C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E1F64) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E1F74; -extern u16 D_801E1F76; -extern u16 D_801E1F78; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1EF4; -extern short D_801E1F7C; -extern short D_801E1F7E; -extern short D_801E1F80; -extern s16 D_801E1F6C; -extern s16 D_801E1F6E; -extern s16 D_801E1F70; -extern s16 D_801E1F64; -extern s16 D_801E1F66; -extern s16 D_801E1F68; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E1F74); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E1F76); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E1F78); - (*(s16 *)&D_801E1F7C) = buf[0]; - (*(s16 *)&D_801E1F7E) = buf[1]; - (*(s16 *)&D_801E1F80) = buf[2]; - D_801E1F6C = D_80114F30 + buf[0]; - D_801E1EF4 = 0; - D_801E1F6E = D_80114F34 + buf[1]; - D_801E1F70 = D_80114F38 + buf[2]; - D_801E1F64 = D_80114F24 + buf[0]; - D_801E1F66 = D_80114F28 + buf[1]; - D_801E1F68 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E1F14; -extern SV4 D_801E1F1C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E1F1C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E1F14 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E1F1C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E1F1C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E1F14) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E1F1C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E1F3C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E1F3C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E1EF4; -extern s16 D_801E21F8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E1EF4 = D_801E1EF4 + 1; - if (D_801E1EF4 >= 0x1F) { - D_801E21F8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E1EF4; -extern s16 D_801E21F8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1EF4 = D_801E1EF4 + 1; - if (0x18 < D_801E1EF4) { - func_8012A4BC(); - D_801E21F8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E1EF4; -extern void (*D_801E1F38)(void); -extern short D_801E1F7C; -extern short D_801E1F7E; -extern short D_801E1F80; -extern s16 D_801E21F8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1EF4 = D_801E1EF4 + 1; - if (D_801E1EF4 >= 0x19) { - if (D_801E1F38 != 0) { - (*D_801E1F38)(); - } else { - D_80114F30 = D_80114F30 + D_801E1F7C; - D_80114F34 = D_80114F34 + D_801E1F7E; - D_80114F38 = D_80114F38 + D_801E1F80; - D_80114F24 = D_80114F24 + D_801E1F7C; - D_80114F28 = D_80114F28 + D_801E1F7E; - D_80114F2C = D_80114F2C + D_801E1F80; - func_8012A4BC(); - } - D_801E21F8 = 0; - } -} - - - -extern void (*D_80190CF8[])(void); - -void func_8017BE60(void *a0) { - D_80190CF8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017CDE4); - - -extern void (*D_80190DDC[])(void); - -void func_8017CF14(void *a0) { - D_80190DDC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017CF50); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CF94(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -extern void (*D_80190DE4[])(void); - -void func_8017CFB8(void *a0) { - D_80190DE4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017CFF4); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D038(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80190DEC[])(void); - -void func_8017D05C(void *a0) { - D_80190DEC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D098); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D0D8(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D154(void) { - func_800D1EBC(); - } - - - -extern void (*D_80190DF8[])(void); - -void func_8017D174(void *a0) { - D_80190DF8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D1B0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D224); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D24C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D274); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D29C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D348); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D414); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D454); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D4D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D518); - - -extern void (*D_80190E20[])(void); - -void func_8017D59C(void *a0) { - D_80190E20[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D5D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D6E0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D7CC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D8D4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017D9C0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017DB58); - -extern void func_8013B7F4(s32 arg0); -extern s32 D_80190E40[]; - -void func_8017DB74(int param_1) -{ - ((int (*)(int,int))func_8013B7F4)(D_80190E40[param_1],0); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017DBA4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017DC0C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017DCA4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017DF28); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E104); - -void func_8017E2A8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E2B0); - - -extern void (*D_80190F7C[])(void); - -void func_8017E2F4(void *a0) { - D_80190F7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E330); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E3C8); - -extern void (*D_80190F84[])(void); - -void func_8017E40C(void *a0) { - D_80190F84[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E448); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E87C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E920); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017E998); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017EA6C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017EBE8); - -void func_8017EFD8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017EFE0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F0D4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F1C0); - - -extern void (*D_80191058[])(void); - -void func_8017F2D0(void *a0) { - D_80191058[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F30C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F414); - -extern s32 func_8017F0D4(void); - void func_8017F4B0(void) { - func_8017F0D4(); - } - - - -extern void (*D_80191070[])(void); - -void func_8017F4D0(void *a0) { - D_80191070[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_80191060; - -void func_8017F50C(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80191060 | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -void func_8017F588(void) { -} - -s32 func_8017F590(void) { - return 0x7F; - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F598); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F5F8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F604); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F684); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F704); - -void func_8017F7FC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F804); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F830); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F85C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017F9FC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017FA1C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017FAFC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017FB9C); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017FED0(s32 a0) { - *(s32 *)(a0 + 0x1c) = 0x20; - ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x4); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8017FEF8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", listCdBuffer); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801800AC(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801800CC); - - -extern void (*D_801AD3B4[])(void); - -void func_80180310(void *a0) { - D_801AD3B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018034C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180424); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801804BC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180680); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180700); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180838); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801809D4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801809F4); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80180CB0(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180CD0); - - -extern void (*D_801AD420[])(void); - -void func_80180EA4(void *a0) { - D_801AD420[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180EE0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180F30); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80180FB4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801810C0); - - -extern void (*D_801AD44C[])(void); - -void func_80181168(void *a0) { - D_801AD44C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801811A4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801812F8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181394); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801AD508[]; - -extern s32 func_8012B414(s32 a0); - -void func_801813C8(int param_1) -{ - D_801AD508[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012B414)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181418); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181468); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181550); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801815CC); - -void func_8018165C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181664); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181744); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181780); - -void func_801817D0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801817D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801818E4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018199C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181A4C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181A94); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181B04); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181D20); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181D70); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181E38); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181FA4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80181FE4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018216C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801821A0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182228); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182274); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801823B0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182404); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182554); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182594); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182610); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182890); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801828D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182998); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801829D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182B3C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182B90); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182CA0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80182D08); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183188); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801832FC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801833B4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183494); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801834D4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183554); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018358C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183860); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801839D8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183A20); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183CC0); - - -extern void func_801850CC(void); - void func_80183E3C(s32 arg0) { - if (*(s16 *)((char *)arg0 + 0x98) == 0) { - ((void (*)(void))func_801850CC)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183E6C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80183FEC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184304); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184768); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801847CC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184818); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184894); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801848E4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184928); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184970); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801849BC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184A28); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184E14); - -extern void func_80187EF4(s32 arg0, s32 arg1); - void func_80184F68(s32 arg0) { - func_80187EF4(arg0, 0x9B7); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80184F88); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018500C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801850CC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801851C4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801852E4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801853B4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80185578); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801856F0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80185750); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80185878); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801858D8); - - -extern void (*D_801BD34C[])(void); - -void func_801859B8(void *a0) { - D_801BD34C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801859F4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80185B80); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80185E64); - - -extern void (*D_801BD4A4[])(void); - -void func_8018611C(void *a0) { - D_801BD4A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186158); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801862C8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186330); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186588); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801865E8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186720); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186744); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186B94); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186C30); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186DE8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186E24); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80186EA4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187094); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187318); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801873B0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187414); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187460); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801874E0); - - -extern void (*D_801BD4D8[])(void); - -void func_80187548(void *a0) { - D_801BD4D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187584); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801879E8); - - -extern void (*D_801BD4F8[])(void); - -void func_80187A8C(void *a0) { - D_801BD4F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187AC8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187CBC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187DF8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80187EF4); - - -extern void (*D_801BD504[])(void); - -void func_80188060(void *a0) { - D_801BD504[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018809C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018814C); - - -extern s32 D_801E20F8; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80188204(s32 a0, s32 a1) { - D_801E20F8 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188234); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188478); - - -extern void (*D_801D5344[])(void); - -void func_80188718(void *a0) { - D_801D5344[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188754); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188964); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188D68); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80188EDC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018908C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80189318); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801897DC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_801899AC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80189B9C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_80189EB4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018A0AC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018A4F4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018A704); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018AB48); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018AD58); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018AFDC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018AFFC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B0FC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B19C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B25C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B2F4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B314); - -void func_8018B404(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B40C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B4E0); - -extern void func_8012B370(int a0); - void func_8018B5A0(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B5C0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B5E0); - -void func_8018B6D4(void) { -} - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B6DC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B7D0); - -extern void func_8012B370(int a0); - void func_8018B890(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B8B0); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018B9E8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018BBBC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018BD68); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018BF50); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018C28C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018C534); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018C664); - - -extern void (*D_801DD6B4[])(void); - -void func_8018C73C(void *a0) { - D_801DD6B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018C778); - - -extern void (*D_801DD6D4[])(void); - -void func_8018C8EC(void *a0) { - D_801DD6D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018C928); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8018B9E8(void); - -void func_8018C9B0(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_8018B9E8)(a0); -} - - -extern void func_8018BBBC(void); - void func_8018C9E8(s32 *param_1) { - *(short *)(*(int *)((char *)param_1 + 0x20) + 0x10) = 0xe00; - ((void (*)(void))func_8018BBBC)(); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CA10); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CA44); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CA90); - -extern void func_8018B9E8(void); - void func_8018CB7C(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; - ((void (*)(void))func_8018B9E8)(); - } - - - - -extern void func_8018B9E8(void); - void func_8018CBB0(s32 a0) { - s32 v0; - v0 = 0xc; - *(s8 *)(a0 + 0xc1) = v0; - *(s32 *)(a0 + 0x1c) = 0x3c; - ((void (*)(void))func_8018B9E8)(); - } - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CBDC); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CC68); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CD90); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CEC4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CF24); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018CFE4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018D0B8); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_801734BC", func_8018D1B0); - diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80178D40.c b/src/ov_SC06_022/ov_SC06_022_jr_80178D40.c new file mode 100644 index 000000000..b3d9ed745 --- /dev/null +++ b/src/ov_SC06_022/ov_SC06_022_jr_80178D40.c @@ -0,0 +1,5004 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80190500[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E1260; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801904F4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80190538[]; +extern unsigned short D_80190540[]; +extern unsigned short D_80190548[]; +extern unsigned char D_801E1268[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E1260; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80190550[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E139C; +extern M2C_UNK D_801E13A0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E1328; +extern void (*D_80190580[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E13A4[]; +extern u8 D_801E13AC[]; +extern u8 D_801E135C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80190588[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801905A4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801905AC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80190614[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801905B8; +extern u8 D_801905C4; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80190648[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80190650[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801906A4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801906D8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801906C8[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801906F4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8019076C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80190774[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8019077C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80190784[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8019078C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80190794[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801907A0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801907AC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801907B8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801907C8[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801907D8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801907E0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801907E8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801907F0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801907F8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80190800[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80190808[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80190810[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80190818[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80190820[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80190828[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80190830[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80190838[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80190840[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80190848[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80190850[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80190858[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80190860[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80190868[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80190870[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80190878[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80190880[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80190888[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801908CC[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80190890; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801908FC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80190938[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80190990[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801909A0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801909A8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80190B10[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80190B1C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801E07F0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E21F8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E1AE0; +extern short D_801E226C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E226C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E226C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E1AE0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E226C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E21C8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E21C8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E226C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E226C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E1F3C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E1AE4; + extern s32 D_801E1EF8; + extern s16 D_801E1EFC; + extern s16 D_801E1F00; + extern s16 D_801E1F04; + extern s16 D_801E1F08; + extern s32 D_801E1F10; + extern s32 D_801E1F14; + extern s32 D_801E1F24; + extern s16 D_801E1F28; + extern s16 D_801E1F2C; + extern s32 D_801E1F30; + extern s32 D_801E1F38; + extern s32 D_801E1F3C[10]; + extern s32 D_801E2110; + extern s16 D_801E21C8; + extern s32 D_801E21F4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E21C8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E1EF8); + D_801E1EF8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1F04, D_801E1F08 ? 0x48 : 0x40); + (*(s16*)&D_801E226C) = 2; + break; + case 0: + func_80179B28(D_801E1EF8); + D_801E1EF8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1EFC, D_801E1F00 ? 0x48 : 0x40); + (*(s16*)&D_801E226C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E2110 != 0) { + func_80179B28(D_801E1EF8); + D_801E1EF8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E1EFC, D_801E1F00 ? 0x48 : 0x40); + (*(s16*)&D_801E226C) = 1; + } else { + (*(s16*)&D_801E226C) = 3; + } + break; + case 0x32: + func_80179B28(D_801E1EF8); + D_801E1EF8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E1EFC, + D_801E1F00 ? 0x48 : 0x40); + (*(s16*)&D_801E226C) = 1; + break; + case 2: + func_80179B28(D_801E1EF8); + if (D_801E1F10 != 0) { + D_801E1AE0 = D_801E1F10; + D_801E1F10 = 0; + (*(s16*)&D_801E226C) = 3; + return; + } + (*(s16*)&D_801E226C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E226C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E226C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E226C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E226C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E226C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E226C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E226C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E226C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E226C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E226C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E226C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x1B: + D_801E1F30 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E226C) = 4; + D_801E1AE4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E226C) = 5; + D_801E1F24 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E1F24 = (s32)func_8017A3B0; + (*(s16*)&D_801E226C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x24: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E226C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E226C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E226C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E226C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E226C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E226C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E226C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E226C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E226C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1F14); + (*(s16*)&D_801E226C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1F14); + (*(s16*)&D_801E226C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1F14); + (*(s16*)&D_801E226C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1F14); + (*(s16*)&D_801E226C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + break; + case 0x4E: + D_801E1F38 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x2B: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E226C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E21F4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E226C) = 3; + break; + case 0x34: + (*(s16*)&D_801E226C) = 3; + D_801E1AE0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E1F10 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E226C) = 3; + D_801E1AE0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E226C) = 3; + D_801E1AE0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E1AE0 = *(s32 *)(D_801E1AE0 + 4); + return; + case 0x37: + (*(s16*)&D_801E226C) = 3; + D_801E1EFC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1F00 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E226C) = 3; + D_801E1F04 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1F08 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E226C) = 3; + D_801E1EFC = w1; + D_801E1F00 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E226C) = 3; + D_801E1F04 = w2; + D_801E1F08 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + case 0x43: + D_801E1F24 = (s32)func_8017A3D8; + D_801E1F2C = 0; + (*(s16*)&D_801E226C) = 5; + D_801E1F28 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E226C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E226C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E226C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E1F3C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E226C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E1F3C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E226C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E1F3C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E226C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E1F3C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E226C) = 3; + break; + default: + break; + } +Lend: + D_801E1AE0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E1F0C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E1F0C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E1F0C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E1F0C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E1F34; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E1F34 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E1EF0; + +s32 func_8017A3B0(void) { + switch (D_801E1EF0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E1F2C; +extern short D_801E1F28; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E1F2C) { + case 0: + func_800D0CA0(1); + D_801E1F2C = D_801E1F2C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E1F28; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E1F2C = D_801E1F2C + 1; + if (D_801E1F2C < 0x1E) { + return 0; + } + D_801E1F2C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E1F6C; + extern s16 D_801E1F6E; + extern s16 D_801E1F70; + extern s16 D_801E1F64; + extern s16 D_801E1F66; + extern s16 D_801E1F68; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E1F6C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E1F6E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E1F70, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E1F64, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E1F66, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E1F68, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E1EF4; +extern u16 D_801E1F74; +extern u16 D_801E1F76; +extern u16 D_801E1F78; +extern s16 D_801E21F8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E21F8 = 0; + D_801E1EF4 = 0; + D_801E1F74 = D_80126B5E; + D_801E1F76 = D_80126B62; + D_801E1F78 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190C58[]; + extern s16 D_801E1F6C; + extern s16 D_801E1F64; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190C58[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190C58[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E1F6C; + s16 *p78C = &D_801E1F64; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E21F8 = 1; + D_801E1EF4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E1F14; + extern SV4_8017B368 D_801E1F1C; + extern s16 D_801E1F6C; + extern s16 D_801E1F64; + extern u16 D_80190C58; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E1F14; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E1F1C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80190C58)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80190C58)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E1F6C) = loc0; + (*(SV4_8017B368 *)&D_801E1F64) = loc1; + D_801E21F8 = 1; + D_801E1EF4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80190C58[]; + extern s16 D_801E1F6C; + extern s16 D_801E1F6E; + extern s16 D_801E1F70; + extern s16 D_801E1F64; + extern s16 D_801E1F66; + extern s16 D_801E1F68; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80190C58[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80190C58[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E1F6C; + s16 *p78C = &D_801E1F64; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E1F6E; + v798 = D_801E1F70; + v78C = *p78C; + v78E = D_801E1F66; + v790 = D_801E1F68; + __asm__ __volatile__(""); + D_801E21F8 = 1; + D_801E1EF4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1EF4; +extern s16 D_801E1F6C; +extern s16 D_801E1F6E; +extern s16 D_801E1F70; +extern s16 D_801E1F64; +extern s16 D_801E1F66; +extern s16 D_801E1F68; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E1EF4 = 0; + D_801E1F6C = (s16) D_80114F30; + D_801E1F6E = (s16) D_80114F34; + D_801E1F70 = (s16) D_80114F38; + D_801E1F64 = (s16) D_80114F24; + D_801E1F66 = (s16) D_80114F28; + D_801E1F68 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E1F84; +extern s16 D_801E1F86; +extern s16 D_801E1F88; +extern s16 D_801E1F8C; +extern s16 D_801E1F8E; +extern s16 D_801E1F90; + +void func_8017B824(void) { + D_801E1F84 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E1F86 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E1F88 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E1F8C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E1F8E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E1F90 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E1F84; +extern s16 D_801E1F86; +extern s16 D_801E1F88; +extern s16 D_801E1F8C; +extern s16 D_801E1F8E; +extern s16 D_801E1F90; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E1F84; + D_80114F34 = D_801E1F86; + D_80114F38 = D_801E1F88; + D_80114F24 = D_801E1F8C; + D_80114F28 = D_801E1F8E; + D_80114F2C = D_801E1F90; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E1F6C), src[8..15] -> (*(S8_8017B8E8 *)&D_801E1F64) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E1F6C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E1F64) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E1F74; +extern u16 D_801E1F76; +extern u16 D_801E1F78; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1EF4; +extern short D_801E1F7C; +extern short D_801E1F7E; +extern short D_801E1F80; +extern s16 D_801E1F6C; +extern s16 D_801E1F6E; +extern s16 D_801E1F70; +extern s16 D_801E1F64; +extern s16 D_801E1F66; +extern s16 D_801E1F68; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E1F74); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E1F76); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E1F78); + (*(s16 *)&D_801E1F7C) = buf[0]; + (*(s16 *)&D_801E1F7E) = buf[1]; + (*(s16 *)&D_801E1F80) = buf[2]; + D_801E1F6C = D_80114F30 + buf[0]; + D_801E1EF4 = 0; + D_801E1F6E = D_80114F34 + buf[1]; + D_801E1F70 = D_80114F38 + buf[2]; + D_801E1F64 = D_80114F24 + buf[0]; + D_801E1F66 = D_80114F28 + buf[1]; + D_801E1F68 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E1F14; +extern SV4 D_801E1F1C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E1F1C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E1F14 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E1F1C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E1F1C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E1F14) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E1F1C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E1F3C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E1F3C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E1EF4; +extern s16 D_801E21F8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E1EF4 = D_801E1EF4 + 1; + if (D_801E1EF4 >= 0x1F) { + D_801E21F8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E1EF4; +extern s16 D_801E21F8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1EF4 = D_801E1EF4 + 1; + if (0x18 < D_801E1EF4) { + func_8012A4BC(); + D_801E21F8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E1EF4; +extern void (*D_801E1F38)(void); +extern short D_801E1F7C; +extern short D_801E1F7E; +extern short D_801E1F80; +extern s16 D_801E21F8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1EF4 = D_801E1EF4 + 1; + if (D_801E1EF4 >= 0x19) { + if (D_801E1F38 != 0) { + (*D_801E1F38)(); + } else { + D_80114F30 = D_80114F30 + D_801E1F7C; + D_80114F34 = D_80114F34 + D_801E1F7E; + D_80114F38 = D_80114F38 + D_801E1F80; + D_80114F24 = D_80114F24 + D_801E1F7C; + D_80114F28 = D_80114F28 + D_801E1F7E; + D_80114F2C = D_80114F2C + D_801E1F80; + func_8012A4BC(); + } + D_801E21F8 = 0; + } +} + + + +extern void (*D_80190CF8[])(void); + +void func_8017BE60(void *a0) { + D_80190CF8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017CDE4); + + +extern void (*D_80190DDC[])(void); + +void func_8017CF14(void *a0) { + D_80190DDC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017CF50); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CF94(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +extern void (*D_80190DE4[])(void); + +void func_8017CFB8(void *a0) { + D_80190DE4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017CFF4); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D038(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80190DEC[])(void); + +void func_8017D05C(void *a0) { + D_80190DEC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D098); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D0D8(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D154(void) { + func_800D1EBC(); + } + + + +extern void (*D_80190DF8[])(void); + +void func_8017D174(void *a0) { + D_80190DF8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D1B0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D224); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D24C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D274); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D29C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D348); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D414); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D454); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D4D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D518); + + +extern void (*D_80190E20[])(void); + +void func_8017D59C(void *a0) { + D_80190E20[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D5D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D6E0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D7CC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D8D4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017D9C0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017DB58); + +extern void func_8013B7F4(s32 arg0); +extern s32 D_80190E40[]; + +void func_8017DB74(int param_1) +{ + ((int (*)(int,int))func_8013B7F4)(D_80190E40[param_1],0); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017DBA4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017DC0C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017DCA4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017DF28); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E104); + +void func_8017E2A8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E2B0); + + +extern void (*D_80190F7C[])(void); + +void func_8017E2F4(void *a0) { + D_80190F7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E330); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E3C8); + +extern void (*D_80190F84[])(void); + +void func_8017E40C(void *a0) { + D_80190F84[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E448); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E87C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E920); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017E998); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017EA6C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017EBE8); + +void func_8017EFD8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017EFE0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F0D4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F1C0); + + +extern void (*D_80191058[])(void); + +void func_8017F2D0(void *a0) { + D_80191058[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F30C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F414); + +extern s32 func_8017F0D4(void); + void func_8017F4B0(void) { + func_8017F0D4(); + } + + + +extern void (*D_80191070[])(void); + +void func_8017F4D0(void *a0) { + D_80191070[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_80191060; + +void func_8017F50C(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_80191060 | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + + +void func_8017F588(void) { +} + +s32 func_8017F590(void) { + return 0x7F; + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F598); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F5F8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F604); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F684); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F704); + +void func_8017F7FC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F804); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F830); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F85C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017F9FC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017FA1C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017FAFC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017FB9C); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017FED0(s32 a0) { + *(s32 *)(a0 + 0x1c) = 0x20; + ((void (*)(void *, s32))func_8012AD44)((void *)a0, 0x4); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8017FEF8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", listCdBuffer); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801800AC(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801800CC); + + +extern void (*D_801AD3B4[])(void); + +void func_80180310(void *a0) { + D_801AD3B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018034C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180424); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801804BC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180680); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180700); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180838); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801809D4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801809F4); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180CB0(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180CD0); + + +extern void (*D_801AD420[])(void); + +void func_80180EA4(void *a0) { + D_801AD420[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180EE0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180F30); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80180FB4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801810C0); + + +extern void (*D_801AD44C[])(void); + +void func_80181168(void *a0) { + D_801AD44C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801811A4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801812F8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181394); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801AD508[]; + +extern s32 func_8012B414(s32 a0); + +void func_801813C8(int param_1) +{ + D_801AD508[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012B414)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181418); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181468); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181550); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801815CC); + +void func_8018165C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181664); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181744); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181780); + +void func_801817D0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801817D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801818E4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018199C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181A4C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181A94); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181B04); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181D20); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181D70); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181E38); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181FA4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80181FE4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018216C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801821A0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182228); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182274); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801823B0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182404); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182554); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182594); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182610); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182890); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801828D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182998); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801829D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182B3C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182B90); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182CA0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80182D08); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183188); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801832FC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801833B4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183494); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801834D4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183554); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018358C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183860); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801839D8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183A20); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183CC0); + + +extern void func_801850CC(void); + void func_80183E3C(s32 arg0) { + if (*(s16 *)((char *)arg0 + 0x98) == 0) { + ((void (*)(void))func_801850CC)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183E6C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80183FEC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184304); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184768); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801847CC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184818); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184894); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801848E4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184928); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184970); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801849BC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184A28); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184E14); + +extern void func_80187EF4(s32 arg0, s32 arg1); + void func_80184F68(s32 arg0) { + func_80187EF4(arg0, 0x9B7); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80184F88); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018500C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801850CC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801851C4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801852E4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801853B4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80185578); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801856F0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80185750); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80185878); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801858D8); + + +extern void (*D_801BD34C[])(void); + +void func_801859B8(void *a0) { + D_801BD34C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801859F4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80185B80); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80185E64); + + +extern void (*D_801BD4A4[])(void); + +void func_8018611C(void *a0) { + D_801BD4A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186158); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801862C8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186330); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186588); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801865E8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186720); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186744); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186B94); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186C30); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186DE8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186E24); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80186EA4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187094); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187318); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801873B0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187414); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187460); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801874E0); + + +extern void (*D_801BD4D8[])(void); + +void func_80187548(void *a0) { + D_801BD4D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187584); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801879E8); + + +extern void (*D_801BD4F8[])(void); + +void func_80187A8C(void *a0) { + D_801BD4F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187AC8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187CBC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187DF8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80187EF4); + + +extern void (*D_801BD504[])(void); + +void func_80188060(void *a0) { + D_801BD504[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018809C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018814C); + + +extern s32 D_801E20F8; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80188204(s32 a0, s32 a1) { + D_801E20F8 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188234); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188478); + + +extern void (*D_801D5344[])(void); + +void func_80188718(void *a0) { + D_801D5344[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188754); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188964); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188D68); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80188EDC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018908C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80189318); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801897DC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_801899AC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80189B9C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_80189EB4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018A0AC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018A4F4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018A704); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018AB48); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018AD58); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018AFDC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018AFFC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B0FC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B19C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B25C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B2F4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B314); + +void func_8018B404(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B40C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B4E0); + +extern void func_8012B370(int a0); + void func_8018B5A0(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B5C0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B5E0); + +void func_8018B6D4(void) { +} + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B6DC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B7D0); + +extern void func_8012B370(int a0); + void func_8018B890(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B8B0); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018B9E8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018BBBC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018BD68); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018BF50); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018C28C); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018C534); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018C664); + + +extern void (*D_801DD6B4[])(void); + +void func_8018C73C(void *a0) { + D_801DD6B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018C778); + + +extern void (*D_801DD6D4[])(void); + +void func_8018C8EC(void *a0) { + D_801DD6D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018C928); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8018B9E8(void); + +void func_8018C9B0(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_8018B9E8)(a0); +} + + +extern void func_8018BBBC(void); + void func_8018C9E8(s32 *param_1) { + *(short *)(*(int *)((char *)param_1 + 0x20) + 0x10) = 0xe00; + ((void (*)(void))func_8018BBBC)(); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CA10); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CA44); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CA90); + +extern void func_8018B9E8(void); + void func_8018CB7C(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; + ((void (*)(void))func_8018B9E8)(); + } + + + + +extern void func_8018B9E8(void); + void func_8018CBB0(s32 a0) { + s32 v0; + v0 = 0xc; + *(s8 *)(a0 + 0xc1) = v0; + *(s32 *)(a0 + 0x1c) = 0x3c; + ((void (*)(void))func_8018B9E8)(); + } + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CBDC); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CC68); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CD90); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CEC4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CF24); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018CFE4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018D0B8); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80178D40", func_8018D1B0); + + diff --git a/src/ov_SC06_024/ov_SC06_024_jr_801734BC.c b/src/ov_SC06_024/ov_SC06_024_jr_801734BC.c index fcf586dfa..5ddd3f904 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_801734BC.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_801734BC.c @@ -3084,1622 +3084,3 @@ void func_80178D18(void) { D_801E1964 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E108C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801E108C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801E108C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801E108C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801E10B4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801E10B4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801E1070; - -s32 func_8017A3B0(void) { - switch (D_801E1070) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801E10AC; -extern short D_801E10A8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801E10AC) { - case 0: - func_800D0CA0(1); - D_801E10AC = D_801E10AC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801E10A8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801E10AC = D_801E10AC + 1; - if (D_801E10AC < 0x1E) { - return 0; - } - D_801E10AC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801E10EC; - extern s16 D_801E10EE; - extern s16 D_801E10F0; - extern s16 D_801E10E4; - extern s16 D_801E10E6; - extern s16 D_801E10E8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E10EC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E10EE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E10F0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E10E4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E10E6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E10E8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801E1074; -extern u16 D_801E10F4; -extern u16 D_801E10F6; -extern u16 D_801E10F8; -extern s16 D_801E18F0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E18F0 = 0; - D_801E1074 = 0; - D_801E10F4 = D_80126B5E; - D_801E10F6 = D_80126B62; - D_801E10F8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80193130[]; - extern s16 D_801E10EC; - extern s16 D_801E10E4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80193130[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80193130[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E10EC; - s16 *p78C = &D_801E10E4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E18F0 = 1; - D_801E1074 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801E1094; - extern SV4_8017B368 D_801E109C; - extern s16 D_801E10EC; - extern s16 D_801E10E4; - extern u16 D_80193130; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801E1094; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801E109C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80193130)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80193130)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801E10EC) = loc0; - (*(SV4_8017B368 *)&D_801E10E4) = loc1; - D_801E18F0 = 1; - D_801E1074 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80193130[]; - extern s16 D_801E10EC; - extern s16 D_801E10EE; - extern s16 D_801E10F0; - extern s16 D_801E10E4; - extern s16 D_801E10E6; - extern s16 D_801E10E8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80193130[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80193130[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801E10EC; - s16 *p78C = &D_801E10E4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801E10EE; - v798 = D_801E10F0; - v78C = *p78C; - v78E = D_801E10E6; - v790 = D_801E10E8; - __asm__ __volatile__(""); - D_801E18F0 = 1; - D_801E1074 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1074; -extern s16 D_801E10EC; -extern s16 D_801E10EE; -extern s16 D_801E10F0; -extern s16 D_801E10E4; -extern s16 D_801E10E6; -extern s16 D_801E10E8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801E1074 = 0; - D_801E10EC = (s16) D_80114F30; - D_801E10EE = (s16) D_80114F34; - D_801E10F0 = (s16) D_80114F38; - D_801E10E4 = (s16) D_80114F24; - D_801E10E6 = (s16) D_80114F28; - D_801E10E8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801E1104; -extern s16 D_801E1106; -extern s16 D_801E1108; -extern s16 D_801E110C; -extern s16 D_801E110E; -extern s16 D_801E1110; - -void func_8017B824(void) { - D_801E1104 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801E1106 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801E1108 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801E110C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801E110E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801E1110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801E1104; -extern s16 D_801E1106; -extern s16 D_801E1108; -extern s16 D_801E110C; -extern s16 D_801E110E; -extern s16 D_801E1110; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801E1104; - D_80114F34 = D_801E1106; - D_80114F38 = D_801E1108; - D_80114F24 = D_801E110C; - D_80114F28 = D_801E110E; - D_80114F2C = D_801E1110; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801E10EC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E10E4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801E10EC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801E10E4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801E10F4; -extern u16 D_801E10F6; -extern u16 D_801E10F8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801E1074; -extern short D_801E10FC; -extern short D_801E10FE; -extern short D_801E1100; -extern s16 D_801E10EC; -extern s16 D_801E10EE; -extern s16 D_801E10F0; -extern s16 D_801E10E4; -extern s16 D_801E10E6; -extern s16 D_801E10E8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E10F4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E10F6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E10F8); - (*(s16 *)&D_801E10FC) = buf[0]; - (*(s16 *)&D_801E10FE) = buf[1]; - (*(s16 *)&D_801E1100) = buf[2]; - D_801E10EC = D_80114F30 + buf[0]; - D_801E1074 = 0; - D_801E10EE = D_80114F34 + buf[1]; - D_801E10F0 = D_80114F38 + buf[2]; - D_801E10E4 = D_80114F24 + buf[0]; - D_801E10E6 = D_80114F28 + buf[1]; - D_801E10E8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801E1094; -extern SV4 D_801E109C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E109C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801E1094 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801E109C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E109C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801E1094) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801E109C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801E10BC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801E10BC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801E1074; -extern s16 D_801E18F0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801E1074 = D_801E1074 + 1; - if (D_801E1074 >= 0x1F) { - D_801E18F0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801E1074; -extern s16 D_801E18F0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1074 = D_801E1074 + 1; - if (0x18 < D_801E1074) { - func_8012A4BC(); - D_801E18F0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801E1074; -extern void (*D_801E10B8)(void); -extern short D_801E10FC; -extern short D_801E10FE; -extern short D_801E1100; -extern s16 D_801E18F0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801E1074 = D_801E1074 + 1; - if (D_801E1074 >= 0x19) { - if (D_801E10B8 != 0) { - (*D_801E10B8)(); - } else { - D_80114F30 = D_80114F30 + D_801E10FC; - D_80114F34 = D_80114F34 + D_801E10FE; - D_80114F38 = D_80114F38 + D_801E1100; - D_80114F24 = D_80114F24 + D_801E10FC; - D_80114F28 = D_80114F28 + D_801E10FE; - D_80114F2C = D_80114F2C + D_801E1100; - func_8012A4BC(); - } - D_801E18F0 = 0; - } -} - - - -extern void (*D_801931D0[])(void); - -void func_8017BE60(void *a0) { - D_801931D0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017CDE4); - - -extern void (*D_8019327C[])(void); - -void func_8017CE2C(void *a0) { - D_8019327C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017CE68); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CEAC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017CED0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CF10(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF8C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80193290[])(void); - -void func_8017CFAC(void *a0) { - D_80193290[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017CFE8); - - -extern void (*D_8019329C[])(void); - -void func_8017D05C(void *a0) { - D_8019329C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D098); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D0D8); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_801932B4; - -void func_8017D100(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801932B4, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_801932C8; - -void func_8017D128(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801932C8, 0x1000000); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D150); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D1EC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D288); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D2C8); - - -extern void (*D_801932D4[])(void); - -void func_8017D34C(void *a0) { - D_801932D4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D388); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D474); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D550); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D63C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D7D4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D804); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017D89C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017DA9C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017DAE0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017DBFC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017E1F0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017E548); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017E61C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017E8F8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017EADC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017EC4C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017F4FC); - - -extern void (*D_801935C8[])(void); - -void func_8017F7B8(void *a0) { - D_801935C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017F7F4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FA1C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FB28); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FB84); - - -extern void (*D_801935E0[])(void); - -void func_8017FBF8(void *a0) { - D_801935E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FC34); - - -extern void func_801292C8(u8 *a0); - s32 func_8017FC8C(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_801292C8)(); - } - } - - - -extern void (*D_80193608[])(void); - -void func_8017FCC0(void *a0) { - D_80193608[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FCFC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8017FFCC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", listCdBuffer); - - -extern void (*D_8019366C[])(void); - -void func_80180104(void *a0) { - D_8019366C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180140); - -void func_801801D0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801801D8); - - -s32 func_80180218(void) { - return 127; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180220); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018036C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180594); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180724); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180894); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018090C); - - -extern void (*D_801937B4[])(void); - -void func_8018096C(void *a0) { - D_801937B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801809A8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180AA8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180B5C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180C34); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180C9C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180CE8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180D28); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180D98); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180ECC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180F2C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180F58); - -extern void (*D_801937D8[])(void); - -void func_80180FB8(void *a0) { - D_801937D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80180FF4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181068); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801811AC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181204); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181254); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801812C0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181414); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181468); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018148C); - - -extern void (*D_80193814[])(void); - -void func_801814D0(void *a0) { - D_80193814[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018150C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181658); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801816D0); - - -void func_80181700(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181714); - -extern void (*D_8019384C[])(void); - -void func_8018177C(void *a0) { - D_8019384C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801817B8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181804); - -void func_8018184C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181854); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801819B8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181D34); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80181ED4(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x1); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181EF4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80181FD4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182074); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_801823A8(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0x20; - ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801823D0); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80182584(void *arg0) { - ((void (*)(void *, int))func_8012AD44)(arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801825A4); - - -extern void (*D_801AC4F8[])(void); - -void func_801827E8(void *a0) { - D_801AC4F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182824); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801828FC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182994); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182B58); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182BD8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182D10); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80182EAC(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80182ECC); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80183188(s32 arg0) { - ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801831A8); - - -extern void (*D_801AC564[])(void); - -void func_8018337C(void *a0) { - D_801AC564[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801833B8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183408); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018348C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183598); - - -extern void (*D_801AC590[])(void); - -void func_80183640(void *a0) { - D_801AC590[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018367C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801837D0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018386C); - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801AC64C[]; - -extern s32 func_8012B414(s32 a0); - -void func_801838A0(int param_1) -{ - D_801AC64C[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_8012B414)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801838F0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183940); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183A28); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183AA4); - -void func_80183B34(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183B3C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183C1C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183C58); - -void func_80183CA8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183CB0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183DBC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183E74); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183F24); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183F6C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80183FDC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801841F8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184248); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184310); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018447C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801844BC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184644); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184678); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184700); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018474C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184888); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801848DC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184A2C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184A6C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184AE8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184D68); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184DB0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184E70); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80184EB0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185014); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185068); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185178); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801851E0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185660); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801857D4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018588C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018596C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801859AC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185A2C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185A64); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185D38); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185EB0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80185EF8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186198); - -extern void func_801875A4(void); - void func_80186314(void *a0) { - if (*(s16 *)((s32)a0 + 0x98) == 0) { - ((void (*)(void))func_801875A4)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186344); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801864C4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801867DC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186C40); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186CA4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186CF0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186D6C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186DBC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186E00); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186E48); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186E94); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80186F00); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801872EC); - -extern void func_8018A3CC(s32 arg0, s32 arg1); - void func_80187440(s32 arg0) { - func_8018A3CC(arg0, 0x9B7); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187460); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801874E4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801875A4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018769C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801877BC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018788C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187A50); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187BC8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187C28); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187D50); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187DB0); - - -extern void (*D_801BC490[])(void); - -void func_80187E90(void *a0) { - D_801BC490[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80187ECC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188058); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018833C); - - -extern void (*D_801BC5E8[])(void); - -void func_801885F4(void *a0) { - D_801BC5E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188630); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801887A0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188808); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188A60); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188AC0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188BF8); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80188C1C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018906C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189108); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801892C0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801892FC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018937C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018956C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801897F0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189888); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801898EC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189938); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_801899B8); - - -extern void (*D_801BC61C[])(void); - -void func_80189A20(void *a0) { - D_801BC61C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189A5C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189EC0); - - -extern void (*D_801BC63C[])(void); - -void func_80189F64(void *a0) { - D_801BC63C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_80189FA0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A194); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A2D0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A3CC); - - -extern void (*D_801BC648[])(void); - -void func_8018A538(void *a0) { - D_801BC648[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A574); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A624); - - -extern s32 D_801E17F0; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_8018A6DC(s32 a0, s32 a1) { - D_801E17F0 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A70C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018A950); - - -extern void (*D_801D4488[])(void); - -void func_8018ABF0(void *a0) { - D_801D4488[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018AC2C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018AE3C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018B240); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018B3B4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018B564); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018B7F0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018BCB4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018BE84); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018C074); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018C38C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018C584); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018C9CC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018CBDC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D020); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D230); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D4B4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D4D4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D5D4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D674); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D734); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D7CC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D7EC); - -void func_8018D8DC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D8E4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018D9B8); - -extern void func_8012B370(int a0); - void func_8018DA78(void) { - ((s32 (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DA98); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DAB8); - -void func_8018DBAC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DBB4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DCA8); - -extern void func_8012B370(int a0); - void func_8018DD68(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DD88); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018DEC0); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018E094); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018E240); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018E428); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018E764); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EA0C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EB3C); - - -extern void (*D_801DC7F8[])(void); - -void func_8018EC14(void *a0) { - D_801DC7F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EC50); - - -extern void (*D_801DC818[])(void); - -void func_8018EDC4(void *a0) { - D_801DC818[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EE00); - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8018DEC0(void); - -void func_8018EE88(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_8018DEC0)(a0); -} - - -extern void func_8018E094(void); - void func_8018EEC0(s32 *param_1) { - *(short *)(*(int *)((char *)param_1 + 0x20) + 0x10) = 0xe00; - ((void (*)(void))func_8018E094)(); - } - - -extern void func_8018E094(void); - void func_8018EEE8(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(u16 *)(temp_v1 + 0x10) += 0x20; - func_8018E094(); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EF1C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018EF68); - -extern void func_8018DEC0(void); - void func_8018F054(s32 *a0) { - *(s32 *)((char *)a0 + 0x10) = *(s32 *)((char *)a0 + 0x10) >> 1; - *(s32 *)((char *)a0 + 0x18) = *(s32 *)((char *)a0 + 0x18) >> 1; - ((void (*)(void))func_8018DEC0)(); - } - - -extern void func_8018DEC0(void); - void func_8018F088(u8 *param_1) { - param_1[0xC1] = 0xC; - *(int *)(param_1 + 0x1C) = 0x3C; - ((void (*)(void))func_8018DEC0)(); - } - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F0B4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F140); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F268); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F39C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F3FC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F4BC); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F590); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801734BC", func_8018F688); - diff --git a/src/ov_SC06_024/ov_SC06_024_jr_80178D40.c b/src/ov_SC06_024/ov_SC06_024_jr_80178D40.c new file mode 100644 index 000000000..53fed6733 --- /dev/null +++ b/src/ov_SC06_024/ov_SC06_024_jr_80178D40.c @@ -0,0 +1,5068 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801929D8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801E03E0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801929CC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80192A10[]; +extern unsigned short D_80192A18[]; +extern unsigned short D_80192A20[]; +extern unsigned char D_801E03E8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801E03E0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80192A28[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801E051C; +extern M2C_UNK D_801E0520; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801E04A8; +extern void (*D_80192A58[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801E0524[]; +extern u8 D_801E052C[]; +extern u8 D_801E04DC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80192A60[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80192A7C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80192A84[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80192AEC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80192A90; +extern u8 D_80192A9C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80192B20[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80192B28[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80192B7C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80192BB0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80192BA0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80192BCC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80192C44[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80192C4C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80192C54[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80192C5C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80192C64[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80192C6C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80192C78[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80192C84[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80192C90[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80192CA0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80192CB0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80192CB8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80192CC0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80192CC8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80192CD0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80192CD8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80192CE0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80192CE8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80192CF0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80192CF8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80192D00[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80192D08[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80192D10[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80192D18[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80192D20[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80192D28[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80192D30[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80192D38[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80192D40[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80192D48[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80192D50[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80192D58[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80192D60[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80192DA4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80192D68; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80192DD4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80192E10[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80192E68[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80192E78[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80192E80[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80192FE8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80192FF4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801DF934; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E18F0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801E0C60; +extern short D_801E1964; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E1964) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E1964)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801E0C60 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E1964) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E18C0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E18C0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E1964) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E1964) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801E10BC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801E0C64; + extern s32 D_801E1078; + extern s16 D_801E107C; + extern s16 D_801E1080; + extern s16 D_801E1084; + extern s16 D_801E1088; + extern s32 D_801E1090; + extern s32 D_801E1094; + extern s32 D_801E10A4; + extern s16 D_801E10A8; + extern s16 D_801E10AC; + extern s32 D_801E10B0; + extern s32 D_801E10B8; + extern s32 D_801E10BC[10]; + extern s32 D_801E1808; + extern s16 D_801E18C0; + extern s32 D_801E18EC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E18C0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801E1078); + D_801E1078 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E1084, D_801E1088 ? 0x48 : 0x40); + (*(s16*)&D_801E1964) = 2; + break; + case 0: + func_80179B28(D_801E1078); + D_801E1078 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801E107C, D_801E1080 ? 0x48 : 0x40); + (*(s16*)&D_801E1964) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E1808 != 0) { + func_80179B28(D_801E1078); + D_801E1078 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801E107C, D_801E1080 ? 0x48 : 0x40); + (*(s16*)&D_801E1964) = 1; + } else { + (*(s16*)&D_801E1964) = 3; + } + break; + case 0x32: + func_80179B28(D_801E1078); + D_801E1078 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801E107C, + D_801E1080 ? 0x48 : 0x40); + (*(s16*)&D_801E1964) = 1; + break; + case 2: + func_80179B28(D_801E1078); + if (D_801E1090 != 0) { + D_801E0C60 = D_801E1090; + D_801E1090 = 0; + (*(s16*)&D_801E1964) = 3; + return; + } + (*(s16*)&D_801E1964) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E1964) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E1964) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E1964) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E1964) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E1964) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E1964) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E1964) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E1964) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E1964) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E1964) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E1964) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x1B: + D_801E10B0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E1964) = 4; + D_801E0C64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E1964) = 5; + D_801E10A4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801E10A4 = (s32)func_8017A3B0; + (*(s16*)&D_801E1964) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x24: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E1964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E1964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E1964) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1964) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1964) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E1964) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E1964) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E1964) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E1964) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1094); + (*(s16*)&D_801E1964) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801E1094); + (*(s16*)&D_801E1964) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1094); + (*(s16*)&D_801E1964) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801E1094); + (*(s16*)&D_801E1964) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + break; + case 0x4E: + D_801E10B8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x2B: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E1964) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E18EC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E1964) = 3; + break; + case 0x34: + (*(s16*)&D_801E1964) = 3; + D_801E0C60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801E1090 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E1964) = 3; + D_801E0C60 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E1964) = 3; + D_801E0C60 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801E0C60 = *(s32 *)(D_801E0C60 + 4); + return; + case 0x37: + (*(s16*)&D_801E1964) = 3; + D_801E107C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1080 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E1964) = 3; + D_801E1084 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801E1088 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E1964) = 3; + D_801E107C = w1; + D_801E1080 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E1964) = 3; + D_801E1084 = w2; + D_801E1088 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + case 0x43: + D_801E10A4 = (s32)func_8017A3D8; + D_801E10AC = 0; + (*(s16*)&D_801E1964) = 5; + D_801E10A8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E1964) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E1964) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E1964) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801E10BC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E1964) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801E10BC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E1964) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801E10BC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E1964) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801E10BC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E1964) = 3; + break; + default: + break; + } +Lend: + D_801E0C60 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E108C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801E108C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801E108C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801E108C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801E10B4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801E10B4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801E1070; + +s32 func_8017A3B0(void) { + switch (D_801E1070) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801E10AC; +extern short D_801E10A8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801E10AC) { + case 0: + func_800D0CA0(1); + D_801E10AC = D_801E10AC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801E10A8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801E10AC = D_801E10AC + 1; + if (D_801E10AC < 0x1E) { + return 0; + } + D_801E10AC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801E10EC; + extern s16 D_801E10EE; + extern s16 D_801E10F0; + extern s16 D_801E10E4; + extern s16 D_801E10E6; + extern s16 D_801E10E8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801E10EC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801E10EE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801E10F0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801E10E4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801E10E6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801E10E8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801E1074; +extern u16 D_801E10F4; +extern u16 D_801E10F6; +extern u16 D_801E10F8; +extern s16 D_801E18F0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E18F0 = 0; + D_801E1074 = 0; + D_801E10F4 = D_80126B5E; + D_801E10F6 = D_80126B62; + D_801E10F8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80193130[]; + extern s16 D_801E10EC; + extern s16 D_801E10E4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80193130[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80193130[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E10EC; + s16 *p78C = &D_801E10E4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E18F0 = 1; + D_801E1074 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801E1094; + extern SV4_8017B368 D_801E109C; + extern s16 D_801E10EC; + extern s16 D_801E10E4; + extern u16 D_80193130; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801E1094; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801E109C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80193130)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80193130)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801E10EC) = loc0; + (*(SV4_8017B368 *)&D_801E10E4) = loc1; + D_801E18F0 = 1; + D_801E1074 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80193130[]; + extern s16 D_801E10EC; + extern s16 D_801E10EE; + extern s16 D_801E10F0; + extern s16 D_801E10E4; + extern s16 D_801E10E6; + extern s16 D_801E10E8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80193130[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80193130[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801E10EC; + s16 *p78C = &D_801E10E4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801E10EE; + v798 = D_801E10F0; + v78C = *p78C; + v78E = D_801E10E6; + v790 = D_801E10E8; + __asm__ __volatile__(""); + D_801E18F0 = 1; + D_801E1074 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1074; +extern s16 D_801E10EC; +extern s16 D_801E10EE; +extern s16 D_801E10F0; +extern s16 D_801E10E4; +extern s16 D_801E10E6; +extern s16 D_801E10E8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801E1074 = 0; + D_801E10EC = (s16) D_80114F30; + D_801E10EE = (s16) D_80114F34; + D_801E10F0 = (s16) D_80114F38; + D_801E10E4 = (s16) D_80114F24; + D_801E10E6 = (s16) D_80114F28; + D_801E10E8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801E1104; +extern s16 D_801E1106; +extern s16 D_801E1108; +extern s16 D_801E110C; +extern s16 D_801E110E; +extern s16 D_801E1110; + +void func_8017B824(void) { + D_801E1104 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801E1106 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801E1108 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801E110C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801E110E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801E1110 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801E1104; +extern s16 D_801E1106; +extern s16 D_801E1108; +extern s16 D_801E110C; +extern s16 D_801E110E; +extern s16 D_801E1110; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801E1104; + D_80114F34 = D_801E1106; + D_80114F38 = D_801E1108; + D_80114F24 = D_801E110C; + D_80114F28 = D_801E110E; + D_80114F2C = D_801E1110; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801E10EC), src[8..15] -> (*(S8_8017B8E8 *)&D_801E10E4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801E10EC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801E10E4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801E10F4; +extern u16 D_801E10F6; +extern u16 D_801E10F8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801E1074; +extern short D_801E10FC; +extern short D_801E10FE; +extern short D_801E1100; +extern s16 D_801E10EC; +extern s16 D_801E10EE; +extern s16 D_801E10F0; +extern s16 D_801E10E4; +extern s16 D_801E10E6; +extern s16 D_801E10E8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801E10F4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801E10F6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801E10F8); + (*(s16 *)&D_801E10FC) = buf[0]; + (*(s16 *)&D_801E10FE) = buf[1]; + (*(s16 *)&D_801E1100) = buf[2]; + D_801E10EC = D_80114F30 + buf[0]; + D_801E1074 = 0; + D_801E10EE = D_80114F34 + buf[1]; + D_801E10F0 = D_80114F38 + buf[2]; + D_801E10E4 = D_80114F24 + buf[0]; + D_801E10E6 = D_80114F28 + buf[1]; + D_801E10E8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801E1094; +extern SV4 D_801E109C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801E109C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801E1094 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801E109C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801E109C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801E1094) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801E109C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801E10BC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801E10BC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801E1074; +extern s16 D_801E18F0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801E1074 = D_801E1074 + 1; + if (D_801E1074 >= 0x1F) { + D_801E18F0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801E1074; +extern s16 D_801E18F0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1074 = D_801E1074 + 1; + if (0x18 < D_801E1074) { + func_8012A4BC(); + D_801E18F0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801E1074; +extern void (*D_801E10B8)(void); +extern short D_801E10FC; +extern short D_801E10FE; +extern short D_801E1100; +extern s16 D_801E18F0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801E1074 = D_801E1074 + 1; + if (D_801E1074 >= 0x19) { + if (D_801E10B8 != 0) { + (*D_801E10B8)(); + } else { + D_80114F30 = D_80114F30 + D_801E10FC; + D_80114F34 = D_80114F34 + D_801E10FE; + D_80114F38 = D_80114F38 + D_801E1100; + D_80114F24 = D_80114F24 + D_801E10FC; + D_80114F28 = D_80114F28 + D_801E10FE; + D_80114F2C = D_80114F2C + D_801E1100; + func_8012A4BC(); + } + D_801E18F0 = 0; + } +} + + + +extern void (*D_801931D0[])(void); + +void func_8017BE60(void *a0) { + D_801931D0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017CDE4); + + +extern void (*D_8019327C[])(void); + +void func_8017CE2C(void *a0) { + D_8019327C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017CE68); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CEAC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017CED0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CF10(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF8C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80193290[])(void); + +void func_8017CFAC(void *a0) { + D_80193290[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017CFE8); + + +extern void (*D_8019329C[])(void); + +void func_8017D05C(void *a0) { + D_8019329C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D098); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D0D8); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_801932B4; + +void func_8017D100(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801932B4, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_801932C8; + +void func_8017D128(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801932C8, 0x1000000); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D150); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D1EC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D288); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D2C8); + + +extern void (*D_801932D4[])(void); + +void func_8017D34C(void *a0) { + D_801932D4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D388); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D474); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D550); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D63C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D7D4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D804); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017D89C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017DA9C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017DAE0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017DBFC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017E1F0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017E548); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017E61C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017E8F8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017EADC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017EC4C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017F4FC); + + +extern void (*D_801935C8[])(void); + +void func_8017F7B8(void *a0) { + D_801935C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017F7F4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FA1C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FB28); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FB84); + + +extern void (*D_801935E0[])(void); + +void func_8017FBF8(void *a0) { + D_801935E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FC34); + + +extern void func_801292C8(u8 *a0); + s32 func_8017FC8C(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_801292C8)(); + } + } + + + +extern void (*D_80193608[])(void); + +void func_8017FCC0(void *a0) { + D_80193608[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FCFC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8017FFCC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", listCdBuffer); + + +extern void (*D_8019366C[])(void); + +void func_80180104(void *a0) { + D_8019366C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180140); + +void func_801801D0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801801D8); + + +s32 func_80180218(void) { + return 127; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180220); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018036C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180594); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180724); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180894); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018090C); + + +extern void (*D_801937B4[])(void); + +void func_8018096C(void *a0) { + D_801937B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801809A8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180AA8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180B5C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180C34); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180C9C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180CE8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180D28); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180D98); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180ECC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180F2C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180F58); + +extern void (*D_801937D8[])(void); + +void func_80180FB8(void *a0) { + D_801937D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80180FF4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181068); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801811AC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181204); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181254); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801812C0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181414); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181468); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018148C); + + +extern void (*D_80193814[])(void); + +void func_801814D0(void *a0) { + D_80193814[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018150C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181658); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801816D0); + + +void func_80181700(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181714); + +extern void (*D_8019384C[])(void); + +void func_8018177C(void *a0) { + D_8019384C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801817B8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181804); + +void func_8018184C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181854); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801819B8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181D34); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80181ED4(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x1); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181EF4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80181FD4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182074); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801823A8(void *a0) { + *(s32 *)((char *)a0 + 0x1c) = 0x20; + ((void (*)(s32 *, s32))func_8012AD44)(a0, 0x4); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801823D0); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80182584(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801825A4); + + +extern void (*D_801AC4F8[])(void); + +void func_801827E8(void *a0) { + D_801AC4F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182824); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801828FC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182994); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182B58); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182BD8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182D10); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80182EAC(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80182ECC); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80183188(s32 arg0) { + ((void (*)(s32, s32))func_8012AD44)(arg0, 0x5); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801831A8); + + +extern void (*D_801AC564[])(void); + +void func_8018337C(void *a0) { + D_801AC564[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801833B8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183408); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018348C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183598); + + +extern void (*D_801AC590[])(void); + +void func_80183640(void *a0) { + D_801AC590[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018367C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801837D0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018386C); + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801AC64C[]; + +extern s32 func_8012B414(s32 a0); + +void func_801838A0(int param_1) +{ + D_801AC64C[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_8012B414)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801838F0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183940); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183A28); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183AA4); + +void func_80183B34(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183B3C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183C1C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183C58); + +void func_80183CA8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183CB0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183DBC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183E74); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183F24); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183F6C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80183FDC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801841F8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184248); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184310); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018447C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801844BC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184644); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184678); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184700); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018474C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184888); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801848DC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184A2C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184A6C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184AE8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184D68); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184DB0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184E70); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80184EB0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185014); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185068); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185178); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801851E0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185660); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801857D4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018588C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018596C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801859AC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185A2C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185A64); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185D38); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185EB0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80185EF8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186198); + +extern void func_801875A4(void); + void func_80186314(void *a0) { + if (*(s16 *)((s32)a0 + 0x98) == 0) { + ((void (*)(void))func_801875A4)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186344); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801864C4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801867DC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186C40); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186CA4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186CF0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186D6C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186DBC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186E00); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186E48); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186E94); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80186F00); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801872EC); + +extern void func_8018A3CC(s32 arg0, s32 arg1); + void func_80187440(s32 arg0) { + func_8018A3CC(arg0, 0x9B7); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187460); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801874E4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801875A4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018769C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801877BC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018788C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187A50); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187BC8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187C28); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187D50); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187DB0); + + +extern void (*D_801BC490[])(void); + +void func_80187E90(void *a0) { + D_801BC490[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80187ECC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188058); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018833C); + + +extern void (*D_801BC5E8[])(void); + +void func_801885F4(void *a0) { + D_801BC5E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188630); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801887A0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188808); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188A60); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188AC0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188BF8); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80188C1C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018906C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189108); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801892C0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801892FC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018937C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018956C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801897F0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189888); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801898EC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189938); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_801899B8); + + +extern void (*D_801BC61C[])(void); + +void func_80189A20(void *a0) { + D_801BC61C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189A5C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189EC0); + + +extern void (*D_801BC63C[])(void); + +void func_80189F64(void *a0) { + D_801BC63C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_80189FA0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A194); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A2D0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A3CC); + + +extern void (*D_801BC648[])(void); + +void func_8018A538(void *a0) { + D_801BC648[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A574); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A624); + + +extern s32 D_801E17F0; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_8018A6DC(s32 a0, s32 a1) { + D_801E17F0 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A70C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018A950); + + +extern void (*D_801D4488[])(void); + +void func_8018ABF0(void *a0) { + D_801D4488[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018AC2C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018AE3C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018B240); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018B3B4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018B564); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018B7F0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018BCB4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018BE84); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018C074); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018C38C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018C584); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018C9CC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018CBDC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D020); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D230); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D4B4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D4D4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D5D4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D674); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D734); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D7CC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D7EC); + +void func_8018D8DC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D8E4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018D9B8); + +extern void func_8012B370(int a0); + void func_8018DA78(void) { + ((s32 (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DA98); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DAB8); + +void func_8018DBAC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DBB4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DCA8); + +extern void func_8012B370(int a0); + void func_8018DD68(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DD88); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018DEC0); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018E094); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018E240); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018E428); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018E764); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EA0C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EB3C); + + +extern void (*D_801DC7F8[])(void); + +void func_8018EC14(void *a0) { + D_801DC7F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EC50); + + +extern void (*D_801DC818[])(void); + +void func_8018EDC4(void *a0) { + D_801DC818[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EE00); + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8018DEC0(void); + +void func_8018EE88(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_8018DEC0)(a0); +} + + +extern void func_8018E094(void); + void func_8018EEC0(s32 *param_1) { + *(short *)(*(int *)((char *)param_1 + 0x20) + 0x10) = 0xe00; + ((void (*)(void))func_8018E094)(); + } + + +extern void func_8018E094(void); + void func_8018EEE8(s32 arg0) { + s32 temp_v1 = *(s32 *)(arg0 + 0x20); + *(u16 *)(temp_v1 + 0x10) += 0x20; + func_8018E094(); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EF1C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018EF68); + +extern void func_8018DEC0(void); + void func_8018F054(s32 *a0) { + *(s32 *)((char *)a0 + 0x10) = *(s32 *)((char *)a0 + 0x10) >> 1; + *(s32 *)((char *)a0 + 0x18) = *(s32 *)((char *)a0 + 0x18) >> 1; + ((void (*)(void))func_8018DEC0)(); + } + + +extern void func_8018DEC0(void); + void func_8018F088(u8 *param_1) { + param_1[0xC1] = 0xC; + *(int *)(param_1 + 0x1C) = 0x3C; + ((void (*)(void))func_8018DEC0)(); + } + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F0B4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F140); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F268); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F39C); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F3FC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F4BC); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F590); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80178D40", func_8018F688); + + diff --git a/src/ov_SC06_025/ov_SC06_025_jr_801734BC.c b/src/ov_SC06_025/ov_SC06_025_jr_801734BC.c index 849e36497..95fd5515e 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_801734BC.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_801734BC.c @@ -3084,1345 +3084,3 @@ void func_80178D18(void) { D_801B2284 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1254; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B1254 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B1254; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B1254 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B127C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B127C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B1238; - -s32 func_8017A3B0(void) { - switch (D_801B1238) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801B1274; -extern short D_801B1270; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801B1274) { - case 0: - func_800D0CA0(1); - D_801B1274 = D_801B1274 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801B1270; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801B1274 = D_801B1274 + 1; - if (D_801B1274 < 0x1E) { - return 0; - } - D_801B1274 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B12B4; - extern s16 D_801B12B6; - extern s16 D_801B12B8; - extern s16 D_801B12AC; - extern s16 D_801B12AE; - extern s16 D_801B12B0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B12B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B12B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B12B8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B12AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B12AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B12B0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B123C; -extern u16 D_801B12BC; -extern u16 D_801B12BE; -extern u16 D_801B12C0; -extern s16 D_801B2210; - -void func_8017B1D8(void) { - func_8012A418(); - D_801B2210 = 0; - D_801B123C = 0; - D_801B12BC = D_80126B5E; - D_801B12BE = D_80126B62; - D_801B12C0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801885D4[]; - extern s16 D_801B12B4; - extern s16 D_801B12AC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801885D4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801885D4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B12B4; - s16 *p78C = &D_801B12AC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801B2210 = 1; - D_801B123C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B125C; - extern SV4_8017B368 D_801B1264; - extern s16 D_801B12B4; - extern s16 D_801B12AC; - extern u16 D_801885D4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B125C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B1264; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801885D4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801885D4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B12B4) = loc0; - (*(SV4_8017B368 *)&D_801B12AC) = loc1; - D_801B2210 = 1; - D_801B123C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801885D4[]; - extern s16 D_801B12B4; - extern s16 D_801B12B6; - extern s16 D_801B12B8; - extern s16 D_801B12AC; - extern s16 D_801B12AE; - extern s16 D_801B12B0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801885D4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801885D4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B12B4; - s16 *p78C = &D_801B12AC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B12B6; - v798 = D_801B12B8; - v78C = *p78C; - v78E = D_801B12AE; - v790 = D_801B12B0; - __asm__ __volatile__(""); - D_801B2210 = 1; - D_801B123C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B123C; -extern s16 D_801B12B4; -extern s16 D_801B12B6; -extern s16 D_801B12B8; -extern s16 D_801B12AC; -extern s16 D_801B12AE; -extern s16 D_801B12B0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B123C = 0; - D_801B12B4 = (s16) D_80114F30; - D_801B12B6 = (s16) D_80114F34; - D_801B12B8 = (s16) D_80114F38; - D_801B12AC = (s16) D_80114F24; - D_801B12AE = (s16) D_80114F28; - D_801B12B0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B12CC; -extern s16 D_801B12CE; -extern s16 D_801B12D0; -extern s16 D_801B12D4; -extern s16 D_801B12D6; -extern s16 D_801B12D8; - -void func_8017B824(void) { - D_801B12CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B12CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B12D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B12D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B12D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B12D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B12CC; -extern s16 D_801B12CE; -extern s16 D_801B12D0; -extern s16 D_801B12D4; -extern s16 D_801B12D6; -extern s16 D_801B12D8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B12CC; - D_80114F34 = D_801B12CE; - D_80114F38 = D_801B12D0; - D_80114F24 = D_801B12D4; - D_80114F28 = D_801B12D6; - D_80114F2C = D_801B12D8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B12B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B12AC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B12B4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B12AC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B12BC; -extern u16 D_801B12BE; -extern u16 D_801B12C0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B123C; -extern short D_801B12C4; -extern short D_801B12C6; -extern short D_801B12C8; -extern s16 D_801B12B4; -extern s16 D_801B12B6; -extern s16 D_801B12B8; -extern s16 D_801B12AC; -extern s16 D_801B12AE; -extern s16 D_801B12B0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B12BC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B12BE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B12C0); - (*(s16 *)&D_801B12C4) = buf[0]; - (*(s16 *)&D_801B12C6) = buf[1]; - (*(s16 *)&D_801B12C8) = buf[2]; - D_801B12B4 = D_80114F30 + buf[0]; - D_801B123C = 0; - D_801B12B6 = D_80114F34 + buf[1]; - D_801B12B8 = D_80114F38 + buf[2]; - D_801B12AC = D_80114F24 + buf[0]; - D_801B12AE = D_80114F28 + buf[1]; - D_801B12B0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B125C; -extern SV4 D_801B1264; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1264) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B125C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B1264 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1264)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B125C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B1264) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B1284[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B1284; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B123C; -extern s16 D_801B2210; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B123C = D_801B123C + 1; - if (D_801B123C >= 0x1F) { - D_801B2210 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B123C; -extern s16 D_801B2210; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B123C = D_801B123C + 1; - if (0x18 < D_801B123C) { - func_8012A4BC(); - D_801B2210 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B123C; -extern void (*D_801B1280)(void); -extern short D_801B12C4; -extern short D_801B12C6; -extern short D_801B12C8; -extern s16 D_801B2210; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B123C = D_801B123C + 1; - if (D_801B123C >= 0x19) { - if (D_801B1280 != 0) { - (*D_801B1280)(); - } else { - D_80114F30 = D_80114F30 + D_801B12C4; - D_80114F34 = D_80114F34 + D_801B12C6; - D_80114F38 = D_80114F38 + D_801B12C8; - D_80114F24 = D_80114F24 + D_801B12C4; - D_80114F28 = D_80114F28 + D_801B12C6; - D_80114F2C = D_80114F2C + D_801B12C8; - func_8012A4BC(); - } - D_801B2210 = 0; - } -} - - - -extern void (*D_80188674[])(void); - -void func_8017BE60(void *a0) { - D_80188674[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017CDE4); - - -extern void (*D_80188758[])(void); - -void func_8017CF00(void *a0) { - D_80188758[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017CF3C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CF80(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188760[])(void); - -void func_8017CFA4(void *a0) { - D_80188760[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017CFE0); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D024(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80188768[])(void); - -void func_8017D048(void *a0) { - D_80188768[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D084); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D0C4(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017D140(void) { - func_800D1EBC(); - } - - - -extern void (*D_80188774[])(void); - -void func_8017D160(void *a0) { - D_80188774[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D19C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D1DC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D258); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D2A0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D2C8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D2F0); - -extern s32 func_8012C588(s32 a0, s32 a1); - extern void func_80171928(void *a0); - void func_8017D318(void *a0) { - ((void (*)(s32, s32))func_8012C588)(0x3B9, 0); - ((void (*)(void *))func_80171928)(a0); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D350); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D378); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D418); - - -extern void (*D_8018879C[])(void); - -void func_8017D4B4(void *a0) { - D_8018879C[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D4F0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D654); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D730); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017D8C8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DAF0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DB20); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DB6C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DB98); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DD80); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DE5C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DE74); - - -extern void (*D_801887B0[])(void); - -void func_8017DE9C(void *a0) { - D_801887B0[*(u8 *)((s32)a0 + 0x214)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DED8); - -extern void func_8017E05C(void); - void func_8017DF30(void) { - func_8017E05C(); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017DF50); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E008); - -void func_8017E054(void) { -} - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E05C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E0F0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E100); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E18C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E230); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E290); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E2F0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E3C0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E430); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E48C); - -void func_8017E4D8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E4E0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E648); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E6C0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E95C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017E9B8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017EA74); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017ED5C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017EEC4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017EF94); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F424); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F580); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F664); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F788); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F894); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017F9D8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017FB50); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017FD28); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8017FF4C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180020); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180284); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180300); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801803D4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180520); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801805BC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801807F8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180808); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801808AC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180950); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8018098C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180B7C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180D28); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180D84); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180E30); - - -extern void (*D_8018908C[])(void); - -void func_80180E98(void *a0) { - D_8018908C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180ED4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180EE8); - - -extern void (*D_801890CC[])(void); - -void func_80180F34(void *a0) { - D_801890CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80180F70); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181148); - - -extern void (*D_8018923C[])(void); - -void func_80181260(void *a0) { - D_8018923C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8018129C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801812FC); - -extern void (*D_801893F4[])(void); - -void func_80181488(void *a0) { - D_801893F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801814C4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181514); - - -extern void (*D_8018942C[])(void); - -void func_8018162C(void *a0) { - D_8018942C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181668); - - -extern void (*D_801894F0[])(void); - -void func_801816C4(void *a0) { - D_801894F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181700); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181750); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801817A8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801818D8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181B90); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181BC8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181C1C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181C74); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181CA4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80181E08); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182090); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182118); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182148); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182170); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182268); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801822F0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8018233C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801823D4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801823FC); - -extern void func_80146D90(s32 a0); - extern s32 D_80126B58; - void func_80182448(void) { - ((void (*)(void *))func_80146D90)(&D_80126B58); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182470); - - -extern s32 D_801270C8; - -void func_801824A0(void) { - D_801270C8 = 2; -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801824B4); - -s32 func_801825C4(s32 *a0) { - return *(u16 *)((s32)a0 + 0x2) != 0x3; - } - - - -s32 func_801825D8(s32 *a0) { - return *(u16 *)((s32)a0 + 0x2) != 0x4; - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801825EC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182720); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182850); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801828A0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182938); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182950); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801829B4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182A78); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182B44); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182BE8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182C74); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182D4C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182E14); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_80182EFC(void) { - func_8002D4C8(0xC0E, 0); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182F20); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80182F98); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_8018300C); - -extern void func_800D1724(s32 a0); - extern s32 D_801886A4; - void func_80183068(void) { - ((void (*)(void *))func_800D1724)(&D_801886A4); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183090); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801830C8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183100); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183138); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183228); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183298); - -void func_80183328(void) { -} - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183330); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801833E8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183490); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183528); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801835B0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183604); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801836CC); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183724); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183774); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801837E0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183934); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183988); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801839AC); - - -extern void (*D_801ADA18[])(void); - -void func_801839F0(void *a0) { - D_801ADA18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183A2C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183B78); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183BF0); - - -void func_80183C20(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183C34); - - -extern void (*D_801ADA50[])(void); - -void func_80183C9C(void *a0) { - D_801ADA50[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183CD8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183D24); - -void func_80183D6C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183D74); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80183ED8); - - -extern void (*D_801ADAC8[])(void); - -void func_80184254(void *a0) { - D_801ADAC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_801842C0(s32 *a0); - extern void func_80146CA0(void *a0); - void func_80184290(s32 *a0) { - func_801842C0(a0); - ((s32 (*)(s32))func_80146CA0)((s32)a0); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801842C0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184340); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801843D8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184410); - - -extern void (*D_801AE188[])(void); - -void func_80184468(void *a0) { - D_801AE188[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801844A4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184578); - -void func_801845A0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801845A8); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801846F4); - -extern void func_8012C218(void *a0); - void func_80184814(void *arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184840); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184850); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184860); - -extern void func_8014ADA8(s32 a0, s32 a1); - extern s32 D_80126B58; - void func_801848A0(s32 arg0) { - s32 temp_v0 = *(s32 *)(arg0 + 0xdc); - ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); - } - - -extern s16 func_80174764(void); - s32 func_801848D4(void) { - return ((u32)((s32 (*)(void))func_80174764)() == 1); - } - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_801848F8); - - -extern void (*D_801AE1B0[])(void); - -void func_8018495C(void *a0) { - D_801AE1B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184998); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184A20); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184AE0); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_801734BC", func_80184B50); - diff --git a/src/ov_SC06_025/ov_SC06_025_jr_80178D40.c b/src/ov_SC06_025/ov_SC06_025_jr_80178D40.c new file mode 100644 index 000000000..00a0b6d54 --- /dev/null +++ b/src/ov_SC06_025/ov_SC06_025_jr_80178D40.c @@ -0,0 +1,4791 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187E7C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B05A8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187E70[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187EB4[]; +extern unsigned short D_80187EBC[]; +extern unsigned short D_80187EC4[]; +extern unsigned char D_801B05B0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B05A8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187ECC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B06E4; +extern M2C_UNK D_801B06E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B0670; +extern void (*D_80187EFC[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B06EC[]; +extern u8 D_801B06F4[]; +extern u8 D_801B06A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187F04[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187F20[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187F28[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187F90[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187F34; +extern u8 D_80187F40; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187FC4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187FCC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80188020[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80188054[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80188044[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80188070; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801880E8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801880F0[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801880F8[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80188100[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80188108[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80188110[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018811C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80188128[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80188134[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80188144[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80188154[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018815C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80188164[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018816C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80188174[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018817C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80188184[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018818C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80188194[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018819C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801881A4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801881AC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801881B4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801881BC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801881C4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801881CC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801881D4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801881DC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801881E4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801881EC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801881F4[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801881FC[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80188204[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80188248[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018820C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80188278[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801882B4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018830C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018831C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80188324[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018848C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80188498[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801AFC54; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801B2210; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B0E28; +extern short D_801B2284; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801B2284) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801B2284)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B0E28 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801B2284) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B21E0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B21E0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801B2284) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801B2284) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B1284[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B0E2C; + extern s32 D_801B1240; + extern s16 D_801B1244; + extern s16 D_801B1248; + extern s16 D_801B124C; + extern s16 D_801B1250; + extern s32 D_801B1258; + extern s32 D_801B125C; + extern s32 D_801B126C; + extern s16 D_801B1270; + extern s16 D_801B1274; + extern s32 D_801B1278; + extern s32 D_801B1280; + extern s32 D_801B1284[10]; + extern s32 D_801B2128; + extern s16 D_801B21E0; + extern s32 D_801B220C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B21E0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B1240); + D_801B1240 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B124C, D_801B1250 ? 0x48 : 0x40); + (*(s16*)&D_801B2284) = 2; + break; + case 0: + func_80179B28(D_801B1240); + D_801B1240 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B1244, D_801B1248 ? 0x48 : 0x40); + (*(s16*)&D_801B2284) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B2128 != 0) { + func_80179B28(D_801B1240); + D_801B1240 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B1244, D_801B1248 ? 0x48 : 0x40); + (*(s16*)&D_801B2284) = 1; + } else { + (*(s16*)&D_801B2284) = 3; + } + break; + case 0x32: + func_80179B28(D_801B1240); + D_801B1240 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B1244, + D_801B1248 ? 0x48 : 0x40); + (*(s16*)&D_801B2284) = 1; + break; + case 2: + func_80179B28(D_801B1240); + if (D_801B1258 != 0) { + D_801B0E28 = D_801B1258; + D_801B1258 = 0; + (*(s16*)&D_801B2284) = 3; + return; + } + (*(s16*)&D_801B2284) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801B2284) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801B2284) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2284) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801B2284) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801B2284) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801B2284) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2284) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801B2284) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801B2284) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801B2284) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801B2284) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x1B: + D_801B1278 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801B2284) = 4; + D_801B0E2C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801B2284) = 5; + D_801B126C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B126C = (s32)func_8017A3B0; + (*(s16*)&D_801B2284) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x24: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2284) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801B2284) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801B2284) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2284) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2284) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801B2284) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2284) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801B2284) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801B2284) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B125C); + (*(s16*)&D_801B2284) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B125C); + (*(s16*)&D_801B2284) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B125C); + (*(s16*)&D_801B2284) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B125C); + (*(s16*)&D_801B2284) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + break; + case 0x4E: + D_801B1280 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x2B: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801B2284) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801B220C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801B2284) = 3; + break; + case 0x34: + (*(s16*)&D_801B2284) = 3; + D_801B0E28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B1258 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801B2284) = 3; + D_801B0E28 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801B2284) = 3; + D_801B0E28 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B0E28 = *(s32 *)(D_801B0E28 + 4); + return; + case 0x37: + (*(s16*)&D_801B2284) = 3; + D_801B1244 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1248 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801B2284) = 3; + D_801B124C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B1250 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801B2284) = 3; + D_801B1244 = w1; + D_801B1248 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801B2284) = 3; + D_801B124C = w2; + D_801B1250 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + case 0x43: + D_801B126C = (s32)func_8017A3D8; + D_801B1274 = 0; + (*(s16*)&D_801B2284) = 5; + D_801B1270 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801B2284) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801B2284) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801B2284) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B1284; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801B2284) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B1284; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801B2284) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B1284[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801B2284) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B1284; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801B2284) = 3; + break; + default: + break; + } +Lend: + D_801B0E28 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1254; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B1254 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B1254; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B1254 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B127C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B127C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B1238; + +s32 func_8017A3B0(void) { + switch (D_801B1238) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801B1274; +extern short D_801B1270; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801B1274) { + case 0: + func_800D0CA0(1); + D_801B1274 = D_801B1274 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801B1270; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801B1274 = D_801B1274 + 1; + if (D_801B1274 < 0x1E) { + return 0; + } + D_801B1274 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B12B4; + extern s16 D_801B12B6; + extern s16 D_801B12B8; + extern s16 D_801B12AC; + extern s16 D_801B12AE; + extern s16 D_801B12B0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B12B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B12B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B12B8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B12AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B12AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B12B0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B123C; +extern u16 D_801B12BC; +extern u16 D_801B12BE; +extern u16 D_801B12C0; +extern s16 D_801B2210; + +void func_8017B1D8(void) { + func_8012A418(); + D_801B2210 = 0; + D_801B123C = 0; + D_801B12BC = D_80126B5E; + D_801B12BE = D_80126B62; + D_801B12C0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801885D4[]; + extern s16 D_801B12B4; + extern s16 D_801B12AC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801885D4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801885D4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B12B4; + s16 *p78C = &D_801B12AC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801B2210 = 1; + D_801B123C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B125C; + extern SV4_8017B368 D_801B1264; + extern s16 D_801B12B4; + extern s16 D_801B12AC; + extern u16 D_801885D4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B125C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B1264; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801885D4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801885D4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B12B4) = loc0; + (*(SV4_8017B368 *)&D_801B12AC) = loc1; + D_801B2210 = 1; + D_801B123C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801885D4[]; + extern s16 D_801B12B4; + extern s16 D_801B12B6; + extern s16 D_801B12B8; + extern s16 D_801B12AC; + extern s16 D_801B12AE; + extern s16 D_801B12B0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801885D4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801885D4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B12B4; + s16 *p78C = &D_801B12AC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B12B6; + v798 = D_801B12B8; + v78C = *p78C; + v78E = D_801B12AE; + v790 = D_801B12B0; + __asm__ __volatile__(""); + D_801B2210 = 1; + D_801B123C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B123C; +extern s16 D_801B12B4; +extern s16 D_801B12B6; +extern s16 D_801B12B8; +extern s16 D_801B12AC; +extern s16 D_801B12AE; +extern s16 D_801B12B0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B123C = 0; + D_801B12B4 = (s16) D_80114F30; + D_801B12B6 = (s16) D_80114F34; + D_801B12B8 = (s16) D_80114F38; + D_801B12AC = (s16) D_80114F24; + D_801B12AE = (s16) D_80114F28; + D_801B12B0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B12CC; +extern s16 D_801B12CE; +extern s16 D_801B12D0; +extern s16 D_801B12D4; +extern s16 D_801B12D6; +extern s16 D_801B12D8; + +void func_8017B824(void) { + D_801B12CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B12CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B12D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B12D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B12D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B12D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B12CC; +extern s16 D_801B12CE; +extern s16 D_801B12D0; +extern s16 D_801B12D4; +extern s16 D_801B12D6; +extern s16 D_801B12D8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B12CC; + D_80114F34 = D_801B12CE; + D_80114F38 = D_801B12D0; + D_80114F24 = D_801B12D4; + D_80114F28 = D_801B12D6; + D_80114F2C = D_801B12D8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B12B4), src[8..15] -> (*(S8_8017B8E8 *)&D_801B12AC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B12B4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B12AC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B12BC; +extern u16 D_801B12BE; +extern u16 D_801B12C0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B123C; +extern short D_801B12C4; +extern short D_801B12C6; +extern short D_801B12C8; +extern s16 D_801B12B4; +extern s16 D_801B12B6; +extern s16 D_801B12B8; +extern s16 D_801B12AC; +extern s16 D_801B12AE; +extern s16 D_801B12B0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B12BC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B12BE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B12C0); + (*(s16 *)&D_801B12C4) = buf[0]; + (*(s16 *)&D_801B12C6) = buf[1]; + (*(s16 *)&D_801B12C8) = buf[2]; + D_801B12B4 = D_80114F30 + buf[0]; + D_801B123C = 0; + D_801B12B6 = D_80114F34 + buf[1]; + D_801B12B8 = D_80114F38 + buf[2]; + D_801B12AC = D_80114F24 + buf[0]; + D_801B12AE = D_80114F28 + buf[1]; + D_801B12B0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B125C; +extern SV4 D_801B1264; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B1264) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B125C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B1264 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B1264)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B125C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B1264) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B1284[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B1284; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B123C; +extern s16 D_801B2210; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B123C = D_801B123C + 1; + if (D_801B123C >= 0x1F) { + D_801B2210 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B123C; +extern s16 D_801B2210; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B123C = D_801B123C + 1; + if (0x18 < D_801B123C) { + func_8012A4BC(); + D_801B2210 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B123C; +extern void (*D_801B1280)(void); +extern short D_801B12C4; +extern short D_801B12C6; +extern short D_801B12C8; +extern s16 D_801B2210; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B123C = D_801B123C + 1; + if (D_801B123C >= 0x19) { + if (D_801B1280 != 0) { + (*D_801B1280)(); + } else { + D_80114F30 = D_80114F30 + D_801B12C4; + D_80114F34 = D_80114F34 + D_801B12C6; + D_80114F38 = D_80114F38 + D_801B12C8; + D_80114F24 = D_80114F24 + D_801B12C4; + D_80114F28 = D_80114F28 + D_801B12C6; + D_80114F2C = D_80114F2C + D_801B12C8; + func_8012A4BC(); + } + D_801B2210 = 0; + } +} + + + +extern void (*D_80188674[])(void); + +void func_8017BE60(void *a0) { + D_80188674[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017CDE4); + + +extern void (*D_80188758[])(void); + +void func_8017CF00(void *a0) { + D_80188758[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017CF3C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CF80(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188760[])(void); + +void func_8017CFA4(void *a0) { + D_80188760[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017CFE0); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D024(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80188768[])(void); + +void func_8017D048(void *a0) { + D_80188768[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D084); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D0C4(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017D140(void) { + func_800D1EBC(); + } + + + +extern void (*D_80188774[])(void); + +void func_8017D160(void *a0) { + D_80188774[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D19C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D1DC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D258); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D2A0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D2C8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D2F0); + +extern s32 func_8012C588(s32 a0, s32 a1); + extern void func_80171928(void *a0); + void func_8017D318(void *a0) { + ((void (*)(s32, s32))func_8012C588)(0x3B9, 0); + ((void (*)(void *))func_80171928)(a0); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D350); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D378); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D418); + + +extern void (*D_8018879C[])(void); + +void func_8017D4B4(void *a0) { + D_8018879C[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D4F0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D654); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D730); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017D8C8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DAF0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DB20); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DB6C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DB98); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DD80); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DE5C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DE74); + + +extern void (*D_801887B0[])(void); + +void func_8017DE9C(void *a0) { + D_801887B0[*(u8 *)((s32)a0 + 0x214)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DED8); + +extern void func_8017E05C(void); + void func_8017DF30(void) { + func_8017E05C(); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017DF50); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E008); + +void func_8017E054(void) { +} + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E05C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E0F0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E100); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E18C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E230); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E290); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E2F0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E3C0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E430); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E48C); + +void func_8017E4D8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E4E0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E648); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E6C0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E95C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017E9B8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017EA74); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017ED5C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017EEC4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017EF94); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F424); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F580); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F664); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F788); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F894); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017F9D8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017FB50); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017FD28); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8017FF4C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180020); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180284); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180300); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801803D4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180520); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801805BC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801807F8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180808); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801808AC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180950); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8018098C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180B7C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180D28); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180D84); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180E30); + + +extern void (*D_8018908C[])(void); + +void func_80180E98(void *a0) { + D_8018908C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180ED4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180EE8); + + +extern void (*D_801890CC[])(void); + +void func_80180F34(void *a0) { + D_801890CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80180F70); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181148); + + +extern void (*D_8018923C[])(void); + +void func_80181260(void *a0) { + D_8018923C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8018129C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801812FC); + +extern void (*D_801893F4[])(void); + +void func_80181488(void *a0) { + D_801893F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801814C4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181514); + + +extern void (*D_8018942C[])(void); + +void func_8018162C(void *a0) { + D_8018942C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181668); + + +extern void (*D_801894F0[])(void); + +void func_801816C4(void *a0) { + D_801894F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181700); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181750); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801817A8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801818D8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181B90); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181BC8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181C1C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181C74); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181CA4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80181E08); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182090); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182118); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182148); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182170); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182268); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801822F0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8018233C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801823D4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801823FC); + +extern void func_80146D90(s32 a0); + extern s32 D_80126B58; + void func_80182448(void) { + ((void (*)(void *))func_80146D90)(&D_80126B58); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182470); + + +extern s32 D_801270C8; + +void func_801824A0(void) { + D_801270C8 = 2; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801824B4); + +s32 func_801825C4(s32 *a0) { + return *(u16 *)((s32)a0 + 0x2) != 0x3; + } + + + +s32 func_801825D8(s32 *a0) { + return *(u16 *)((s32)a0 + 0x2) != 0x4; + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801825EC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182720); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182850); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801828A0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182938); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182950); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801829B4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182A78); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182B44); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182BE8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182C74); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182D4C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182E14); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_80182EFC(void) { + func_8002D4C8(0xC0E, 0); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182F20); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80182F98); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_8018300C); + +extern void func_800D1724(s32 a0); + extern s32 D_801886A4; + void func_80183068(void) { + ((void (*)(void *))func_800D1724)(&D_801886A4); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183090); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801830C8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183100); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183138); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183228); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183298); + +void func_80183328(void) { +} + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183330); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801833E8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183490); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183528); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801835B0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183604); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801836CC); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183724); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183774); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801837E0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183934); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183988); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801839AC); + + +extern void (*D_801ADA18[])(void); + +void func_801839F0(void *a0) { + D_801ADA18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183A2C); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183B78); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183BF0); + + +void func_80183C20(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183C34); + + +extern void (*D_801ADA50[])(void); + +void func_80183C9C(void *a0) { + D_801ADA50[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183CD8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183D24); + +void func_80183D6C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183D74); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80183ED8); + + +extern void (*D_801ADAC8[])(void); + +void func_80184254(void *a0) { + D_801ADAC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_801842C0(s32 *a0); + extern void func_80146CA0(void *a0); + void func_80184290(s32 *a0) { + func_801842C0(a0); + ((s32 (*)(s32))func_80146CA0)((s32)a0); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801842C0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184340); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801843D8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184410); + + +extern void (*D_801AE188[])(void); + +void func_80184468(void *a0) { + D_801AE188[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801844A4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184578); + +void func_801845A0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801845A8); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801846F4); + +extern void func_8012C218(void *a0); + void func_80184814(void *arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184840); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184850); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184860); + +extern void func_8014ADA8(s32 a0, s32 a1); + extern s32 D_80126B58; + void func_801848A0(s32 arg0) { + s32 temp_v0 = *(s32 *)(arg0 + 0xdc); + ((void (*)(void *, s32))func_8014ADA8)((void *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); + } + + +extern s16 func_80174764(void); + s32 func_801848D4(void) { + return ((u32)((s32 (*)(void))func_80174764)() == 1); + } + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_801848F8); + + +extern void (*D_801AE1B0[])(void); + +void func_8018495C(void *a0) { + D_801AE1B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184998); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184A20); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184AE0); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_80178D40", func_80184B50); + + diff --git a/src/ov_SC06_027/ov_SC06_027_jr_801734BC.c b/src/ov_SC06_027/ov_SC06_027_jr_801734BC.c index 44e520013..80bad565f 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_801734BC.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_801734BC.c @@ -3084,877 +3084,3 @@ void func_80178D18(void) { D_8019D42C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019D22C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019D22C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019D22C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019D22C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019D254; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019D254 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019D210; - -s32 func_8017A3B0(void) { - switch (D_8019D210) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019D24C; -extern short D_8019D248; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019D24C) { - case 0: - func_800D0CA0(1); - D_8019D24C = D_8019D24C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019D248; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019D24C = D_8019D24C + 1; - if (D_8019D24C < 0x1E) { - return 0; - } - D_8019D24C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019D28C; - extern s16 D_8019D28E; - extern s16 D_8019D290; - extern s16 D_8019D284; - extern s16 D_8019D286; - extern s16 D_8019D288; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019D28C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019D28E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019D290, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019D284, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019D286, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019D288, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019D214; -extern u16 D_8019D294; -extern u16 D_8019D296; -extern u16 D_8019D298; -extern s16 D_8019D3B8; - -void func_8017B1D8(void) { - func_8012A418(); - D_8019D3B8 = 0; - D_8019D214 = 0; - D_8019D294 = D_80126B5E; - D_8019D296 = D_80126B62; - D_8019D298 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181914[]; - extern s16 D_8019D28C; - extern s16 D_8019D284; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181914[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181914[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019D28C; - s16 *p78C = &D_8019D284; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_8019D3B8 = 1; - D_8019D214 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019D234; - extern SV4_8017B368 D_8019D23C; - extern s16 D_8019D28C; - extern s16 D_8019D284; - extern u16 D_80181914; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019D234; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019D23C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80181914)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80181914)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019D28C) = loc0; - (*(SV4_8017B368 *)&D_8019D284) = loc1; - D_8019D3B8 = 1; - D_8019D214 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80181914[]; - extern s16 D_8019D28C; - extern s16 D_8019D28E; - extern s16 D_8019D290; - extern s16 D_8019D284; - extern s16 D_8019D286; - extern s16 D_8019D288; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80181914[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80181914[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019D28C; - s16 *p78C = &D_8019D284; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019D28E; - v798 = D_8019D290; - v78C = *p78C; - v78E = D_8019D286; - v790 = D_8019D288; - __asm__ __volatile__(""); - D_8019D3B8 = 1; - D_8019D214 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019D214; -extern s16 D_8019D28C; -extern s16 D_8019D28E; -extern s16 D_8019D290; -extern s16 D_8019D284; -extern s16 D_8019D286; -extern s16 D_8019D288; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019D214 = 0; - D_8019D28C = (s16) D_80114F30; - D_8019D28E = (s16) D_80114F34; - D_8019D290 = (s16) D_80114F38; - D_8019D284 = (s16) D_80114F24; - D_8019D286 = (s16) D_80114F28; - D_8019D288 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019D2A4; -extern s16 D_8019D2A6; -extern s16 D_8019D2A8; -extern s16 D_8019D2AC; -extern s16 D_8019D2AE; -extern s16 D_8019D2B0; - -void func_8017B824(void) { - D_8019D2A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019D2A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019D2A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019D2AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019D2AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019D2B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019D2A4; -extern s16 D_8019D2A6; -extern s16 D_8019D2A8; -extern s16 D_8019D2AC; -extern s16 D_8019D2AE; -extern s16 D_8019D2B0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019D2A4; - D_80114F34 = D_8019D2A6; - D_80114F38 = D_8019D2A8; - D_80114F24 = D_8019D2AC; - D_80114F28 = D_8019D2AE; - D_80114F2C = D_8019D2B0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019D28C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019D284) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019D28C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019D284) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019D294; -extern u16 D_8019D296; -extern u16 D_8019D298; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019D214; -extern short D_8019D29C; -extern short D_8019D29E; -extern short D_8019D2A0; -extern s16 D_8019D28C; -extern s16 D_8019D28E; -extern s16 D_8019D290; -extern s16 D_8019D284; -extern s16 D_8019D286; -extern s16 D_8019D288; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019D294); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019D296); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019D298); - (*(s16 *)&D_8019D29C) = buf[0]; - (*(s16 *)&D_8019D29E) = buf[1]; - (*(s16 *)&D_8019D2A0) = buf[2]; - D_8019D28C = D_80114F30 + buf[0]; - D_8019D214 = 0; - D_8019D28E = D_80114F34 + buf[1]; - D_8019D290 = D_80114F38 + buf[2]; - D_8019D284 = D_80114F24 + buf[0]; - D_8019D286 = D_80114F28 + buf[1]; - D_8019D288 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019D234; -extern SV4 D_8019D23C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019D23C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019D234 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019D23C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019D23C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019D234) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019D23C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019D25C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019D25C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019D214; -extern s16 D_8019D3B8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019D214 = D_8019D214 + 1; - if (D_8019D214 >= 0x1F) { - D_8019D3B8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019D214; -extern s16 D_8019D3B8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019D214 = D_8019D214 + 1; - if (0x18 < D_8019D214) { - func_8012A4BC(); - D_8019D3B8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019D214; -extern void (*D_8019D258)(void); -extern short D_8019D29C; -extern short D_8019D29E; -extern short D_8019D2A0; -extern s16 D_8019D3B8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019D214 = D_8019D214 + 1; - if (D_8019D214 >= 0x19) { - if (D_8019D258 != 0) { - (*D_8019D258)(); - } else { - D_80114F30 = D_80114F30 + D_8019D29C; - D_80114F34 = D_80114F34 + D_8019D29E; - D_80114F38 = D_80114F38 + D_8019D2A0; - D_80114F24 = D_80114F24 + D_8019D29C; - D_80114F28 = D_80114F28 + D_8019D29E; - D_80114F2C = D_80114F2C + D_8019D2A0; - func_8012A4BC(); - } - D_8019D3B8 = 0; - } -} - - - -extern void (*D_801819B4[])(void); - -void func_8017BE60(void *a0) { - D_801819B4[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CD9C); - - -extern void (*D_80181A10[])(void); - -void func_8017CDBC(void *a0) { - D_80181A10[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CDF8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE3C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80181A18[])(void); - -void func_8017CE60(void *a0) { - D_80181A18[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CE9C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEDC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CF58); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CFA8); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017CFD0); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D008); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D030); - - -extern void (*D_80181A30[])(void); - -void func_8017D0C8(void *a0) { - D_80181A30[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D104); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D1C0); - - -s32 func_8017D398(void) { - return 129; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D3A0); - - -extern void (*D_80181A78[])(void); - -void func_8017D508(void *a0) { - D_80181A78[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80181A80[])(void); - -void func_8017D544(void *a0) { - D_80181A80[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80181A88[])(void); - -void func_8017D580(void *a0) { - D_80181A88[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D5BC); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D688); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D708); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D824); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D8B8); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D92C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D96C); - -void func_8017D9D8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017D9E0); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DA3C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DA78); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DADC); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DC3C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DE20); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_801734BC", func_8017DEDC); - diff --git a/src/ov_SC06_027/ov_SC06_027_jr_80178D40.c b/src/ov_SC06_027/ov_SC06_027_jr_80178D40.c new file mode 100644 index 000000000..5c2bac32f --- /dev/null +++ b/src/ov_SC06_027/ov_SC06_027_jr_80178D40.c @@ -0,0 +1,4323 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801811BC[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019C580; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801811B0[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_801811F4[]; +extern unsigned short D_801811FC[]; +extern unsigned short D_80181204[]; +extern unsigned char D_8019C588[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019C580; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018120C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019C6BC; +extern M2C_UNK D_8019C6C0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019C648; +extern void (*D_8018123C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019C6C4[]; +extern u8 D_8019C6CC[]; +extern u8 D_8019C67C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181244[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181260[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181268[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801812D0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181274; +extern u8 D_80181280; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80181304[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018130C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181360[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181394[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181384[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801813B0; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80181428[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181430[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181438[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181440[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181448[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181450[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018145C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181468[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181474[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181484[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181494[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018149C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801814A4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801814AC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801814B4[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801814BC[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801814C4[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801814CC[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801814D4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801814DC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801814E4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801814EC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801814F4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801814FC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80181504[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018150C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80181514[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018151C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80181524[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018152C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181534[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018153C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181544[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181588[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018154C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801815B8[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801815F4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018164C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018165C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80181664[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_801817CC[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801817D8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_8019BC90; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_8019D3B8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019CE00; +extern short D_8019D42C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_8019D42C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_8019D42C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019CE00 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_8019D42C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_8019D388 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_8019D388 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_8019D42C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_8019D42C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019D25C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019CE04; + extern s32 D_8019D218; + extern s16 D_8019D21C; + extern s16 D_8019D220; + extern s16 D_8019D224; + extern s16 D_8019D228; + extern s32 D_8019D230; + extern s32 D_8019D234; + extern s32 D_8019D244; + extern s16 D_8019D248; + extern s16 D_8019D24C; + extern s32 D_8019D250; + extern s32 D_8019D258; + extern s32 D_8019D25C[10]; + extern s32 D_8019D2D0; + extern s16 D_8019D388; + extern s32 D_8019D3B4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_8019D388; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019D218); + D_8019D218 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019D224, D_8019D228 ? 0x48 : 0x40); + (*(s16*)&D_8019D42C) = 2; + break; + case 0: + func_80179B28(D_8019D218); + D_8019D218 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019D21C, D_8019D220 ? 0x48 : 0x40); + (*(s16*)&D_8019D42C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019D2D0 != 0) { + func_80179B28(D_8019D218); + D_8019D218 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019D21C, D_8019D220 ? 0x48 : 0x40); + (*(s16*)&D_8019D42C) = 1; + } else { + (*(s16*)&D_8019D42C) = 3; + } + break; + case 0x32: + func_80179B28(D_8019D218); + D_8019D218 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019D21C, + D_8019D220 ? 0x48 : 0x40); + (*(s16*)&D_8019D42C) = 1; + break; + case 2: + func_80179B28(D_8019D218); + if (D_8019D230 != 0) { + D_8019CE00 = D_8019D230; + D_8019D230 = 0; + (*(s16*)&D_8019D42C) = 3; + return; + } + (*(s16*)&D_8019D42C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_8019D42C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_8019D42C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_8019D42C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_8019D42C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_8019D42C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x1B: + D_8019D250 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_8019D42C) = 4; + D_8019CE04 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_8019D42C) = 5; + D_8019D244 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019D244 = (s32)func_8017A3B0; + (*(s16*)&D_8019D42C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x24: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019D42C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_8019D42C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_8019D42C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D42C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D42C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_8019D42C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019D42C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_8019D42C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_8019D42C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019D234); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019D234); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019D234); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019D234); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x4E: + D_8019D258 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x2B: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_8019D42C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_8019D3B4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x34: + (*(s16*)&D_8019D42C) = 3; + D_8019CE00 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019D230 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_8019D42C) = 3; + D_8019CE00 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_8019D42C) = 3; + D_8019CE00 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019CE00 = *(s32 *)(D_8019CE00 + 4); + return; + case 0x37: + (*(s16*)&D_8019D42C) = 3; + D_8019D21C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019D220 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_8019D42C) = 3; + D_8019D224 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019D228 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_8019D42C) = 3; + D_8019D21C = w1; + D_8019D220 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_8019D42C) = 3; + D_8019D224 = w2; + D_8019D228 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x43: + D_8019D244 = (s32)func_8017A3D8; + D_8019D24C = 0; + (*(s16*)&D_8019D42C) = 5; + D_8019D248 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_8019D42C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_8019D42C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019D25C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_8019D42C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019D25C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_8019D42C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019D25C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_8019D42C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019D25C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_8019D42C) = 3; + break; + default: + break; + } +Lend: + D_8019CE00 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019D22C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019D22C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019D22C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019D22C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019D254; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019D254 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019D210; + +s32 func_8017A3B0(void) { + switch (D_8019D210) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019D24C; +extern short D_8019D248; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019D24C) { + case 0: + func_800D0CA0(1); + D_8019D24C = D_8019D24C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019D248; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019D24C = D_8019D24C + 1; + if (D_8019D24C < 0x1E) { + return 0; + } + D_8019D24C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019D28C; + extern s16 D_8019D28E; + extern s16 D_8019D290; + extern s16 D_8019D284; + extern s16 D_8019D286; + extern s16 D_8019D288; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019D28C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019D28E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019D290, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019D284, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019D286, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019D288, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019D214; +extern u16 D_8019D294; +extern u16 D_8019D296; +extern u16 D_8019D298; +extern s16 D_8019D3B8; + +void func_8017B1D8(void) { + func_8012A418(); + D_8019D3B8 = 0; + D_8019D214 = 0; + D_8019D294 = D_80126B5E; + D_8019D296 = D_80126B62; + D_8019D298 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181914[]; + extern s16 D_8019D28C; + extern s16 D_8019D284; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181914[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181914[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019D28C; + s16 *p78C = &D_8019D284; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_8019D3B8 = 1; + D_8019D214 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019D234; + extern SV4_8017B368 D_8019D23C; + extern s16 D_8019D28C; + extern s16 D_8019D284; + extern u16 D_80181914; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019D234; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019D23C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80181914)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80181914)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019D28C) = loc0; + (*(SV4_8017B368 *)&D_8019D284) = loc1; + D_8019D3B8 = 1; + D_8019D214 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80181914[]; + extern s16 D_8019D28C; + extern s16 D_8019D28E; + extern s16 D_8019D290; + extern s16 D_8019D284; + extern s16 D_8019D286; + extern s16 D_8019D288; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80181914[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80181914[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019D28C; + s16 *p78C = &D_8019D284; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019D28E; + v798 = D_8019D290; + v78C = *p78C; + v78E = D_8019D286; + v790 = D_8019D288; + __asm__ __volatile__(""); + D_8019D3B8 = 1; + D_8019D214 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019D214; +extern s16 D_8019D28C; +extern s16 D_8019D28E; +extern s16 D_8019D290; +extern s16 D_8019D284; +extern s16 D_8019D286; +extern s16 D_8019D288; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019D214 = 0; + D_8019D28C = (s16) D_80114F30; + D_8019D28E = (s16) D_80114F34; + D_8019D290 = (s16) D_80114F38; + D_8019D284 = (s16) D_80114F24; + D_8019D286 = (s16) D_80114F28; + D_8019D288 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019D2A4; +extern s16 D_8019D2A6; +extern s16 D_8019D2A8; +extern s16 D_8019D2AC; +extern s16 D_8019D2AE; +extern s16 D_8019D2B0; + +void func_8017B824(void) { + D_8019D2A4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019D2A6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019D2A8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019D2AC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019D2AE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019D2B0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019D2A4; +extern s16 D_8019D2A6; +extern s16 D_8019D2A8; +extern s16 D_8019D2AC; +extern s16 D_8019D2AE; +extern s16 D_8019D2B0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019D2A4; + D_80114F34 = D_8019D2A6; + D_80114F38 = D_8019D2A8; + D_80114F24 = D_8019D2AC; + D_80114F28 = D_8019D2AE; + D_80114F2C = D_8019D2B0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019D28C), src[8..15] -> (*(S8_8017B8E8 *)&D_8019D284) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019D28C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019D284) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019D294; +extern u16 D_8019D296; +extern u16 D_8019D298; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019D214; +extern short D_8019D29C; +extern short D_8019D29E; +extern short D_8019D2A0; +extern s16 D_8019D28C; +extern s16 D_8019D28E; +extern s16 D_8019D290; +extern s16 D_8019D284; +extern s16 D_8019D286; +extern s16 D_8019D288; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019D294); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019D296); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019D298); + (*(s16 *)&D_8019D29C) = buf[0]; + (*(s16 *)&D_8019D29E) = buf[1]; + (*(s16 *)&D_8019D2A0) = buf[2]; + D_8019D28C = D_80114F30 + buf[0]; + D_8019D214 = 0; + D_8019D28E = D_80114F34 + buf[1]; + D_8019D290 = D_80114F38 + buf[2]; + D_8019D284 = D_80114F24 + buf[0]; + D_8019D286 = D_80114F28 + buf[1]; + D_8019D288 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019D234; +extern SV4 D_8019D23C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019D23C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019D234 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019D23C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019D23C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019D234) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019D23C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019D25C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019D25C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019D214; +extern s16 D_8019D3B8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019D214 = D_8019D214 + 1; + if (D_8019D214 >= 0x1F) { + D_8019D3B8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019D214; +extern s16 D_8019D3B8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019D214 = D_8019D214 + 1; + if (0x18 < D_8019D214) { + func_8012A4BC(); + D_8019D3B8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019D214; +extern void (*D_8019D258)(void); +extern short D_8019D29C; +extern short D_8019D29E; +extern short D_8019D2A0; +extern s16 D_8019D3B8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019D214 = D_8019D214 + 1; + if (D_8019D214 >= 0x19) { + if (D_8019D258 != 0) { + (*D_8019D258)(); + } else { + D_80114F30 = D_80114F30 + D_8019D29C; + D_80114F34 = D_80114F34 + D_8019D29E; + D_80114F38 = D_80114F38 + D_8019D2A0; + D_80114F24 = D_80114F24 + D_8019D29C; + D_80114F28 = D_80114F28 + D_8019D29E; + D_80114F2C = D_80114F2C + D_8019D2A0; + func_8012A4BC(); + } + D_8019D3B8 = 0; + } +} + + + +extern void (*D_801819B4[])(void); + +void func_8017BE60(void *a0) { + D_801819B4[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CD9C); + + +extern void (*D_80181A10[])(void); + +void func_8017CDBC(void *a0) { + D_80181A10[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CDF8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE3C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80181A18[])(void); + +void func_8017CE60(void *a0) { + D_80181A18[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CE9C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEDC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CF58); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CFA8); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017CFD0); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D008); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D030); + + +extern void (*D_80181A30[])(void); + +void func_8017D0C8(void *a0) { + D_80181A30[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D104); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D1C0); + + +s32 func_8017D398(void) { + return 129; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D3A0); + + +extern void (*D_80181A78[])(void); + +void func_8017D508(void *a0) { + D_80181A78[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80181A80[])(void); + +void func_8017D544(void *a0) { + D_80181A80[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80181A88[])(void); + +void func_8017D580(void *a0) { + D_80181A88[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D5BC); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D688); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D708); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D824); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D8B8); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D92C); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D96C); + +void func_8017D9D8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017D9E0); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DA3C); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DA78); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DADC); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DC3C); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DE20); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_80178D40", func_8017DEDC); + + diff --git a/src/ov_SC06_029/ov_SC06_029_jr_801734BC.c b/src/ov_SC06_029/ov_SC06_029_jr_801734BC.c index e5b0f677e..53b232653 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_801734BC.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_801734BC.c @@ -3084,1665 +3084,3 @@ void func_80178D18(void) { D_801E218C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801DCB4C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801DCB4C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801DCB4C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801DCB4C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801DCB74; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801DCB74 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801DCB30; - -s32 func_8017A3B0(void) { - switch (D_801DCB30) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801DCBAC; - extern s16 D_801DCBAE; - extern s16 D_801DCBB0; - extern s16 D_801DCBA4; - extern s16 D_801DCBA6; - extern s16 D_801DCBA8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801DCBAC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801DCBAE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801DCBB0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801DCBA4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801DCBA6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801DCBA8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801DCB34; -extern u16 D_801DCBB4; -extern u16 D_801DCBB6; -extern u16 D_801DCBB8; -extern s16 D_801E2118; - -void func_8017B1D8(void) { - func_8012A418(); - D_801E2118 = 0; - D_801DCB34 = 0; - D_801DCBB4 = D_80126B5E; - D_801DCBB6 = D_80126B62; - D_801DCBB8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018FEA8[]; - extern s16 D_801DCBAC; - extern s16 D_801DCBA4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801DCBAC; - s16 *p78C = &D_801DCBA4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801E2118 = 1; - D_801DCB34 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801DCB54; - extern SV4_8017B368 D_801DCB5C; - extern s16 D_801DCBAC; - extern s16 D_801DCBA4; - extern u16 D_8018FEA8; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801DCB54; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801DCB5C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018FEA8)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018FEA8)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801DCBAC) = loc0; - (*(SV4_8017B368 *)&D_801DCBA4) = loc1; - D_801E2118 = 1; - D_801DCB34 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018FEA8[]; - extern s16 D_801DCBAC; - extern s16 D_801DCBAE; - extern s16 D_801DCBB0; - extern s16 D_801DCBA4; - extern s16 D_801DCBA6; - extern s16 D_801DCBA8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801DCBAC; - s16 *p78C = &D_801DCBA4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801DCBAE; - v798 = D_801DCBB0; - v78C = *p78C; - v78E = D_801DCBA6; - v790 = D_801DCBA8; - __asm__ __volatile__(""); - D_801E2118 = 1; - D_801DCB34 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801DCB34; -extern s16 D_801DCBAC; -extern s16 D_801DCBAE; -extern s16 D_801DCBB0; -extern s16 D_801DCBA4; -extern s16 D_801DCBA6; -extern s16 D_801DCBA8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801DCB34 = 0; - D_801DCBAC = (s16) D_80114F30; - D_801DCBAE = (s16) D_80114F34; - D_801DCBB0 = (s16) D_80114F38; - D_801DCBA4 = (s16) D_80114F24; - D_801DCBA6 = (s16) D_80114F28; - D_801DCBA8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801DCBC4; -extern s16 D_801DCBC6; -extern s16 D_801DCBC8; -extern s16 D_801DCBCC; -extern s16 D_801DCBCE; -extern s16 D_801DCBD0; - -void func_8017B824(void) { - D_801DCBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801DCBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801DCBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801DCBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801DCBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801DCBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801DCBC4; -extern s16 D_801DCBC6; -extern s16 D_801DCBC8; -extern s16 D_801DCBCC; -extern s16 D_801DCBCE; -extern s16 D_801DCBD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801DCBC4; - D_80114F34 = D_801DCBC6; - D_80114F38 = D_801DCBC8; - D_80114F24 = D_801DCBCC; - D_80114F28 = D_801DCBCE; - D_80114F2C = D_801DCBD0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801DCBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801DCBA4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801DCBAC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801DCBA4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801DCBB4; -extern u16 D_801DCBB6; -extern u16 D_801DCBB8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801DCB34; -extern short D_801DCBBC; -extern short D_801DCBBE; -extern short D_801DCBC0; -extern s16 D_801DCBAC; -extern s16 D_801DCBAE; -extern s16 D_801DCBB0; -extern s16 D_801DCBA4; -extern s16 D_801DCBA6; -extern s16 D_801DCBA8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801DCBB4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801DCBB6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801DCBB8); - (*(s16 *)&D_801DCBBC) = buf[0]; - (*(s16 *)&D_801DCBBE) = buf[1]; - (*(s16 *)&D_801DCBC0) = buf[2]; - D_801DCBAC = D_80114F30 + buf[0]; - D_801DCB34 = 0; - D_801DCBAE = D_80114F34 + buf[1]; - D_801DCBB0 = D_80114F38 + buf[2]; - D_801DCBA4 = D_80114F24 + buf[0]; - D_801DCBA6 = D_80114F28 + buf[1]; - D_801DCBA8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801DCB54; -extern SV4 D_801DCB5C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801DCB5C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801DCB54 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801DCB5C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801DCB5C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801DCB54) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801DCB5C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801DCB7C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801DCB7C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801DCB34; -extern s16 D_801E2118; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801DCB34 = D_801DCB34 + 1; - if (D_801DCB34 >= 0x1F) { - D_801E2118 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801DCB34; -extern s16 D_801E2118; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801DCB34 = D_801DCB34 + 1; - if (0x18 < D_801DCB34) { - func_8012A4BC(); - D_801E2118 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801DCB34; -extern void (*D_801DCB78)(void); -extern short D_801DCBBC; -extern short D_801DCBBE; -extern short D_801DCBC0; -extern s16 D_801E2118; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801DCB34 = D_801DCB34 + 1; - if (D_801DCB34 >= 0x19) { - if (D_801DCB78 != 0) { - (*D_801DCB78)(); - } else { - D_80114F30 = D_80114F30 + D_801DCBBC; - D_80114F34 = D_80114F34 + D_801DCBBE; - D_80114F38 = D_80114F38 + D_801DCBC0; - D_80114F24 = D_80114F24 + D_801DCBBC; - D_80114F28 = D_80114F28 + D_801DCBBE; - D_80114F2C = D_80114F2C + D_801DCBC0; - func_8012A4BC(); - } - D_801E2118 = 0; - } -} - - - -extern void (*D_8018FF48[])(void); - -void func_8017BE60(void *a0) { - D_8018FF48[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C068); - - -extern void (*D_8018FFA8[])(void); - -void func_8017C114(void *a0) { - D_8018FFA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C43C); - -extern s32 D_801DCCA0; - void func_8017C8D0(void) { - D_801DCCA0 = 0x80; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C8E4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C918); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017C954); - - -extern void (*D_8018FFB0[])(void); - -void func_8017DBFC(void *a0) { - D_8018FFB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017DC38); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017DDE0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017DF74); - -extern void func_8002931C(void); - void func_8017E22C(void) { - ((void (*)(s32))func_8002931C)(0x4740000); - } - - - -extern void (*D_80190028[])(void); - -void func_8017E24C(void *a0) { - D_80190028[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E288); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E2CC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80190030[])(void); - -void func_8017E2F0(void *a0) { - D_80190030[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E32C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017E36C(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern s32 func_800D1EBC(void); - void func_8017E3E8(void) { - func_800D1EBC(); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern M2C_UNK D_801901CC; - -void func_8017E408(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801901CC, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_801901D0; - void func_8017E430(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801901D0, 0x1000000); - } - - - -extern void (*D_801901D8[])(void); - -void func_8017E458(void *a0) { - D_801901D8[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E494); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E584); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E610); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E640); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E680); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E6B0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E6E0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E770); - - -extern void (*D_801901E0[])(void); - -void func_8017E800(void *a0) { - D_801901E0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E83C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E8DC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017E95C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EB24); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EBC4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EDA8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EE10); - -void func_8017EEFC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EF04); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017EF34); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017F300); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017F330); - -void func_8017F970(s32 arg0) { - if (arg0 != 0) { - *(s32 *)(arg0 + 0xE0) = 1; - } - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017F984); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017F9C0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8017FE58); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180030); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180198); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801801D8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801804C8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801808C4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801809D4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180A70); - -void func_80180E58(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180E60); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180EA8); - -extern s32 func_8018B1E0(s32 arg); - void func_80180EC8(void) { - func_8018B1E0(0x5); - } - - -extern s32 func_8018B20C(void); - void func_80180EE8(void) { - func_8018B20C(); - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180F08); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180F4C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180F88); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80180FE0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181170); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181268); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801812AC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181334); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181378); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801814B0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181708); - -extern void (*D_8019073C[])(void); - -void func_8018180C(void *a0) { - D_8019073C[*(u8 *)((s32)a0 + 0x4)](); -} - - - -// @class: struct -// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) - -extern code_fn D_801907B4[]; - -extern s32 func_80181DF8(s32 a0); - -void func_80181848(int param_1) -{ - D_801907B4[*(unsigned short *)(param_1 + 2)](); - ((void (*)(int))func_80181DF8)(param_1); - return; -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181898); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181964); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181AC0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181C04); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181D40); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181D94); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80181DF8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80182334); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80182388); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801825D8); - - -extern void (*D_801908F8[])(void); - -void func_801827D0(void *a0) { - D_801908F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018280C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801828E4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80182BC8); - - -extern void (*D_80190940[])(void); - -void func_80182D74(void *a0) { - D_80190940[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80182DB0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80182ED8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801833FC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183478); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801834D8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183534); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183848); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801838BC); - - -extern void (*D_801909E4[])(void); - -void func_80183A1C(void *a0) { - D_801909E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183A58); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183B1C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183CB8); - - -extern void (*D_80190A00[])(void); - -void func_80183D48(void *a0) { - D_80190A00[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80183D84); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184084); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184464); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018452C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184564); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184C68); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184E6C); - -void func_80184EA0(s32 arg0) { - if (arg0 != 0) { - *(s32 *)((s32)arg0 + 0x4) |= 0x80000000; - } - } - - - -extern void (*D_80190A18[])(void); - -void func_80184EC0(void *a0) { - D_80190A18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184EFC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80184FF8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185214); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801852E4); - -extern void (*D_80190A20[])(void); - -void func_8018562C(void *a0) { - D_80190A20[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190A28[])(void); - -void func_80185668(void *a0) { - D_80190A28[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801856A4(s32 *a0, s32 a1) { - *(s32 *)((s32)a0 + 0x0) = a1; - *(s8 *)((s32)a0 + 0x7) = 0; - *(s16 *)((s32)a0 + 0x4) = (*(s32 *)((s32)a1 + 0x4)) & 0x3F; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801856C0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801857A4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801859F4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185C6C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185C88); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185D44); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185E00); - - -extern void (*D_80190A30[])(void); - -void func_80185F08(void *a0) { - D_80190A30[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_80185F44(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80185F4C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186044); - -extern void func_8014C6D0(void); -extern s32 func_8012AD50(void *a0); -extern s16 D_80126D20; - -void func_801860EC(s32 *a0) { - ((void (*)(s32 *))func_8014C6D0)(a0); - D_80126D20 = 0; - ((s32 (*)(s32))func_8012AD50)((s32)a0); -} - - -void func_80186124(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018612C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018615C); - -extern s16 D_801152A0; - void func_8018618C(s16 arg0) { - D_801152A0 = arg0; - } - - -s32 func_8018619C(void) { - return 0x82; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801861A4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186214); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801862C0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186334); - -void func_801863C0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801863C8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018641C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186470); - -void func_8018653C(s32 *a0, s32 *a1) { - *(u16 *)((s32)a1 + 0x8) = *(u16 *)((s32)a0 + 0x6); - *(u16 *)((s32)a1 + 0xA) = *(u16 *)((s32)a0 + 0xA) + *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0xA); - *(u16 *)((s32)a1 + 0xC) = *(u16 *)((s32)a0 + 0xE); - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018656C); - - -extern void (*D_80192174[])(void); - -void func_80186674(void *a0) { - D_80192174[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801866B0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801867D0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186960); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186980); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801869F8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186A28); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186A58); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186A88); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186AB8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186B00); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186B6C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186BD4); - -extern s32 D_801DFF78; -extern void func_8012E88C(u8 *a0); - -void func_80186BEC(void) { - ((void (*)(s32))func_8012E88C)(*(s32 *)&D_801DFF78); -} - - -extern s32 D_801DFF78; -extern void func_8012E8A8(u8 *a0); - -void func_80186C14(void) { - ((void (*)(s32))func_8012E8A8)(D_801DFF78); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186C3C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186C88); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186CC4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186D30); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186D64); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186DA0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186E18); - -extern s32 D_801DFF7C; -extern void func_8012E88C(u8 *a0); - -void func_80186F9C(void) { - ((void (*)(s32))func_8012E88C)(D_801DFF7C); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80186FC4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018702C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187094); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801870B4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801870D4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187148); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801871E8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187230); - -extern void func_800D0C48(s32 arg); - void func_801872C4(void) { - func_800D0C48(0x1); - } - - -extern s32 func_8001AAA0(s32 arg); - s32 func_801872E4(void) { - return func_8001AAA0(0x95) != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187304); - -extern s32 D_801DFF74; -extern void func_8012E8A8(u8 *a0); - -void func_8018736C(void) { - ((void (*)(s32))func_8012E8A8)(D_801DFF74); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187394); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801873F4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018743C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187660); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187A04); - -extern s32 D_801DFF88; -extern void func_8012E88C(u8 *a0); - -void func_80187B30(void) { - ((void (*)(s32))func_8012E88C)(D_801DFF88); -} - - -extern s32 D_801DFF88; -extern void func_8012E8A8(u8 *a0); - -void func_80187B58(void) { - ((void (*)(s32))func_8012E8A8)(D_801DFF88); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187B80); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187C2C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187CE4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187D64); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80187E84); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801881D8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188240); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801883A0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801883FC); - -extern s32 func_8017C8E4(void); - s32 func_80188470(void) { - return func_8017C8E4() != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188490); - -extern s16 D_801DFFDC; - void func_80188548(void) { - D_801DFFDC += 1; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188568); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801885C0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018865C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018884C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801888A8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188904); - -extern void func_8012A018(s32 a, s32 b); - extern void func_80188BB0(); - void func_80188960(void) { - ((void (*)(void *, s32))func_8012A018)((void *)func_80188BB0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188988); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188A90); - - -extern void (*D_801921BC[])(void); - -void func_80188BB0(void *a0) { - D_801921BC[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_801921C8[])(void); - -void func_80188BEC(void *a0) { - D_801921C8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801921D0[])(void); - -void func_80188C28(void *a0) { - D_801921D0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801921D8[])(void); - -void func_80188C64(void *a0) { - D_801921D8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801921E0[])(void); - -void func_80188CA0(void *a0) { - D_801921E0[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192210[])(void); - -void func_80188CDC(void *a0) { - D_80192210[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80192298[])(void); - -void func_80188D18(void *a0) { - D_80192298[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801922A4[])(void); - -void func_80188D54(void *a0) { - D_801922A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80188D90); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189148); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801891D0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189244); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189440); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_801898CC); - - -extern void (*D_801922F4[])(void); - -void func_80189B38(void *a0) { - D_801922F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189B74); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189BB4); - -void func_80189CE4(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189CEC); - -void func_80189E10(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189E18); - -void func_80189F50(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_80189F58); - -void func_8018A07C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A084); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A180); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A27C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A314); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A3CC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A41C); - -void func_8018A564(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A56C); - -void func_8018A5E8(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A5F0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A6A4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A7C4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A8D4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018A9FC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018AA60); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018ABC0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018ADA4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018AE60); - - -extern void (*D_801D7288[])(void); - -void func_8018AF0C(void *a0) { - D_801D7288[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018AF48); - -extern void func_8018B188(); - void func_8018B148(void) { - func_8018B188(); - } - - -extern void func_80146C3C(void); - void func_8018B168(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B188); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B1E0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B20C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B250); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B2A8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B2F8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B364); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B4B8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B50C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B530); - - -extern void (*D_801D72C8[])(void); - -void func_8018B574(void *a0) { - D_801D72C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B5B0); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B6FC); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B774); - - -void func_8018B7A4(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B7B8); - - -extern void (*D_801D7300[])(void); - -void func_8018B820(void *a0) { - D_801D7300[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B85C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B8A8); - -void func_8018B8F0(void) { -} - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018B8F8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BA5C); - - -extern void (*D_801D7358[])(void); - -void func_8018BDD8(void *a0) { - D_801D7358[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BE14); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BE68); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BF1C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BF88); - - -extern s32 D_801E2018; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_8018BFC8(s32 a0, s32 a1) { - D_801E2018 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018BFF8); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_801734BC", func_8018C23C); - - -extern void (*D_801D9980[])(void); - -void func_8018C4DC(void *a0) { - D_801D9980[*(u16 *)((s32)a0 + 0x2)](); -} - - diff --git a/src/ov_SC06_029/ov_SC06_029_jr_80178D40.c b/src/ov_SC06_029/ov_SC06_029_jr_80178D40.c new file mode 100644 index 000000000..b8ee83d5b --- /dev/null +++ b/src/ov_SC06_029/ov_SC06_029_jr_80178D40.c @@ -0,0 +1,5111 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018F750[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801DBEA0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018F744[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018F788[]; +extern unsigned short D_8018F790[]; +extern unsigned short D_8018F798[]; +extern unsigned char D_801DBEA8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801DBEA0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018F7A0[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801DBFDC; +extern M2C_UNK D_801DBFE0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801DBF68; +extern void (*D_8018F7D0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801DBFE4[]; +extern u8 D_801DBFEC[]; +extern u8 D_801DBF9C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018F7D8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018F7F4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018F7FC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018F864[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018F808; +extern u8 D_8018F814; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018F898[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018F8A0[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018F8F4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018F928[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018F918[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018F944; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018F9BC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018F9C4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018F9CC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018F9D4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018F9DC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018F9E4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018F9F0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018F9FC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018FA08[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018FA18[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018FA28[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018FA30[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018FA38[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018FA40[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018FA48[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018FA50[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018FA58[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018FA60[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018FA68[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018FA70[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018FA78[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018FA80[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018FA88[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018FA90[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018FA98[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018FAA0[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018FAA8[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018FAB0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018FAB8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018FAC0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018FAC8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018FAD0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018FAD8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018FB1C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018FAE0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018FB4C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018FB88[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018FBE0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018FBF0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018FBF8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018FD60[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018FD6C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801DB30C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801E2118; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801DC720; +extern short D_801E218C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801E218C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801E218C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801DC720 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801E218C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801E20E8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801E20E8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801E218C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801E218C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801DCB7C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801DC724; + extern s32 D_801DCB38; + extern s16 D_801DCB3C; + extern s16 D_801DCB40; + extern s16 D_801DCB44; + extern s16 D_801DCB48; + extern s32 D_801DCB50; + extern s32 D_801DCB54; + extern s32 D_801DCB64; + extern s16 D_801DCB68; + extern s16 D_801DCB6C; + extern s32 D_801DCB70; + extern s32 D_801DCB78; + extern s32 D_801DCB7C[10]; + extern s32 D_801E2030; + extern s16 D_801E20E8; + extern s32 D_801E2114; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801E20E8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801DCB38); + D_801DCB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801DCB44, D_801DCB48 ? 0x48 : 0x40); + (*(s16*)&D_801E218C) = 2; + break; + case 0: + func_80179B28(D_801DCB38); + D_801DCB38 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801DCB3C, D_801DCB40 ? 0x48 : 0x40); + (*(s16*)&D_801E218C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801E2030 != 0) { + func_80179B28(D_801DCB38); + D_801DCB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801DCB3C, D_801DCB40 ? 0x48 : 0x40); + (*(s16*)&D_801E218C) = 1; + } else { + (*(s16*)&D_801E218C) = 3; + } + break; + case 0x32: + func_80179B28(D_801DCB38); + D_801DCB38 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801DCB3C, + D_801DCB40 ? 0x48 : 0x40); + (*(s16*)&D_801E218C) = 1; + break; + case 2: + func_80179B28(D_801DCB38); + if (D_801DCB50 != 0) { + D_801DC720 = D_801DCB50; + D_801DCB50 = 0; + (*(s16*)&D_801E218C) = 3; + return; + } + (*(s16*)&D_801E218C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801E218C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801E218C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E218C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801E218C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801E218C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801E218C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E218C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801E218C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801E218C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801E218C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801E218C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x1B: + D_801DCB70 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801E218C) = 4; + D_801DC724 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801E218C) = 5; + D_801DCB64 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801DCB64 = (s32)func_8017A3B0; + (*(s16*)&D_801E218C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x24: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E218C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801E218C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801E218C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E218C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E218C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801E218C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E218C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801E218C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801E218C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801DCB54); + (*(s16*)&D_801E218C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801DCB54); + (*(s16*)&D_801E218C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801DCB54); + (*(s16*)&D_801E218C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801DCB54); + (*(s16*)&D_801E218C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + break; + case 0x4E: + D_801DCB78 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x2B: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801E218C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801E2114 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801E218C) = 3; + break; + case 0x34: + (*(s16*)&D_801E218C) = 3; + D_801DC720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801DCB50 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801E218C) = 3; + D_801DC720 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801E218C) = 3; + D_801DC720 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801DC720 = *(s32 *)(D_801DC720 + 4); + return; + case 0x37: + (*(s16*)&D_801E218C) = 3; + D_801DCB3C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801DCB40 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801E218C) = 3; + D_801DCB44 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801DCB48 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801E218C) = 3; + D_801DCB3C = w1; + D_801DCB40 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801E218C) = 3; + D_801DCB44 = w2; + D_801DCB48 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + case 0x43: + D_801DCB64 = (s32)func_8017A3D8; + D_801DCB6C = 0; + (*(s16*)&D_801E218C) = 5; + D_801DCB68 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801E218C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801E218C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801E218C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801DCB7C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801E218C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801DCB7C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801E218C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801DCB7C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801E218C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801DCB7C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801E218C) = 3; + break; + default: + break; + } +Lend: + D_801DC720 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801DCB4C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801DCB4C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801DCB4C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801DCB4C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801DCB74; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801DCB74 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801DCB30; + +s32 func_8017A3B0(void) { + switch (D_801DCB30) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801DCBAC; + extern s16 D_801DCBAE; + extern s16 D_801DCBB0; + extern s16 D_801DCBA4; + extern s16 D_801DCBA6; + extern s16 D_801DCBA8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801DCBAC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801DCBAE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801DCBB0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801DCBA4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801DCBA6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801DCBA8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801DCB34; +extern u16 D_801DCBB4; +extern u16 D_801DCBB6; +extern u16 D_801DCBB8; +extern s16 D_801E2118; + +void func_8017B1D8(void) { + func_8012A418(); + D_801E2118 = 0; + D_801DCB34 = 0; + D_801DCBB4 = D_80126B5E; + D_801DCBB6 = D_80126B62; + D_801DCBB8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018FEA8[]; + extern s16 D_801DCBAC; + extern s16 D_801DCBA4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801DCBAC; + s16 *p78C = &D_801DCBA4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801E2118 = 1; + D_801DCB34 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801DCB54; + extern SV4_8017B368 D_801DCB5C; + extern s16 D_801DCBAC; + extern s16 D_801DCBA4; + extern u16 D_8018FEA8; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801DCB54; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801DCB5C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018FEA8)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018FEA8)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801DCBAC) = loc0; + (*(SV4_8017B368 *)&D_801DCBA4) = loc1; + D_801E2118 = 1; + D_801DCB34 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018FEA8[]; + extern s16 D_801DCBAC; + extern s16 D_801DCBAE; + extern s16 D_801DCBB0; + extern s16 D_801DCBA4; + extern s16 D_801DCBA6; + extern s16 D_801DCBA8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018FEA8[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801DCBAC; + s16 *p78C = &D_801DCBA4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801DCBAE; + v798 = D_801DCBB0; + v78C = *p78C; + v78E = D_801DCBA6; + v790 = D_801DCBA8; + __asm__ __volatile__(""); + D_801E2118 = 1; + D_801DCB34 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801DCB34; +extern s16 D_801DCBAC; +extern s16 D_801DCBAE; +extern s16 D_801DCBB0; +extern s16 D_801DCBA4; +extern s16 D_801DCBA6; +extern s16 D_801DCBA8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801DCB34 = 0; + D_801DCBAC = (s16) D_80114F30; + D_801DCBAE = (s16) D_80114F34; + D_801DCBB0 = (s16) D_80114F38; + D_801DCBA4 = (s16) D_80114F24; + D_801DCBA6 = (s16) D_80114F28; + D_801DCBA8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801DCBC4; +extern s16 D_801DCBC6; +extern s16 D_801DCBC8; +extern s16 D_801DCBCC; +extern s16 D_801DCBCE; +extern s16 D_801DCBD0; + +void func_8017B824(void) { + D_801DCBC4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801DCBC6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801DCBC8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801DCBCC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801DCBCE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801DCBD0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801DCBC4; +extern s16 D_801DCBC6; +extern s16 D_801DCBC8; +extern s16 D_801DCBCC; +extern s16 D_801DCBCE; +extern s16 D_801DCBD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801DCBC4; + D_80114F34 = D_801DCBC6; + D_80114F38 = D_801DCBC8; + D_80114F24 = D_801DCBCC; + D_80114F28 = D_801DCBCE; + D_80114F2C = D_801DCBD0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801DCBAC), src[8..15] -> (*(S8_8017B8E8 *)&D_801DCBA4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801DCBAC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801DCBA4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801DCBB4; +extern u16 D_801DCBB6; +extern u16 D_801DCBB8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801DCB34; +extern short D_801DCBBC; +extern short D_801DCBBE; +extern short D_801DCBC0; +extern s16 D_801DCBAC; +extern s16 D_801DCBAE; +extern s16 D_801DCBB0; +extern s16 D_801DCBA4; +extern s16 D_801DCBA6; +extern s16 D_801DCBA8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801DCBB4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801DCBB6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801DCBB8); + (*(s16 *)&D_801DCBBC) = buf[0]; + (*(s16 *)&D_801DCBBE) = buf[1]; + (*(s16 *)&D_801DCBC0) = buf[2]; + D_801DCBAC = D_80114F30 + buf[0]; + D_801DCB34 = 0; + D_801DCBAE = D_80114F34 + buf[1]; + D_801DCBB0 = D_80114F38 + buf[2]; + D_801DCBA4 = D_80114F24 + buf[0]; + D_801DCBA6 = D_80114F28 + buf[1]; + D_801DCBA8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801DCB54; +extern SV4 D_801DCB5C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801DCB5C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801DCB54 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801DCB5C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801DCB5C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801DCB54) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801DCB5C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801DCB7C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801DCB7C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801DCB34; +extern s16 D_801E2118; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801DCB34 = D_801DCB34 + 1; + if (D_801DCB34 >= 0x1F) { + D_801E2118 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801DCB34; +extern s16 D_801E2118; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801DCB34 = D_801DCB34 + 1; + if (0x18 < D_801DCB34) { + func_8012A4BC(); + D_801E2118 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801DCB34; +extern void (*D_801DCB78)(void); +extern short D_801DCBBC; +extern short D_801DCBBE; +extern short D_801DCBC0; +extern s16 D_801E2118; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801DCB34 = D_801DCB34 + 1; + if (D_801DCB34 >= 0x19) { + if (D_801DCB78 != 0) { + (*D_801DCB78)(); + } else { + D_80114F30 = D_80114F30 + D_801DCBBC; + D_80114F34 = D_80114F34 + D_801DCBBE; + D_80114F38 = D_80114F38 + D_801DCBC0; + D_80114F24 = D_80114F24 + D_801DCBBC; + D_80114F28 = D_80114F28 + D_801DCBBE; + D_80114F2C = D_80114F2C + D_801DCBC0; + func_8012A4BC(); + } + D_801E2118 = 0; + } +} + + + +extern void (*D_8018FF48[])(void); + +void func_8017BE60(void *a0) { + D_8018FF48[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C068); + + +extern void (*D_8018FFA8[])(void); + +void func_8017C114(void *a0) { + D_8018FFA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C43C); + +extern s32 D_801DCCA0; + void func_8017C8D0(void) { + D_801DCCA0 = 0x80; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C8E4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C918); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017C954); + + +extern void (*D_8018FFB0[])(void); + +void func_8017DBFC(void *a0) { + D_8018FFB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017DC38); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017DDE0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017DF74); + +extern void func_8002931C(void); + void func_8017E22C(void) { + ((void (*)(s32))func_8002931C)(0x4740000); + } + + + +extern void (*D_80190028[])(void); + +void func_8017E24C(void *a0) { + D_80190028[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E288); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017E2CC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80190030[])(void); + +void func_8017E2F0(void *a0) { + D_80190030[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E32C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017E36C(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern s32 func_800D1EBC(void); + void func_8017E3E8(void) { + func_800D1EBC(); + } + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern M2C_UNK D_801901CC; + +void func_8017E408(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801901CC, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_801901D0; + void func_8017E430(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801901D0, 0x1000000); + } + + + +extern void (*D_801901D8[])(void); + +void func_8017E458(void *a0) { + D_801901D8[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E494); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E584); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E610); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E640); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E680); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E6B0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E6E0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E770); + + +extern void (*D_801901E0[])(void); + +void func_8017E800(void *a0) { + D_801901E0[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E83C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E8DC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017E95C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EB24); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EBC4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EDA8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EE10); + +void func_8017EEFC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EF04); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017EF34); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017F300); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017F330); + +void func_8017F970(s32 arg0) { + if (arg0 != 0) { + *(s32 *)(arg0 + 0xE0) = 1; + } + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017F984); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017F9C0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8017FE58); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180030); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180198); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801801D8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801804C8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801808C4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801809D4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180A70); + +void func_80180E58(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180E60); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180EA8); + +extern s32 func_8018B1E0(s32 arg); + void func_80180EC8(void) { + func_8018B1E0(0x5); + } + + +extern s32 func_8018B20C(void); + void func_80180EE8(void) { + func_8018B20C(); + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180F08); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180F4C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180F88); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80180FE0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181170); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181268); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801812AC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181334); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181378); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801814B0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181708); + +extern void (*D_8019073C[])(void); + +void func_8018180C(void *a0) { + D_8019073C[*(u8 *)((s32)a0 + 0x4)](); +} + + + +// @class: struct +// @stuck: none — MATCH (fn-ptr table %lo-fold via extern array of code ptrs) + +extern code_fn D_801907B4[]; + +extern s32 func_80181DF8(s32 a0); + +void func_80181848(int param_1) +{ + D_801907B4[*(unsigned short *)(param_1 + 2)](); + ((void (*)(int))func_80181DF8)(param_1); + return; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181898); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181964); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181AC0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181C04); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181D40); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181D94); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80181DF8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80182334); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80182388); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801825D8); + + +extern void (*D_801908F8[])(void); + +void func_801827D0(void *a0) { + D_801908F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018280C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801828E4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80182BC8); + + +extern void (*D_80190940[])(void); + +void func_80182D74(void *a0) { + D_80190940[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80182DB0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80182ED8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801833FC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183478); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801834D8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183534); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183848); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801838BC); + + +extern void (*D_801909E4[])(void); + +void func_80183A1C(void *a0) { + D_801909E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183A58); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183B1C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183CB8); + + +extern void (*D_80190A00[])(void); + +void func_80183D48(void *a0) { + D_80190A00[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80183D84); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184084); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184464); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018452C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184564); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184C68); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184E6C); + +void func_80184EA0(s32 arg0) { + if (arg0 != 0) { + *(s32 *)((s32)arg0 + 0x4) |= 0x80000000; + } + } + + + +extern void (*D_80190A18[])(void); + +void func_80184EC0(void *a0) { + D_80190A18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184EFC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80184FF8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185214); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801852E4); + +extern void (*D_80190A20[])(void); + +void func_8018562C(void *a0) { + D_80190A20[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80190A28[])(void); + +void func_80185668(void *a0) { + D_80190A28[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801856A4(s32 *a0, s32 a1) { + *(s32 *)((s32)a0 + 0x0) = a1; + *(s8 *)((s32)a0 + 0x7) = 0; + *(s16 *)((s32)a0 + 0x4) = (*(s32 *)((s32)a1 + 0x4)) & 0x3F; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801856C0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801857A4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801859F4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185C6C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185C88); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185D44); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185E00); + + +extern void (*D_80190A30[])(void); + +void func_80185F08(void *a0) { + D_80190A30[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_80185F44(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80185F4C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186044); + +extern void func_8014C6D0(void); +extern s32 func_8012AD50(void *a0); +extern s16 D_80126D20; + +void func_801860EC(s32 *a0) { + ((void (*)(s32 *))func_8014C6D0)(a0); + D_80126D20 = 0; + ((s32 (*)(s32))func_8012AD50)((s32)a0); +} + + +void func_80186124(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018612C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018615C); + +extern s16 D_801152A0; + void func_8018618C(s16 arg0) { + D_801152A0 = arg0; + } + + +s32 func_8018619C(void) { + return 0x82; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801861A4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186214); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801862C0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186334); + +void func_801863C0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801863C8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018641C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186470); + +void func_8018653C(s32 *a0, s32 *a1) { + *(u16 *)((s32)a1 + 0x8) = *(u16 *)((s32)a0 + 0x6); + *(u16 *)((s32)a1 + 0xA) = *(u16 *)((s32)a0 + 0xA) + *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0xA); + *(u16 *)((s32)a1 + 0xC) = *(u16 *)((s32)a0 + 0xE); + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018656C); + + +extern void (*D_80192174[])(void); + +void func_80186674(void *a0) { + D_80192174[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801866B0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801867D0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186960); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186980); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801869F8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186A28); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186A58); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186A88); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186AB8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186B00); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186B6C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186BD4); + +extern s32 D_801DFF78; +extern void func_8012E88C(u8 *a0); + +void func_80186BEC(void) { + ((void (*)(s32))func_8012E88C)(*(s32 *)&D_801DFF78); +} + + +extern s32 D_801DFF78; +extern void func_8012E8A8(u8 *a0); + +void func_80186C14(void) { + ((void (*)(s32))func_8012E8A8)(D_801DFF78); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186C3C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186C88); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186CC4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186D30); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186D64); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186DA0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186E18); + +extern s32 D_801DFF7C; +extern void func_8012E88C(u8 *a0); + +void func_80186F9C(void) { + ((void (*)(s32))func_8012E88C)(D_801DFF7C); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80186FC4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018702C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187094); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801870B4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801870D4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187148); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801871E8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187230); + +extern void func_800D0C48(s32 arg); + void func_801872C4(void) { + func_800D0C48(0x1); + } + + +extern s32 func_8001AAA0(s32 arg); + s32 func_801872E4(void) { + return func_8001AAA0(0x95) != 0; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187304); + +extern s32 D_801DFF74; +extern void func_8012E8A8(u8 *a0); + +void func_8018736C(void) { + ((void (*)(s32))func_8012E8A8)(D_801DFF74); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187394); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801873F4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018743C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187660); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187A04); + +extern s32 D_801DFF88; +extern void func_8012E88C(u8 *a0); + +void func_80187B30(void) { + ((void (*)(s32))func_8012E88C)(D_801DFF88); +} + + +extern s32 D_801DFF88; +extern void func_8012E8A8(u8 *a0); + +void func_80187B58(void) { + ((void (*)(s32))func_8012E8A8)(D_801DFF88); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187B80); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187C2C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187CE4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187D64); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80187E84); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801881D8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188240); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801883A0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801883FC); + +extern s32 func_8017C8E4(void); + s32 func_80188470(void) { + return func_8017C8E4() != 0; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188490); + +extern s16 D_801DFFDC; + void func_80188548(void) { + D_801DFFDC += 1; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188568); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801885C0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018865C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018884C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801888A8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188904); + +extern void func_8012A018(s32 a, s32 b); + extern void func_80188BB0(); + void func_80188960(void) { + ((void (*)(void *, s32))func_8012A018)((void *)func_80188BB0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188988); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188A90); + + +extern void (*D_801921BC[])(void); + +void func_80188BB0(void *a0) { + D_801921BC[*(u8 *)((s32)a0 + 0x4)](); +} + + + +extern void (*D_801921C8[])(void); + +void func_80188BEC(void *a0) { + D_801921C8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801921D0[])(void); + +void func_80188C28(void *a0) { + D_801921D0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801921D8[])(void); + +void func_80188C64(void *a0) { + D_801921D8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801921E0[])(void); + +void func_80188CA0(void *a0) { + D_801921E0[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192210[])(void); + +void func_80188CDC(void *a0) { + D_80192210[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80192298[])(void); + +void func_80188D18(void *a0) { + D_80192298[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801922A4[])(void); + +void func_80188D54(void *a0) { + D_801922A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80188D90); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189148); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801891D0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189244); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189440); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_801898CC); + + +extern void (*D_801922F4[])(void); + +void func_80189B38(void *a0) { + D_801922F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189B74); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189BB4); + +void func_80189CE4(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189CEC); + +void func_80189E10(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189E18); + +void func_80189F50(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_80189F58); + +void func_8018A07C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A084); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A180); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A27C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A314); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A3CC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A41C); + +void func_8018A564(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A56C); + +void func_8018A5E8(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A5F0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A6A4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A7C4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A8D4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018A9FC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018AA60); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018ABC0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018ADA4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018AE60); + + +extern void (*D_801D7288[])(void); + +void func_8018AF0C(void *a0) { + D_801D7288[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018AF48); + +extern void func_8018B188(); + void func_8018B148(void) { + func_8018B188(); + } + + +extern void func_80146C3C(void); + void func_8018B168(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B188); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B1E0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B20C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B250); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B2A8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B2F8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B364); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B4B8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B50C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B530); + + +extern void (*D_801D72C8[])(void); + +void func_8018B574(void *a0) { + D_801D72C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B5B0); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B6FC); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B774); + + +void func_8018B7A4(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B7B8); + + +extern void (*D_801D7300[])(void); + +void func_8018B820(void *a0) { + D_801D7300[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B85C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B8A8); + +void func_8018B8F0(void) { +} + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018B8F8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BA5C); + + +extern void (*D_801D7358[])(void); + +void func_8018BDD8(void *a0) { + D_801D7358[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BE14); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BE68); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BF1C); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BF88); + + +extern s32 D_801E2018; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_8018BFC8(s32 a0, s32 a1) { + D_801E2018 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018BFF8); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_80178D40", func_8018C23C); + + +extern void (*D_801D9980[])(void); + +void func_8018C4DC(void *a0) { + D_801D9980[*(u16 *)((s32)a0 + 0x2)](); +} + + + diff --git a/src/ov_SC06_030/ov_SC06_030_jr_801734BC.c b/src/ov_SC06_030/ov_SC06_030_jr_801734BC.c index 171405163..26fca31cb 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_801734BC.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_801734BC.c @@ -3084,1003 +3084,3 @@ void func_80178D18(void) { D_801BA084 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B9DAC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801B9DAC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801B9DAC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801B9DAC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801B9DD4; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801B9DD4 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801B9D90; - -s32 func_8017A3B0(void) { - switch (D_801B9D90) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017A3D8); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801B9E0C; - extern s16 D_801B9E0E; - extern s16 D_801B9E10; - extern s16 D_801B9E04; - extern s16 D_801B9E06; - extern s16 D_801B9E08; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9E0C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9E0E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9E10, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B9E04, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B9E06, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9E08, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801B9D94; -extern u16 D_801B9E14; -extern u16 D_801B9E16; -extern u16 D_801B9E18; -extern s16 D_801BA010; - -void func_8017B1D8(void) { - func_8012A418(); - D_801BA010 = 0; - D_801B9D94 = 0; - D_801B9E14 = D_80126B5E; - D_801B9E16 = D_80126B62; - D_801B9E18 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185798[]; - extern s16 D_801B9E0C; - extern s16 D_801B9E04; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185798[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185798[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9E0C; - s16 *p78C = &D_801B9E04; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801BA010 = 1; - D_801B9D94 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801B9DB4; - extern SV4_8017B368 D_801B9DBC; - extern s16 D_801B9E0C; - extern s16 D_801B9E04; - extern u16 D_80185798; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801B9DB4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801B9DBC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185798)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185798)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801B9E0C) = loc0; - (*(SV4_8017B368 *)&D_801B9E04) = loc1; - D_801BA010 = 1; - D_801B9D94 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185798[]; - extern s16 D_801B9E0C; - extern s16 D_801B9E0E; - extern s16 D_801B9E10; - extern s16 D_801B9E04; - extern s16 D_801B9E06; - extern s16 D_801B9E08; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185798[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185798[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801B9E0C; - s16 *p78C = &D_801B9E04; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801B9E0E; - v798 = D_801B9E10; - v78C = *p78C; - v78E = D_801B9E06; - v790 = D_801B9E08; - __asm__ __volatile__(""); - D_801BA010 = 1; - D_801B9D94 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B9D94; -extern s16 D_801B9E0C; -extern s16 D_801B9E0E; -extern s16 D_801B9E10; -extern s16 D_801B9E04; -extern s16 D_801B9E06; -extern s16 D_801B9E08; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801B9D94 = 0; - D_801B9E0C = (s16) D_80114F30; - D_801B9E0E = (s16) D_80114F34; - D_801B9E10 = (s16) D_80114F38; - D_801B9E04 = (s16) D_80114F24; - D_801B9E06 = (s16) D_80114F28; - D_801B9E08 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801B9E24; -extern s16 D_801B9E26; -extern s16 D_801B9E28; -extern s16 D_801B9E2C; -extern s16 D_801B9E2E; -extern s16 D_801B9E30; - -void func_8017B824(void) { - D_801B9E24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801B9E26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801B9E28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801B9E2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801B9E2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801B9E30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801B9E24; -extern s16 D_801B9E26; -extern s16 D_801B9E28; -extern s16 D_801B9E2C; -extern s16 D_801B9E2E; -extern s16 D_801B9E30; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801B9E24; - D_80114F34 = D_801B9E26; - D_80114F38 = D_801B9E28; - D_80114F24 = D_801B9E2C; - D_80114F28 = D_801B9E2E; - D_80114F2C = D_801B9E30; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801B9E0C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B9E04) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801B9E0C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801B9E04) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801B9E14; -extern u16 D_801B9E16; -extern u16 D_801B9E18; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801B9D94; -extern short D_801B9E1C; -extern short D_801B9E1E; -extern short D_801B9E20; -extern s16 D_801B9E0C; -extern s16 D_801B9E0E; -extern s16 D_801B9E10; -extern s16 D_801B9E04; -extern s16 D_801B9E06; -extern s16 D_801B9E08; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B9E14); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B9E16); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9E18); - (*(s16 *)&D_801B9E1C) = buf[0]; - (*(s16 *)&D_801B9E1E) = buf[1]; - (*(s16 *)&D_801B9E20) = buf[2]; - D_801B9E0C = D_80114F30 + buf[0]; - D_801B9D94 = 0; - D_801B9E0E = D_80114F34 + buf[1]; - D_801B9E10 = D_80114F38 + buf[2]; - D_801B9E04 = D_80114F24 + buf[0]; - D_801B9E06 = D_80114F28 + buf[1]; - D_801B9E08 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801B9DB4; -extern SV4 D_801B9DBC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B9DBC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801B9DB4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801B9DBC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B9DBC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801B9DB4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801B9DBC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801B9DDC[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801B9DDC; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801B9D94; -extern s16 D_801BA010; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801B9D94 = D_801B9D94 + 1; - if (D_801B9D94 >= 0x1F) { - D_801BA010 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801B9D94; -extern s16 D_801BA010; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B9D94 = D_801B9D94 + 1; - if (0x18 < D_801B9D94) { - func_8012A4BC(); - D_801BA010 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801B9D94; -extern void (*D_801B9DD8)(void); -extern short D_801B9E1C; -extern short D_801B9E1E; -extern short D_801B9E20; -extern s16 D_801BA010; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801B9D94 = D_801B9D94 + 1; - if (D_801B9D94 >= 0x19) { - if (D_801B9DD8 != 0) { - (*D_801B9DD8)(); - } else { - D_80114F30 = D_80114F30 + D_801B9E1C; - D_80114F34 = D_80114F34 + D_801B9E1E; - D_80114F38 = D_80114F38 + D_801B9E20; - D_80114F24 = D_80114F24 + D_801B9E1C; - D_80114F28 = D_80114F28 + D_801B9E1E; - D_80114F2C = D_80114F2C + D_801B9E20; - func_8012A4BC(); - } - D_801BA010 = 0; - } -} - - - -extern void (*D_80185838[])(void); - -void func_8017BE60(void *a0) { - D_80185838[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017C068); - - -extern void (*D_80185898[])(void); - -void func_8017C114(void *a0) { - D_80185898[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017C8D0); - - -extern void (*D_801858F0[])(void); - -void func_8017D7B0(void *a0) { - D_801858F0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017D7EC); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D830(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801858F8[])(void); - -void func_8017D854(void *a0) { - D_801858F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017D890); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D8D0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D94C(void) { - func_800D1EBC(); - } - - - -extern void (*D_80185904[])(void); - -void func_8017D96C(void *a0) { - D_80185904[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017D9A8); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DA24); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DA6C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DA94); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DABC); - - -extern void (*D_80185920[])(void); - -void func_8017DB58(void *a0) { - D_80185920[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DB94); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DC70); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DE08); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017DF70); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017E120); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017EEF0); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017F0A0); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017F268); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017F65C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017F98C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017FBA4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017FCF4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017FDDC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8017FE9C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180058); - - -extern void (*D_80185E2C[])(void); - -void func_801800D4(void *a0) { - D_80185E2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180110); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8018017C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801801E8); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180228); - -extern void func_8001AAA0(s32 arg); - s32 func_80180438(void) { - return ((s32 (*)(s32))func_8001AAA0)(0x7C) != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180458); - -extern void func_800D0C48(s32 arg); - void func_8018047C(void) { - func_800D0C48(0x1); - } - - -extern s32 func_80180C5C(void); - s32 func_8018049C(void) { - return func_80180C5C() != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801804BC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180508); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801805F8); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801806D4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801807B4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_8018081C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801808F0); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180940); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801809DC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180ABC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180B50); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180BBC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180C44); - -extern void func_8001AAA0(s32 arg); - s32 func_80180C5C(void) -{ - func_8001AAA0(0x6F); - } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180C7C); - - -extern void (*D_801B4C84[])(void); - -void func_80180CA4(void *a0) { - D_801B4C84[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180CE0); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180D28); - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_801B4C8C; - -void func_80180D68(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801B4C8C, 0x1000000); -} - - - -extern void (*D_801B4C98[])(void); - -void func_80180D90(void *a0) { - D_801B4C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180DCC); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180ED4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180F14); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80180FF4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_801810D0); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181164); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181588); - - -extern void (*D_801B4D2C[])(void); - -void func_801818FC(void *a0) { - D_801B4D2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181938); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181A80); - - -extern void (*D_801B4DA8[])(void); - -void func_80181C30(void *a0) { - D_801B4DA8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801B4DE4[])(void); - -void func_80181C6C(void *a0) { - D_801B4DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181CA8); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_801734BC", func_80181D50); - -extern void func_80181164(void); - void func_80181DD4(s32 arg0) { - s32 temp_v0; - func_80181164(); - temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; - *(s32 *)(arg0 + 0x1c) = temp_v0; - } - diff --git a/src/ov_SC06_030/ov_SC06_030_jr_80178D40.c b/src/ov_SC06_030/ov_SC06_030_jr_80178D40.c new file mode 100644 index 000000000..5318b59af --- /dev/null +++ b/src/ov_SC06_030/ov_SC06_030_jr_80178D40.c @@ -0,0 +1,4449 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185040[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B9100; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185034[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80185078[]; +extern unsigned short D_80185080[]; +extern unsigned short D_80185088[]; +extern unsigned char D_801B9108[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B9100; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80185090[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B923C; +extern M2C_UNK D_801B9240; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B91C8; +extern void (*D_801850C0[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B9244[]; +extern u8 D_801B924C[]; +extern u8 D_801B91FC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801850C8[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801850E4[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801850EC[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185154[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801850F8; +extern u8 D_80185104; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80185188[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80185190[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801851E4[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185218[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185208[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185234; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801852AC[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801852B4[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801852BC[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801852C4[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801852CC[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801852D4[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801852E0[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801852EC[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801852F8[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185308[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185318[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185320[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185328[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185330[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185338[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185340[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185348[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185350[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185358[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185360[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185368[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185370[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185378[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185380[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185388[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185390[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185398[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801853A0[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801853A8[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801853B0[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801853B8[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801853C0[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801853C8[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018540C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801853D0; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018543C[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185478[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_801854D0[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801854E0[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801854E8[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185650[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018565C[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B8670; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801BA010; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B9980; +extern short D_801BA084; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801BA084) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801BA084)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801B9980 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801BA084) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801B9FE0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801B9FE0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801BA084) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801BA084) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801B9DDC[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801B9984; + extern s32 D_801B9D98; + extern s16 D_801B9D9C; + extern s16 D_801B9DA0; + extern s16 D_801B9DA4; + extern s16 D_801B9DA8; + extern s32 D_801B9DB0; + extern s32 D_801B9DB4; + extern s32 D_801B9DC4; + extern s16 D_801B9DC8; + extern s16 D_801B9DCC; + extern s32 D_801B9DD0; + extern s32 D_801B9DD8; + extern s32 D_801B9DDC[10]; + extern s32 D_801B9F28; + extern s16 D_801B9FE0; + extern s32 D_801BA00C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801B9FE0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801B9D98); + D_801B9D98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B9DA4, D_801B9DA8 ? 0x48 : 0x40); + (*(s16*)&D_801BA084) = 2; + break; + case 0: + func_80179B28(D_801B9D98); + D_801B9D98 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801B9D9C, D_801B9DA0 ? 0x48 : 0x40); + (*(s16*)&D_801BA084) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801B9F28 != 0) { + func_80179B28(D_801B9D98); + D_801B9D98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801B9D9C, D_801B9DA0 ? 0x48 : 0x40); + (*(s16*)&D_801BA084) = 1; + } else { + (*(s16*)&D_801BA084) = 3; + } + break; + case 0x32: + func_80179B28(D_801B9D98); + D_801B9D98 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801B9D9C, + D_801B9DA0 ? 0x48 : 0x40); + (*(s16*)&D_801BA084) = 1; + break; + case 2: + func_80179B28(D_801B9D98); + if (D_801B9DB0 != 0) { + D_801B9980 = D_801B9DB0; + D_801B9DB0 = 0; + (*(s16*)&D_801BA084) = 3; + return; + } + (*(s16*)&D_801BA084) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801BA084) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801BA084) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BA084) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801BA084) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801BA084) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801BA084) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BA084) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801BA084) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801BA084) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801BA084) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801BA084) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x1B: + D_801B9DD0 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801BA084) = 4; + D_801B9984 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801BA084) = 5; + D_801B9DC4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801B9DC4 = (s32)func_8017A3B0; + (*(s16*)&D_801BA084) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x24: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BA084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801BA084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801BA084) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA084) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA084) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801BA084) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BA084) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801BA084) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801BA084) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B9DB4); + (*(s16*)&D_801BA084) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801B9DB4); + (*(s16*)&D_801BA084) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B9DB4); + (*(s16*)&D_801BA084) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801B9DB4); + (*(s16*)&D_801BA084) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + break; + case 0x4E: + D_801B9DD8 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x2B: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801BA084) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801BA00C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801BA084) = 3; + break; + case 0x34: + (*(s16*)&D_801BA084) = 3; + D_801B9980 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801B9DB0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801BA084) = 3; + D_801B9980 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801BA084) = 3; + D_801B9980 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801B9980 = *(s32 *)(D_801B9980 + 4); + return; + case 0x37: + (*(s16*)&D_801BA084) = 3; + D_801B9D9C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B9DA0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801BA084) = 3; + D_801B9DA4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801B9DA8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801BA084) = 3; + D_801B9D9C = w1; + D_801B9DA0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801BA084) = 3; + D_801B9DA4 = w2; + D_801B9DA8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + case 0x43: + D_801B9DC4 = (s32)func_8017A3D8; + D_801B9DCC = 0; + (*(s16*)&D_801BA084) = 5; + D_801B9DC8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801BA084) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801BA084) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801BA084) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801B9DDC; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801BA084) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801B9DDC; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801BA084) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801B9DDC[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801BA084) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801B9DDC; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801BA084) = 3; + break; + default: + break; + } +Lend: + D_801B9980 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B9DAC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801B9DAC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801B9DAC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801B9DAC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801B9DD4; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801B9DD4 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801B9D90; + +s32 func_8017A3B0(void) { + switch (D_801B9D90) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017A3D8); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801B9E0C; + extern s16 D_801B9E0E; + extern s16 D_801B9E10; + extern s16 D_801B9E04; + extern s16 D_801B9E06; + extern s16 D_801B9E08; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801B9E0C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801B9E0E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801B9E10, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801B9E04, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801B9E06, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801B9E08, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801B9D94; +extern u16 D_801B9E14; +extern u16 D_801B9E16; +extern u16 D_801B9E18; +extern s16 D_801BA010; + +void func_8017B1D8(void) { + func_8012A418(); + D_801BA010 = 0; + D_801B9D94 = 0; + D_801B9E14 = D_80126B5E; + D_801B9E16 = D_80126B62; + D_801B9E18 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185798[]; + extern s16 D_801B9E0C; + extern s16 D_801B9E04; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185798[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185798[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9E0C; + s16 *p78C = &D_801B9E04; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801BA010 = 1; + D_801B9D94 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801B9DB4; + extern SV4_8017B368 D_801B9DBC; + extern s16 D_801B9E0C; + extern s16 D_801B9E04; + extern u16 D_80185798; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801B9DB4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801B9DBC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185798)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185798)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801B9E0C) = loc0; + (*(SV4_8017B368 *)&D_801B9E04) = loc1; + D_801BA010 = 1; + D_801B9D94 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185798[]; + extern s16 D_801B9E0C; + extern s16 D_801B9E0E; + extern s16 D_801B9E10; + extern s16 D_801B9E04; + extern s16 D_801B9E06; + extern s16 D_801B9E08; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185798[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185798[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801B9E0C; + s16 *p78C = &D_801B9E04; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801B9E0E; + v798 = D_801B9E10; + v78C = *p78C; + v78E = D_801B9E06; + v790 = D_801B9E08; + __asm__ __volatile__(""); + D_801BA010 = 1; + D_801B9D94 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B9D94; +extern s16 D_801B9E0C; +extern s16 D_801B9E0E; +extern s16 D_801B9E10; +extern s16 D_801B9E04; +extern s16 D_801B9E06; +extern s16 D_801B9E08; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801B9D94 = 0; + D_801B9E0C = (s16) D_80114F30; + D_801B9E0E = (s16) D_80114F34; + D_801B9E10 = (s16) D_80114F38; + D_801B9E04 = (s16) D_80114F24; + D_801B9E06 = (s16) D_80114F28; + D_801B9E08 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801B9E24; +extern s16 D_801B9E26; +extern s16 D_801B9E28; +extern s16 D_801B9E2C; +extern s16 D_801B9E2E; +extern s16 D_801B9E30; + +void func_8017B824(void) { + D_801B9E24 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801B9E26 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801B9E28 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801B9E2C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801B9E2E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801B9E30 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801B9E24; +extern s16 D_801B9E26; +extern s16 D_801B9E28; +extern s16 D_801B9E2C; +extern s16 D_801B9E2E; +extern s16 D_801B9E30; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801B9E24; + D_80114F34 = D_801B9E26; + D_80114F38 = D_801B9E28; + D_80114F24 = D_801B9E2C; + D_80114F28 = D_801B9E2E; + D_80114F2C = D_801B9E30; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801B9E0C), src[8..15] -> (*(S8_8017B8E8 *)&D_801B9E04) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801B9E0C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801B9E04) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801B9E14; +extern u16 D_801B9E16; +extern u16 D_801B9E18; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801B9D94; +extern short D_801B9E1C; +extern short D_801B9E1E; +extern short D_801B9E20; +extern s16 D_801B9E0C; +extern s16 D_801B9E0E; +extern s16 D_801B9E10; +extern s16 D_801B9E04; +extern s16 D_801B9E06; +extern s16 D_801B9E08; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801B9E14); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801B9E16); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801B9E18); + (*(s16 *)&D_801B9E1C) = buf[0]; + (*(s16 *)&D_801B9E1E) = buf[1]; + (*(s16 *)&D_801B9E20) = buf[2]; + D_801B9E0C = D_80114F30 + buf[0]; + D_801B9D94 = 0; + D_801B9E0E = D_80114F34 + buf[1]; + D_801B9E10 = D_80114F38 + buf[2]; + D_801B9E04 = D_80114F24 + buf[0]; + D_801B9E06 = D_80114F28 + buf[1]; + D_801B9E08 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801B9DB4; +extern SV4 D_801B9DBC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801B9DBC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801B9DB4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801B9DBC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801B9DBC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801B9DB4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801B9DBC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801B9DDC[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801B9DDC; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801B9D94; +extern s16 D_801BA010; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801B9D94 = D_801B9D94 + 1; + if (D_801B9D94 >= 0x1F) { + D_801BA010 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801B9D94; +extern s16 D_801BA010; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B9D94 = D_801B9D94 + 1; + if (0x18 < D_801B9D94) { + func_8012A4BC(); + D_801BA010 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801B9D94; +extern void (*D_801B9DD8)(void); +extern short D_801B9E1C; +extern short D_801B9E1E; +extern short D_801B9E20; +extern s16 D_801BA010; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801B9D94 = D_801B9D94 + 1; + if (D_801B9D94 >= 0x19) { + if (D_801B9DD8 != 0) { + (*D_801B9DD8)(); + } else { + D_80114F30 = D_80114F30 + D_801B9E1C; + D_80114F34 = D_80114F34 + D_801B9E1E; + D_80114F38 = D_80114F38 + D_801B9E20; + D_80114F24 = D_80114F24 + D_801B9E1C; + D_80114F28 = D_80114F28 + D_801B9E1E; + D_80114F2C = D_80114F2C + D_801B9E20; + func_8012A4BC(); + } + D_801BA010 = 0; + } +} + + + +extern void (*D_80185838[])(void); + +void func_8017BE60(void *a0) { + D_80185838[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017C068); + + +extern void (*D_80185898[])(void); + +void func_8017C114(void *a0) { + D_80185898[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017C8D0); + + +extern void (*D_801858F0[])(void); + +void func_8017D7B0(void *a0) { + D_801858F0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017D7EC); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D830(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801858F8[])(void); + +void func_8017D854(void *a0) { + D_801858F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017D890); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D8D0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D94C(void) { + func_800D1EBC(); + } + + + +extern void (*D_80185904[])(void); + +void func_8017D96C(void *a0) { + D_80185904[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017D9A8); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DA24); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DA6C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DA94); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DABC); + + +extern void (*D_80185920[])(void); + +void func_8017DB58(void *a0) { + D_80185920[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DB94); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DC70); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DE08); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017DF70); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017E120); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017EEF0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017F0A0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017F268); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017F65C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017F98C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017FBA4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017FCF4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017FDDC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8017FE9C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180058); + + +extern void (*D_80185E2C[])(void); + +void func_801800D4(void *a0) { + D_80185E2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180110); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8018017C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801801E8); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180228); + +extern void func_8001AAA0(s32 arg); + s32 func_80180438(void) { + return ((s32 (*)(s32))func_8001AAA0)(0x7C) != 0; + } + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180458); + +extern void func_800D0C48(s32 arg); + void func_8018047C(void) { + func_800D0C48(0x1); + } + + +extern s32 func_80180C5C(void); + s32 func_8018049C(void) { + return func_80180C5C() != 0; + } + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801804BC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180508); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801805F8); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801806D4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801807B4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_8018081C); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801808F0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180940); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801809DC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180ABC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180B50); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180BBC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180C44); + +extern void func_8001AAA0(s32 arg); + s32 func_80180C5C(void) +{ + func_8001AAA0(0x6F); + } + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180C7C); + + +extern void (*D_801B4C84[])(void); + +void func_80180CA4(void *a0) { + D_801B4C84[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180CE0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180D28); + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_801B4C8C; + +void func_80180D68(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801B4C8C, 0x1000000); +} + + + +extern void (*D_801B4C98[])(void); + +void func_80180D90(void *a0) { + D_801B4C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180DCC); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180ED4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180F14); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80180FF4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_801810D0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181164); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181588); + + +extern void (*D_801B4D2C[])(void); + +void func_801818FC(void *a0) { + D_801B4D2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181938); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181A80); + + +extern void (*D_801B4DA8[])(void); + +void func_80181C30(void *a0) { + D_801B4DA8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801B4DE4[])(void); + +void func_80181C6C(void *a0) { + D_801B4DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181CA8); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_80178D40", func_80181D50); + +extern void func_80181164(void); + void func_80181DD4(s32 arg0) { + s32 temp_v0; + func_80181164(); + temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; + *(s32 *)(arg0 + 0x1c) = temp_v0; + } + + diff --git a/src/ov_SC06_032/ov_SC06_032_jr_801734BC.c b/src/ov_SC06_032/ov_SC06_032_jr_801734BC.c index dd37109d9..6f1cfaa62 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_801734BC.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_801734BC.c @@ -3084,1514 +3084,3 @@ void func_80178D18(void) { D_801D116C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D045C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D045C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D045C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D045C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D0484; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D0484 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D0440; - -s32 func_8017A3B0(void) { - switch (D_801D0440) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D047C; -extern short D_801D0478; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D047C) { - case 0: - func_800D0CA0(1); - D_801D047C = D_801D047C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D0478; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D047C = D_801D047C + 1; - if (D_801D047C < 0x1E) { - return 0; - } - D_801D047C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D04BC; - extern s16 D_801D04BE; - extern s16 D_801D04C0; - extern s16 D_801D04B4; - extern s16 D_801D04B6; - extern s16 D_801D04B8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D04BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D04BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D04C0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D04B4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D04B6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D04B8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D0444; -extern u16 D_801D04C4; -extern u16 D_801D04C6; -extern u16 D_801D04C8; -extern s16 D_801D10F8; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D10F8 = 0; - D_801D0444 = 0; - D_801D04C4 = D_80126B5E; - D_801D04C6 = D_80126B62; - D_801D04C8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80196C64[]; - extern s16 D_801D04BC; - extern s16 D_801D04B4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80196C64[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80196C64[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D04BC; - s16 *p78C = &D_801D04B4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D10F8 = 1; - D_801D0444 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D0464; - extern SV4_8017B368 D_801D046C; - extern s16 D_801D04BC; - extern s16 D_801D04B4; - extern u16 D_80196C64; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D0464; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D046C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80196C64)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80196C64)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D04BC) = loc0; - (*(SV4_8017B368 *)&D_801D04B4) = loc1; - D_801D10F8 = 1; - D_801D0444 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80196C64[]; - extern s16 D_801D04BC; - extern s16 D_801D04BE; - extern s16 D_801D04C0; - extern s16 D_801D04B4; - extern s16 D_801D04B6; - extern s16 D_801D04B8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80196C64[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80196C64[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D04BC; - s16 *p78C = &D_801D04B4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D04BE; - v798 = D_801D04C0; - v78C = *p78C; - v78E = D_801D04B6; - v790 = D_801D04B8; - __asm__ __volatile__(""); - D_801D10F8 = 1; - D_801D0444 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D0444; -extern s16 D_801D04BC; -extern s16 D_801D04BE; -extern s16 D_801D04C0; -extern s16 D_801D04B4; -extern s16 D_801D04B6; -extern s16 D_801D04B8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D0444 = 0; - D_801D04BC = (s16) D_80114F30; - D_801D04BE = (s16) D_80114F34; - D_801D04C0 = (s16) D_80114F38; - D_801D04B4 = (s16) D_80114F24; - D_801D04B6 = (s16) D_80114F28; - D_801D04B8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D04D4; -extern s16 D_801D04D6; -extern s16 D_801D04D8; -extern s16 D_801D04DC; -extern s16 D_801D04DE; -extern s16 D_801D04E0; - -void func_8017B824(void) { - D_801D04D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D04D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D04D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D04DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D04DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D04E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D04D4; -extern s16 D_801D04D6; -extern s16 D_801D04D8; -extern s16 D_801D04DC; -extern s16 D_801D04DE; -extern s16 D_801D04E0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D04D4; - D_80114F34 = D_801D04D6; - D_80114F38 = D_801D04D8; - D_80114F24 = D_801D04DC; - D_80114F28 = D_801D04DE; - D_80114F2C = D_801D04E0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D04BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D04B4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D04BC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D04B4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D04C4; -extern u16 D_801D04C6; -extern u16 D_801D04C8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D0444; -extern short D_801D04CC; -extern short D_801D04CE; -extern short D_801D04D0; -extern s16 D_801D04BC; -extern s16 D_801D04BE; -extern s16 D_801D04C0; -extern s16 D_801D04B4; -extern s16 D_801D04B6; -extern s16 D_801D04B8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D04C4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D04C6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D04C8); - (*(s16 *)&D_801D04CC) = buf[0]; - (*(s16 *)&D_801D04CE) = buf[1]; - (*(s16 *)&D_801D04D0) = buf[2]; - D_801D04BC = D_80114F30 + buf[0]; - D_801D0444 = 0; - D_801D04BE = D_80114F34 + buf[1]; - D_801D04C0 = D_80114F38 + buf[2]; - D_801D04B4 = D_80114F24 + buf[0]; - D_801D04B6 = D_80114F28 + buf[1]; - D_801D04B8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D0464; -extern SV4 D_801D046C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D046C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D0464 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D046C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D046C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D0464) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D046C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D048C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D048C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D0444; -extern s16 D_801D10F8; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D0444 = D_801D0444 + 1; - if (D_801D0444 >= 0x1F) { - D_801D10F8 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D0444; -extern s16 D_801D10F8; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D0444 = D_801D0444 + 1; - if (0x18 < D_801D0444) { - func_8012A4BC(); - D_801D10F8 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D0444; -extern void (*D_801D0488)(void); -extern short D_801D04CC; -extern short D_801D04CE; -extern short D_801D04D0; -extern s16 D_801D10F8; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D0444 = D_801D0444 + 1; - if (D_801D0444 >= 0x19) { - if (D_801D0488 != 0) { - (*D_801D0488)(); - } else { - D_80114F30 = D_80114F30 + D_801D04CC; - D_80114F34 = D_80114F34 + D_801D04CE; - D_80114F38 = D_80114F38 + D_801D04D0; - D_80114F24 = D_80114F24 + D_801D04CC; - D_80114F28 = D_80114F28 + D_801D04CE; - D_80114F2C = D_80114F2C + D_801D04D0; - func_8012A4BC(); - } - D_801D10F8 = 0; - } -} - - - -extern void (*D_80196D04[])(void); - -void func_8017BE60(void *a0) { - D_80196D04[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_80196D1C[])(void); - -void func_8017BEBC(void *a0) { - D_80196D1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017C0A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017C1DC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017C24C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D12C); - - -extern void (*D_80196D98[])(void); - -void func_8017D14C(void *a0) { - D_80196D98[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D188); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D1CC(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D1F0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D230(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D2AC); - - -extern void (*D_80196DAC[])(void); - -void func_8017D2CC(void *a0) { - D_80196DAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D308); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D37C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D3A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D3CC); - - -extern void (*D_80196DD8[])(void); - -void func_8017D464(void *a0) { - D_80196DD8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D4A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D5E4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D77C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D810); - - -extern void (*D_80196DE0[])(void); - -void func_8017D894(void *a0) { - D_80196DE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D8D0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017D940); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DABC); - - -s32 func_8017DBF4(void) { - return 126; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DBFC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DC54); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DCA4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DD28); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DE84); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DED8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DEFC); - - -extern void (*D_80196E1C[])(void); - -void func_8017DF40(void *a0) { - D_80196E1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017DF7C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E0C8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E140); - - -void func_8017E170(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E184); - - -extern void (*D_80196E54[])(void); - -void func_8017E1EC(void *a0) { - D_80196E54[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E228); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E274); - -void func_8017E2BC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E2C4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E428); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E7A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017E814); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EA30); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EA80); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EB48); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017ECB4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017ECF4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EE7C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EEB0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EF38); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017EF84); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F0C0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F114); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F264); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F2A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F320); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F5A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F5E8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F6A8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F6E8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F84C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F8A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017F9B0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017FA18); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8017FE98); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018000C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801800C4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801801A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801801E4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80180264); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018029C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80180570); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801806E8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80180730); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801809D0); - -extern void func_80181DDC(void); - void func_80180B4C(s32 arg0) { - if (*(s16 *)(arg0 + 0x98) == 0) { - ((void (*)(void))func_80181DDC)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80180B7C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80180CFC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181014); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181478); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801814DC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181528); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801815A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801815F4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181638); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181680); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801816CC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181738); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181B24); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181C78); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181C98); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181D1C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181DDC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181ED4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80181FF4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801820C4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182288); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182400); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182460); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182588); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801825E8); - - -extern void (*D_801A6884[])(void); - -void func_801826C8(void *a0) { - D_801A6884[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182704); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182890); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182B74); - - -extern void (*D_801A69DC[])(void); - -void func_80182E2C(void *a0) { - D_801A69DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182E68); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80182FD8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183040); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183298); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801832F8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183430); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183454); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801838A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183940); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183AF8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183B34); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183BB4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80183DA4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184028); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801840C0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184124); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184170); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801841F0); - - -extern void (*D_801A6A10[])(void); - -void func_80184258(void *a0) { - D_801A6A10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184294); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801846F8); - - -extern void (*D_801A6A30[])(void); - -void func_8018479C(void *a0) { - D_801A6A30[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801847D8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801849CC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184B08); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184C04); - - -extern void (*D_801A6A3C[])(void); - -void func_80184D70(void *a0) { - D_801A6A3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184DAC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184E5C); - -extern s32 D_801D0B78; -extern s32 func_8012C588(s32 a0, s32 a1); - -void func_80184F14(s32 a0, s32 a1) { - D_801D0B78 = a1; - ((void (*)(s32, s32))func_8012C588)(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80184F44); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185188); - - -extern void (*D_801BE87C[])(void); - -void func_80185428(void *a0) { - D_801BE87C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185464); - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_8018564C(void *arg0) { - *(s16 *)((u8 *)arg0 + 0x108) = 0; - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x2); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185670); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801857B0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801857F4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185860); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801859A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185A44); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185B4C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185CD8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185D4C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185DAC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185E30); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185EAC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80185F4C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018603C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186160); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186238); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801863B0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186508); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801866B0); - - -extern void (*D_801BEF64[])(void); - -void func_80186834(void *a0) { - D_801BEF64[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186870); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801868EC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018694C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186A88); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186AD0); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80186B70(void *a0) { - func_8002D4C8(0xAE5, 0); - ((void (*)(void *, int))func_8012AD44)(a0, 0x3); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186BAC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186CF0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186D90); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186E18); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80186E9C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187180); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187268); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187368); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801874E8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018750C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801875D0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187980); - -void func_80187A5C(void) { -} - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187A64); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187B88); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187C1C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187C94); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187CEC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187D60); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187E60); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80187EDC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018837C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80188508); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018853C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801885E4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801887F4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80188BF8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80188D6C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80188F1C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801891A8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018966C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018983C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80189A2C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80189D44); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80189F3C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018A384); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018A594); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018A9D8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018ABE8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018AE6C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018AE8C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018AF8C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B02C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B0EC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B184); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B1A4); - -void func_8018B294(void) { -} - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B29C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B370); - -extern void func_8012B370(int a0); - void func_8018B430(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B450); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B470); - -void func_8018B564(void) { -} - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B56C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B660); - -extern void func_8012B370(int a0); - void func_8018B720(void) { - ((s32 (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B740); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018B878); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018BA4C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018BBF8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018BDE0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C11C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C3C4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C4F4); - - -extern void (*D_801CA8E8[])(void); - -void func_8018C5CC(void *a0) { - D_801CA8E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C608); - - -extern void (*D_801CA908[])(void); - -void func_8018C77C(void *a0) { - D_801CA908[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C7B8); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8018B878(void); - -void func_8018C840(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_8018B878)(a0); -} - - - - -extern void func_8018BA4C(void); - void func_8018C878(s32 *param) { - *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; - func_8018BA4C(); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C8A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C8D4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018C920); - - -extern void func_8018B878(void); - void func_8018CA0C(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; - ((void (*)(void))func_8018B878)(); - } - - -extern void func_8018B878(void); - void func_8018CA40(s32 a0) { - s32 v0; - v0 = 0xC; - *(s8 *)(a0 + 0xC1) = v0; - *(s32 *)(a0 + 0x1C) = 0x3C; - ((void (*)(void))func_8018B878)(); - } - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CA6C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CAF8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CC20); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CD54); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CDB4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CE74); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018CF48); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018D040); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018D15C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018D264); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018D3A4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018D5C0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018DBB0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018DD44); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018DED8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018E32C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018E70C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018EB08); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018EDB0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018F3E4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018FB5C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8018FCE8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801902EC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80190D70); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80191070); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801917C8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801919A0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801924B8); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801928B0); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_80192CB4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_8019303C); - -void func_8019309C(void) { -} - -void func_801930A4(void) { -} - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801930AC); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_801734BC", func_801931A8); - -void func_801932D0(void) { -} - diff --git a/src/ov_SC06_032/ov_SC06_032_jr_80178D40.c b/src/ov_SC06_032/ov_SC06_032_jr_80178D40.c new file mode 100644 index 000000000..4bd7caf67 --- /dev/null +++ b/src/ov_SC06_032/ov_SC06_032_jr_80178D40.c @@ -0,0 +1,4960 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8019650C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CF7B0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80196500[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80196544[]; +extern unsigned short D_8019654C[]; +extern unsigned short D_80196554[]; +extern unsigned char D_801CF7B8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CF7B0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8019655C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF8EC; +extern M2C_UNK D_801CF8F0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF878; +extern void (*D_8019658C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CF8F4[]; +extern u8 D_801CF8FC[]; +extern u8 D_801CF8AC[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80196594[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801965B0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801965B8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80196620[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801965C4; +extern u8 D_801965D0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80196654[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8019665C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801966B0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801966E4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801966D4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80196700; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80196778[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80196780[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80196788[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80196790[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80196798[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801967A0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801967AC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801967B8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801967C4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801967D4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801967E4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801967EC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801967F4[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801967FC[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80196804[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8019680C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80196814[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8019681C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80196824[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8019682C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80196834[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8019683C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80196844[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8019684C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80196854[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8019685C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80196864[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8019686C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80196874[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8019687C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80196884[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8019688C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80196894[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801968D8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8019689C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80196908[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80196944[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8019699C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_801969AC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_801969B4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80196B1C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80196B28[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CECCC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D10F8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D0030; +extern short D_801D116C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D116C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D116C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D0030 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D116C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D10C8 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D10C8 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D116C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D116C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D048C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D0034; + extern s32 D_801D0448; + extern s16 D_801D044C; + extern s16 D_801D0450; + extern s16 D_801D0454; + extern s16 D_801D0458; + extern s32 D_801D0460; + extern s32 D_801D0464; + extern s32 D_801D0474; + extern s16 D_801D0478; + extern s16 D_801D047C; + extern s32 D_801D0480; + extern s32 D_801D0488; + extern s32 D_801D048C[10]; + extern s32 D_801D1010; + extern s16 D_801D10C8; + extern s32 D_801D10F4; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D10C8; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D0448); + D_801D0448 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D0454, D_801D0458 ? 0x48 : 0x40); + (*(s16*)&D_801D116C) = 2; + break; + case 0: + func_80179B28(D_801D0448); + D_801D0448 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D044C, D_801D0450 ? 0x48 : 0x40); + (*(s16*)&D_801D116C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D1010 != 0) { + func_80179B28(D_801D0448); + D_801D0448 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D044C, D_801D0450 ? 0x48 : 0x40); + (*(s16*)&D_801D116C) = 1; + } else { + (*(s16*)&D_801D116C) = 3; + } + break; + case 0x32: + func_80179B28(D_801D0448); + D_801D0448 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D044C, + D_801D0450 ? 0x48 : 0x40); + (*(s16*)&D_801D116C) = 1; + break; + case 2: + func_80179B28(D_801D0448); + if (D_801D0460 != 0) { + D_801D0030 = D_801D0460; + D_801D0460 = 0; + (*(s16*)&D_801D116C) = 3; + return; + } + (*(s16*)&D_801D116C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D116C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D116C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D116C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D116C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D116C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D116C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D116C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D116C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D116C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D116C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D116C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x1B: + D_801D0480 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D116C) = 4; + D_801D0034 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D116C) = 5; + D_801D0474 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D0474 = (s32)func_8017A3B0; + (*(s16*)&D_801D116C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x24: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D116C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D116C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D116C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D116C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D116C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D116C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D116C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D116C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D116C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D0464); + (*(s16*)&D_801D116C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D0464); + (*(s16*)&D_801D116C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D0464); + (*(s16*)&D_801D116C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D0464); + (*(s16*)&D_801D116C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + break; + case 0x4E: + D_801D0488 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x2B: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D116C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D10F4 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D116C) = 3; + break; + case 0x34: + (*(s16*)&D_801D116C) = 3; + D_801D0030 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D0460 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D116C) = 3; + D_801D0030 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D116C) = 3; + D_801D0030 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D0030 = *(s32 *)(D_801D0030 + 4); + return; + case 0x37: + (*(s16*)&D_801D116C) = 3; + D_801D044C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0450 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D116C) = 3; + D_801D0454 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0458 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D116C) = 3; + D_801D044C = w1; + D_801D0450 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D116C) = 3; + D_801D0454 = w2; + D_801D0458 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + case 0x43: + D_801D0474 = (s32)func_8017A3D8; + D_801D047C = 0; + (*(s16*)&D_801D116C) = 5; + D_801D0478 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D116C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D116C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D116C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D048C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D116C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D048C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D116C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D048C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D116C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D048C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D116C) = 3; + break; + default: + break; + } +Lend: + D_801D0030 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D045C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D045C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D045C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D045C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D0484; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D0484 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D0440; + +s32 func_8017A3B0(void) { + switch (D_801D0440) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D047C; +extern short D_801D0478; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D047C) { + case 0: + func_800D0CA0(1); + D_801D047C = D_801D047C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D0478; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D047C = D_801D047C + 1; + if (D_801D047C < 0x1E) { + return 0; + } + D_801D047C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D04BC; + extern s16 D_801D04BE; + extern s16 D_801D04C0; + extern s16 D_801D04B4; + extern s16 D_801D04B6; + extern s16 D_801D04B8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D04BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D04BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D04C0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D04B4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D04B6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D04B8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D0444; +extern u16 D_801D04C4; +extern u16 D_801D04C6; +extern u16 D_801D04C8; +extern s16 D_801D10F8; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D10F8 = 0; + D_801D0444 = 0; + D_801D04C4 = D_80126B5E; + D_801D04C6 = D_80126B62; + D_801D04C8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80196C64[]; + extern s16 D_801D04BC; + extern s16 D_801D04B4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80196C64[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80196C64[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D04BC; + s16 *p78C = &D_801D04B4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D10F8 = 1; + D_801D0444 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D0464; + extern SV4_8017B368 D_801D046C; + extern s16 D_801D04BC; + extern s16 D_801D04B4; + extern u16 D_80196C64; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D0464; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D046C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80196C64)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80196C64)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D04BC) = loc0; + (*(SV4_8017B368 *)&D_801D04B4) = loc1; + D_801D10F8 = 1; + D_801D0444 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80196C64[]; + extern s16 D_801D04BC; + extern s16 D_801D04BE; + extern s16 D_801D04C0; + extern s16 D_801D04B4; + extern s16 D_801D04B6; + extern s16 D_801D04B8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80196C64[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80196C64[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D04BC; + s16 *p78C = &D_801D04B4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D04BE; + v798 = D_801D04C0; + v78C = *p78C; + v78E = D_801D04B6; + v790 = D_801D04B8; + __asm__ __volatile__(""); + D_801D10F8 = 1; + D_801D0444 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D0444; +extern s16 D_801D04BC; +extern s16 D_801D04BE; +extern s16 D_801D04C0; +extern s16 D_801D04B4; +extern s16 D_801D04B6; +extern s16 D_801D04B8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D0444 = 0; + D_801D04BC = (s16) D_80114F30; + D_801D04BE = (s16) D_80114F34; + D_801D04C0 = (s16) D_80114F38; + D_801D04B4 = (s16) D_80114F24; + D_801D04B6 = (s16) D_80114F28; + D_801D04B8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D04D4; +extern s16 D_801D04D6; +extern s16 D_801D04D8; +extern s16 D_801D04DC; +extern s16 D_801D04DE; +extern s16 D_801D04E0; + +void func_8017B824(void) { + D_801D04D4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D04D6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D04D8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D04DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D04DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D04E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D04D4; +extern s16 D_801D04D6; +extern s16 D_801D04D8; +extern s16 D_801D04DC; +extern s16 D_801D04DE; +extern s16 D_801D04E0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D04D4; + D_80114F34 = D_801D04D6; + D_80114F38 = D_801D04D8; + D_80114F24 = D_801D04DC; + D_80114F28 = D_801D04DE; + D_80114F2C = D_801D04E0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D04BC), src[8..15] -> (*(S8_8017B8E8 *)&D_801D04B4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D04BC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D04B4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D04C4; +extern u16 D_801D04C6; +extern u16 D_801D04C8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D0444; +extern short D_801D04CC; +extern short D_801D04CE; +extern short D_801D04D0; +extern s16 D_801D04BC; +extern s16 D_801D04BE; +extern s16 D_801D04C0; +extern s16 D_801D04B4; +extern s16 D_801D04B6; +extern s16 D_801D04B8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D04C4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D04C6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D04C8); + (*(s16 *)&D_801D04CC) = buf[0]; + (*(s16 *)&D_801D04CE) = buf[1]; + (*(s16 *)&D_801D04D0) = buf[2]; + D_801D04BC = D_80114F30 + buf[0]; + D_801D0444 = 0; + D_801D04BE = D_80114F34 + buf[1]; + D_801D04C0 = D_80114F38 + buf[2]; + D_801D04B4 = D_80114F24 + buf[0]; + D_801D04B6 = D_80114F28 + buf[1]; + D_801D04B8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D0464; +extern SV4 D_801D046C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D046C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D0464 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D046C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D046C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D0464) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D046C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D048C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D048C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D0444; +extern s16 D_801D10F8; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D0444 = D_801D0444 + 1; + if (D_801D0444 >= 0x1F) { + D_801D10F8 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D0444; +extern s16 D_801D10F8; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D0444 = D_801D0444 + 1; + if (0x18 < D_801D0444) { + func_8012A4BC(); + D_801D10F8 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D0444; +extern void (*D_801D0488)(void); +extern short D_801D04CC; +extern short D_801D04CE; +extern short D_801D04D0; +extern s16 D_801D10F8; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D0444 = D_801D0444 + 1; + if (D_801D0444 >= 0x19) { + if (D_801D0488 != 0) { + (*D_801D0488)(); + } else { + D_80114F30 = D_80114F30 + D_801D04CC; + D_80114F34 = D_80114F34 + D_801D04CE; + D_80114F38 = D_80114F38 + D_801D04D0; + D_80114F24 = D_80114F24 + D_801D04CC; + D_80114F28 = D_80114F28 + D_801D04CE; + D_80114F2C = D_80114F2C + D_801D04D0; + func_8012A4BC(); + } + D_801D10F8 = 0; + } +} + + + +extern void (*D_80196D04[])(void); + +void func_8017BE60(void *a0) { + D_80196D04[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_80196D1C[])(void); + +void func_8017BEBC(void *a0) { + D_80196D1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017C0A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017C1DC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017C24C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D12C); + + +extern void (*D_80196D98[])(void); + +void func_8017D14C(void *a0) { + D_80196D98[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D188); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D1CC(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D1F0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D230(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D2AC); + + +extern void (*D_80196DAC[])(void); + +void func_8017D2CC(void *a0) { + D_80196DAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D308); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D37C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D3A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D3CC); + + +extern void (*D_80196DD8[])(void); + +void func_8017D464(void *a0) { + D_80196DD8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D4A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D5E4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D77C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D810); + + +extern void (*D_80196DE0[])(void); + +void func_8017D894(void *a0) { + D_80196DE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D8D0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017D940); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DABC); + + +s32 func_8017DBF4(void) { + return 126; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DBFC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DC54); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DCA4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DD28); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DE84); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DED8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DEFC); + + +extern void (*D_80196E1C[])(void); + +void func_8017DF40(void *a0) { + D_80196E1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017DF7C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E0C8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E140); + + +void func_8017E170(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E184); + + +extern void (*D_80196E54[])(void); + +void func_8017E1EC(void *a0) { + D_80196E54[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E228); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E274); + +void func_8017E2BC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E2C4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E428); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E7A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017E814); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EA30); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EA80); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EB48); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017ECB4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017ECF4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EE7C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EEB0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EF38); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017EF84); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F0C0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F114); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F264); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F2A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F320); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F5A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F5E8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F6A8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F6E8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F84C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F8A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017F9B0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017FA18); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8017FE98); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018000C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801800C4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801801A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801801E4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80180264); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018029C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80180570); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801806E8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80180730); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801809D0); + +extern void func_80181DDC(void); + void func_80180B4C(s32 arg0) { + if (*(s16 *)(arg0 + 0x98) == 0) { + ((void (*)(void))func_80181DDC)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80180B7C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80180CFC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181014); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181478); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801814DC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181528); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801815A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801815F4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181638); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181680); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801816CC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181738); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181B24); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181C78); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181C98); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181D1C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181DDC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181ED4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80181FF4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801820C4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182288); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182400); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182460); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182588); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801825E8); + + +extern void (*D_801A6884[])(void); + +void func_801826C8(void *a0) { + D_801A6884[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182704); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182890); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182B74); + + +extern void (*D_801A69DC[])(void); + +void func_80182E2C(void *a0) { + D_801A69DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182E68); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80182FD8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183040); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183298); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801832F8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183430); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183454); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801838A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183940); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183AF8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183B34); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183BB4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80183DA4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184028); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801840C0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184124); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184170); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801841F0); + + +extern void (*D_801A6A10[])(void); + +void func_80184258(void *a0) { + D_801A6A10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184294); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801846F8); + + +extern void (*D_801A6A30[])(void); + +void func_8018479C(void *a0) { + D_801A6A30[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801847D8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801849CC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184B08); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184C04); + + +extern void (*D_801A6A3C[])(void); + +void func_80184D70(void *a0) { + D_801A6A3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184DAC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184E5C); + +extern s32 D_801D0B78; +extern s32 func_8012C588(s32 a0, s32 a1); + +void func_80184F14(s32 a0, s32 a1) { + D_801D0B78 = a1; + ((void (*)(s32, s32))func_8012C588)(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80184F44); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185188); + + +extern void (*D_801BE87C[])(void); + +void func_80185428(void *a0) { + D_801BE87C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185464); + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8018564C(void *arg0) { + *(s16 *)((u8 *)arg0 + 0x108) = 0; + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x2); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185670); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801857B0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801857F4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185860); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801859A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185A44); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185B4C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185CD8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185D4C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185DAC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185E30); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185EAC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80185F4C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018603C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186160); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186238); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801863B0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186508); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801866B0); + + +extern void (*D_801BEF64[])(void); + +void func_80186834(void *a0) { + D_801BEF64[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186870); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801868EC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018694C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186A88); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186AD0); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80186B70(void *a0) { + func_8002D4C8(0xAE5, 0); + ((void (*)(void *, int))func_8012AD44)(a0, 0x3); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186BAC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186CF0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186D90); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186E18); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80186E9C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187180); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187268); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187368); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801874E8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018750C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801875D0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187980); + +void func_80187A5C(void) { +} + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187A64); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187B88); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187C1C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187C94); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187CEC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187D60); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187E60); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80187EDC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018837C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80188508); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018853C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801885E4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801887F4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80188BF8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80188D6C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80188F1C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801891A8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018966C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018983C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80189A2C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80189D44); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80189F3C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018A384); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018A594); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018A9D8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018ABE8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018AE6C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018AE8C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018AF8C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B02C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B0EC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B184); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B1A4); + +void func_8018B294(void) { +} + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B29C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B370); + +extern void func_8012B370(int a0); + void func_8018B430(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B450); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B470); + +void func_8018B564(void) { +} + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B56C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B660); + +extern void func_8012B370(int a0); + void func_8018B720(void) { + ((s32 (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B740); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018B878); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018BA4C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018BBF8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018BDE0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C11C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C3C4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C4F4); + + +extern void (*D_801CA8E8[])(void); + +void func_8018C5CC(void *a0) { + D_801CA8E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C608); + + +extern void (*D_801CA908[])(void); + +void func_8018C77C(void *a0) { + D_801CA908[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C7B8); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8018B878(void); + +void func_8018C840(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_8018B878)(a0); +} + + + + +extern void func_8018BA4C(void); + void func_8018C878(s32 *param) { + *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; + func_8018BA4C(); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C8A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C8D4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018C920); + + +extern void func_8018B878(void); + void func_8018CA0C(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; + ((void (*)(void))func_8018B878)(); + } + + +extern void func_8018B878(void); + void func_8018CA40(s32 a0) { + s32 v0; + v0 = 0xC; + *(s8 *)(a0 + 0xC1) = v0; + *(s32 *)(a0 + 0x1C) = 0x3C; + ((void (*)(void))func_8018B878)(); + } + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CA6C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CAF8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CC20); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CD54); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CDB4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CE74); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018CF48); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018D040); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018D15C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018D264); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018D3A4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018D5C0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018DBB0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018DD44); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018DED8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018E32C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018E70C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018EB08); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018EDB0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018F3E4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018FB5C); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8018FCE8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801902EC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80190D70); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80191070); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801917C8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801919A0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801924B8); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801928B0); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_80192CB4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_8019303C); + +void func_8019309C(void) { +} + +void func_801930A4(void) { +} + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801930AC); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80178D40", func_801931A8); + +void func_801932D0(void) { +} + + diff --git a/src/ov_SC06_033/ov_SC06_033_jr_801734BC.c b/src/ov_SC06_033/ov_SC06_033_jr_801734BC.c index 3d750c6d2..b021f6242 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_801734BC.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_801734BC.c @@ -3084,1471 +3084,3 @@ void func_80178D18(void) { D_801D0FEC = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D051C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801D051C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801D051C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801D051C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801D0544; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801D0544 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801D0500; - -s32 func_8017A3B0(void) { - switch (D_801D0500) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801D053C; -extern short D_801D0538; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801D053C) { - case 0: - func_800D0CA0(1); - D_801D053C = D_801D053C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801D0538; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801D053C = D_801D053C + 1; - if (D_801D053C < 0x1E) { - return 0; - } - D_801D053C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801D057C; - extern s16 D_801D057E; - extern s16 D_801D0580; - extern s16 D_801D0574; - extern s16 D_801D0576; - extern s16 D_801D0578; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D057C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D057E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D0580, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D0574, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D0576, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D0578, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801D0504; -extern u16 D_801D0584; -extern u16 D_801D0586; -extern u16 D_801D0588; -extern s16 D_801D0F78; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D0F78 = 0; - D_801D0504 = 0; - D_801D0584 = D_80126B5E; - D_801D0586 = D_80126B62; - D_801D0588 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80195174[]; - extern s16 D_801D057C; - extern s16 D_801D0574; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80195174[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80195174[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D057C; - s16 *p78C = &D_801D0574; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D0F78 = 1; - D_801D0504 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801D0524; - extern SV4_8017B368 D_801D052C; - extern s16 D_801D057C; - extern s16 D_801D0574; - extern u16 D_80195174; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801D0524; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801D052C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80195174)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80195174)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801D057C) = loc0; - (*(SV4_8017B368 *)&D_801D0574) = loc1; - D_801D0F78 = 1; - D_801D0504 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80195174[]; - extern s16 D_801D057C; - extern s16 D_801D057E; - extern s16 D_801D0580; - extern s16 D_801D0574; - extern s16 D_801D0576; - extern s16 D_801D0578; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80195174[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80195174[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801D057C; - s16 *p78C = &D_801D0574; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801D057E; - v798 = D_801D0580; - v78C = *p78C; - v78E = D_801D0576; - v790 = D_801D0578; - __asm__ __volatile__(""); - D_801D0F78 = 1; - D_801D0504 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D0504; -extern s16 D_801D057C; -extern s16 D_801D057E; -extern s16 D_801D0580; -extern s16 D_801D0574; -extern s16 D_801D0576; -extern s16 D_801D0578; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801D0504 = 0; - D_801D057C = (s16) D_80114F30; - D_801D057E = (s16) D_80114F34; - D_801D0580 = (s16) D_80114F38; - D_801D0574 = (s16) D_80114F24; - D_801D0576 = (s16) D_80114F28; - D_801D0578 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801D0594; -extern s16 D_801D0596; -extern s16 D_801D0598; -extern s16 D_801D059C; -extern s16 D_801D059E; -extern s16 D_801D05A0; - -void func_8017B824(void) { - D_801D0594 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801D0596 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801D0598 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801D059C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801D059E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801D05A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801D0594; -extern s16 D_801D0596; -extern s16 D_801D0598; -extern s16 D_801D059C; -extern s16 D_801D059E; -extern s16 D_801D05A0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801D0594; - D_80114F34 = D_801D0596; - D_80114F38 = D_801D0598; - D_80114F24 = D_801D059C; - D_80114F28 = D_801D059E; - D_80114F2C = D_801D05A0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801D057C), src[8..15] -> (*(S8_8017B8E8 *)&D_801D0574) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801D057C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801D0574) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801D0584; -extern u16 D_801D0586; -extern u16 D_801D0588; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801D0504; -extern short D_801D058C; -extern short D_801D058E; -extern short D_801D0590; -extern s16 D_801D057C; -extern s16 D_801D057E; -extern s16 D_801D0580; -extern s16 D_801D0574; -extern s16 D_801D0576; -extern s16 D_801D0578; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D0584); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D0586); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D0588); - (*(s16 *)&D_801D058C) = buf[0]; - (*(s16 *)&D_801D058E) = buf[1]; - (*(s16 *)&D_801D0590) = buf[2]; - D_801D057C = D_80114F30 + buf[0]; - D_801D0504 = 0; - D_801D057E = D_80114F34 + buf[1]; - D_801D0580 = D_80114F38 + buf[2]; - D_801D0574 = D_80114F24 + buf[0]; - D_801D0576 = D_80114F28 + buf[1]; - D_801D0578 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801D0524; -extern SV4 D_801D052C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D052C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801D0524 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801D052C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D052C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801D0524) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801D052C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801D054C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801D054C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801D0504; -extern s16 D_801D0F78; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801D0504 = D_801D0504 + 1; - if (D_801D0504 >= 0x1F) { - D_801D0F78 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801D0504; -extern s16 D_801D0F78; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D0504 = D_801D0504 + 1; - if (0x18 < D_801D0504) { - func_8012A4BC(); - D_801D0F78 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801D0504; -extern void (*D_801D0548)(void); -extern short D_801D058C; -extern short D_801D058E; -extern short D_801D0590; -extern s16 D_801D0F78; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801D0504 = D_801D0504 + 1; - if (D_801D0504 >= 0x19) { - if (D_801D0548 != 0) { - (*D_801D0548)(); - } else { - D_80114F30 = D_80114F30 + D_801D058C; - D_80114F34 = D_80114F34 + D_801D058E; - D_80114F38 = D_80114F38 + D_801D0590; - D_80114F24 = D_80114F24 + D_801D058C; - D_80114F28 = D_80114F28 + D_801D058E; - D_80114F2C = D_80114F2C + D_801D0590; - func_8012A4BC(); - } - D_801D0F78 = 0; - } -} - - - -extern void (*D_80195214[])(void); - -void func_8017BE60(void *a0) { - D_80195214[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - - -extern void (*D_8019522C[])(void); - -void func_8017BEBC(void *a0) { - D_8019522C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017BEF8); - -DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017C0A4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017C120); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017C1DC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017C24C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D12C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D1F8); - - -extern void (*D_80195264[])(void); - -void func_8017D354(void *a0) { - D_80195264[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D390); - -extern void func_8002931C(void); - void func_8017D3F0(void) { - ((void (*)(s32))func_8002931C)(0x3C00000); - } - - - -extern void (*D_801952BC[])(void); - -void func_8017D410(void *a0) { - D_801952BC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D44C); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D490(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801952C4[])(void); - -void func_8017D4B4(void *a0) { - D_801952C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D4F0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D530(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017D5AC(void) { - func_800D1EBC(); - } - - - -extern void (*D_801952D0[])(void); - -void func_8017D5CC(void *a0) { - D_801952D0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D608); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D67C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D6A4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D6CC); - - -extern void (*D_801952F4[])(void); - -void func_8017D7A4(void *a0) { - D_801952F4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017D7E0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DA78); - -void func_8017DC10(void *a0) { - *(short *)((char *)a0 + 0xa0) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DC18); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DC30); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DCC4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DD48); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DD88); - - -extern void (*D_801952FC[])(void); - -void func_8017DDC4(void *a0) { - D_801952FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DE00); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DE74); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DF44); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017DFE8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E0E4); - - -s32 func_8017E21C(void) { - return 126; -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E224); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E3EC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E594); - -s32 func_8017E5F4(s32 *a0) { - s16 v = *(u16 *)((s32)a0 + 0xA) + 4; - *(u16 *)((s32)a0 + 0xA) = v; - return 0; - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E60C); - -void func_8017E694(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E69C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E784); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E7DC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E82C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017E8B0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EA0C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EA60); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EA84); - - -extern void (*D_801953D0[])(void); - -void func_8017EAC8(void *a0) { - D_801953D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EB04); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EC50); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017ECC8); - - -void func_8017ECF8(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017ED0C); - - -extern void (*D_80195408[])(void); - -void func_8017ED74(void *a0) { - D_80195408[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EDB0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EDFC); - -void func_8017EE44(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EE4C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017EFB0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017F32C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017F53C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017F940); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017FAB4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017FC64); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8017FEF0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801803B4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80180584); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80180774); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80180A8C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80180C84); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801810CC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801812DC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181720); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181930); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181BB4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181BD4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181CD4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181D74); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181E34); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181ECC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181EEC); - -void func_80181FDC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80181FE4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801820B8); - -extern void func_8012B370(int a0); - void func_80182178(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182198); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801821B8); - -void func_801822AC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801822B4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801823A8); - -extern void func_8012B370(int a0); - void func_80182468(void) { - ((void (*)(void))func_8012B370)(); - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182488); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801824F8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182714); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182764); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018282C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182998); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801829D8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182B60); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182B94); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182C1C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182C68); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182DA4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182DF8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182F48); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80182F88); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183004); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183284); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801832CC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018338C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801833CC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183530); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183584); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183694); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801836FC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183B7C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183CF0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183DA8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183E88); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183EC8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183F48); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80183F80); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80184254); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801843CC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80184414); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801846B4); - -extern void func_80185AC0(void); - void func_80184830(s32 *param) { - if (*(s16 *)((char *)param + 0x98) == 0) { - ((void (*)(void))func_80185AC0)(); - } - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80184860); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801849E0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80184CF8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018515C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801851C0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018520C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185288); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801852D8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018531C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185364); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801853B0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018541C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185808); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018595C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018597C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185A00); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185AC0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185BB8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185CD8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185DA8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80185F6C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801860E4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186144); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018626C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801862CC); - - -extern void (*D_801AFC18[])(void); - -void func_801863AC(void *a0) { - D_801AFC18[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801863E8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186574); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186858); - -extern void (*D_801AFD70[])(void); - -void func_80186B10(void *a0) { - D_801AFD70[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186B4C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186CBC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186D24); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186F7C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80186FDC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187114); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187138); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187588); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187624); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801877DC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187818); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187898); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187A88); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187D0C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187DA4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187E08); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187E54); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187ED4); - -extern void (*D_801AFDA4[])(void); - -void func_80187F3C(void *a0) { - D_801AFDA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80187F78); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801883DC); - -extern void (*D_801AFDC4[])(void); - -void func_80188480(void *a0) { - D_801AFDC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801884BC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801886B0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801887EC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801888E8); - -extern void (*D_801AFDD0[])(void); - -void func_80188A54(void *a0) { - D_801AFDD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80188A90); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80188B40); - - -extern s32 D_801D0C38; -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80188BF8(s32 a0, s32 a1) { - D_801D0C38 = a1; - return func_8012C588(0x85, a0); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80188C28); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80188E6C); - - -extern void (*D_801C7C10[])(void); - -void func_8018910C(void *a0) { - D_801C7C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189148); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189250); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189390); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801895AC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189B9C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189D30); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80189EC4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018A318); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018A6F8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018AAF4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018AD9C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018B3D0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018BB48); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018BCD4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018C2D8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018CD5C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018D05C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018D7B4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018D98C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018E4A4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018E89C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018ECA0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F028); - -void func_8018F088(void) { -} - -void func_8018F090(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F098); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F194); - -void func_8018F2BC(void) { -} - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F2C4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F3E0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F518); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F6EC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018F898); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018FA80); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8018FDBC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190064); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190194); - - -extern void (*D_801C9600[])(void); - -void func_8019026C(void *a0) { - D_801C9600[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801902A8); - - -extern void (*D_801C9620[])(void); - -void func_8019041C(void *a0) { - D_801C9620[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190458); - - -extern void func_8002D4C8(s32 arg0, s32 arg1); -extern void func_8018F518(void); - -void func_801904E0(void *a0) { - func_8002D4C8(0xB32, 0); - ((void (*)(void *))func_8018F518)(a0); -} - - - - -extern void func_8018F6EC(void); - void func_80190518(s32 *param) { - *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; - func_8018F6EC(); - } - - -extern void func_8018F6EC(void); - void func_80190540(s32 *a0) { - s32 v1 = *(s32 *)((s32)a0 + 0x20); - *(u16 *)(v1 + 0x10) += 0x20; - func_8018F6EC(); - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190574); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801905C0); - -extern void func_8018F518(void); - void func_801906AC(s32 *a0) { - *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; - *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; - ((void (*)(void))func_8018F518)(); - } - - -extern void func_8018F518(void); - void func_801906E0(s32 a0) { - s32 v0; - v0 = 0xC; - *(s8 *)(a0 + 0xC1) = v0; - *(s32 *)(a0 + 0x1C) = 0x3C; - ((void (*)(void))func_8018F518)(); - } - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8019070C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190798); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801908C0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801909F4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190A54); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190B14); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190BE8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190CE0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_80190E64); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8019131C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801914A0); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801915A8); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_801916BC); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_801734BC", func_8019171C); - diff --git a/src/ov_SC06_033/ov_SC06_033_jr_80178D40.c b/src/ov_SC06_033/ov_SC06_033_jr_80178D40.c new file mode 100644 index 000000000..7864b9872 --- /dev/null +++ b/src/ov_SC06_033/ov_SC06_033_jr_80178D40.c @@ -0,0 +1,4917 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80194A1C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CF870; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80194A10[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80194A54[]; +extern unsigned short D_80194A5C[]; +extern unsigned short D_80194A64[]; +extern unsigned char D_801CF878[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CF870; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80194A6C[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CF9AC; +extern M2C_UNK D_801CF9B0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CF938; +extern void (*D_80194A9C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CF9B4[]; +extern u8 D_801CF9BC[]; +extern u8 D_801CF96C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80194AA4[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80194AC0[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80194AC8[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80194B30[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80194AD4; +extern u8 D_80194AE0; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80194B64[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80194B6C[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80194BC0[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80194BF4[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80194BE4[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80194C10; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80194C88[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80194C90[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80194C98[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80194CA0[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80194CA8[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80194CB0[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80194CBC[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80194CC8[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80194CD4[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80194CE4[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80194CF4[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80194CFC[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80194D04[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80194D0C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80194D14[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80194D1C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80194D24[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80194D2C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80194D34[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80194D3C[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80194D44[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80194D4C[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80194D54[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80194D5C[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80194D64[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80194D6C[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80194D74[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80194D7C[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80194D84[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80194D8C[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80194D94[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80194D9C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80194DA4[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80194DE8[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80194DAC; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80194E18[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80194E54[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80194EAC[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80194EBC[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80194EC4[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8019502C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80195038[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CED80; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D0F78; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801D00F0; +extern short D_801D0FEC; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D0FEC) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D0FEC)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801D00F0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D0FEC) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D0F48 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D0F48 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D0FEC) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D0FEC) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801D054C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801D00F4; + extern s32 D_801D0508; + extern s16 D_801D050C; + extern s16 D_801D0510; + extern s16 D_801D0514; + extern s16 D_801D0518; + extern s32 D_801D0520; + extern s32 D_801D0524; + extern s32 D_801D0534; + extern s16 D_801D0538; + extern s16 D_801D053C; + extern s32 D_801D0540; + extern s32 D_801D0548; + extern s32 D_801D054C[10]; + extern s32 D_801D0E90; + extern s16 D_801D0F48; + extern s32 D_801D0F74; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D0F48; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801D0508); + D_801D0508 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D0514, D_801D0518 ? 0x48 : 0x40); + (*(s16*)&D_801D0FEC) = 2; + break; + case 0: + func_80179B28(D_801D0508); + D_801D0508 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801D050C, D_801D0510 ? 0x48 : 0x40); + (*(s16*)&D_801D0FEC) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D0E90 != 0) { + func_80179B28(D_801D0508); + D_801D0508 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801D050C, D_801D0510 ? 0x48 : 0x40); + (*(s16*)&D_801D0FEC) = 1; + } else { + (*(s16*)&D_801D0FEC) = 3; + } + break; + case 0x32: + func_80179B28(D_801D0508); + D_801D0508 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801D050C, + D_801D0510 ? 0x48 : 0x40); + (*(s16*)&D_801D0FEC) = 1; + break; + case 2: + func_80179B28(D_801D0508); + if (D_801D0520 != 0) { + D_801D00F0 = D_801D0520; + D_801D0520 = 0; + (*(s16*)&D_801D0FEC) = 3; + return; + } + (*(s16*)&D_801D0FEC) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D0FEC) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D0FEC) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D0FEC) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x1B: + D_801D0540 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D0FEC) = 4; + D_801D00F4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D0FEC) = 5; + D_801D0534 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801D0534 = (s32)func_8017A3B0; + (*(s16*)&D_801D0FEC) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x24: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D0FEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D0FEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D0FEC) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0FEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0FEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0FEC) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D0FEC) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D0524); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801D0524); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D0524); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801D0524); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x4E: + D_801D0548 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x2B: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D0FEC) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D0F74 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x34: + (*(s16*)&D_801D0FEC) = 3; + D_801D00F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801D0520 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D0FEC) = 3; + D_801D00F0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D0FEC) = 3; + D_801D00F0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801D00F0 = *(s32 *)(D_801D00F0 + 4); + return; + case 0x37: + (*(s16*)&D_801D0FEC) = 3; + D_801D050C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0510 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D0FEC) = 3; + D_801D0514 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801D0518 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D0FEC) = 3; + D_801D050C = w1; + D_801D0510 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D0FEC) = 3; + D_801D0514 = w2; + D_801D0518 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x43: + D_801D0534 = (s32)func_8017A3D8; + D_801D053C = 0; + (*(s16*)&D_801D0FEC) = 5; + D_801D0538 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0FEC) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0FEC) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801D054C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D0FEC) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801D054C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D0FEC) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801D054C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D0FEC) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801D054C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D0FEC) = 3; + break; + default: + break; + } +Lend: + D_801D00F0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D051C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801D051C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801D051C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801D051C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801D0544; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801D0544 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801D0500; + +s32 func_8017A3B0(void) { + switch (D_801D0500) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801D053C; +extern short D_801D0538; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801D053C) { + case 0: + func_800D0CA0(1); + D_801D053C = D_801D053C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801D0538; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801D053C = D_801D053C + 1; + if (D_801D053C < 0x1E) { + return 0; + } + D_801D053C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801D057C; + extern s16 D_801D057E; + extern s16 D_801D0580; + extern s16 D_801D0574; + extern s16 D_801D0576; + extern s16 D_801D0578; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801D057C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801D057E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801D0580, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801D0574, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801D0576, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801D0578, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801D0504; +extern u16 D_801D0584; +extern u16 D_801D0586; +extern u16 D_801D0588; +extern s16 D_801D0F78; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D0F78 = 0; + D_801D0504 = 0; + D_801D0584 = D_80126B5E; + D_801D0586 = D_80126B62; + D_801D0588 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80195174[]; + extern s16 D_801D057C; + extern s16 D_801D0574; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80195174[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80195174[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D057C; + s16 *p78C = &D_801D0574; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D0F78 = 1; + D_801D0504 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801D0524; + extern SV4_8017B368 D_801D052C; + extern s16 D_801D057C; + extern s16 D_801D0574; + extern u16 D_80195174; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801D0524; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801D052C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80195174)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80195174)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801D057C) = loc0; + (*(SV4_8017B368 *)&D_801D0574) = loc1; + D_801D0F78 = 1; + D_801D0504 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80195174[]; + extern s16 D_801D057C; + extern s16 D_801D057E; + extern s16 D_801D0580; + extern s16 D_801D0574; + extern s16 D_801D0576; + extern s16 D_801D0578; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80195174[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80195174[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801D057C; + s16 *p78C = &D_801D0574; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801D057E; + v798 = D_801D0580; + v78C = *p78C; + v78E = D_801D0576; + v790 = D_801D0578; + __asm__ __volatile__(""); + D_801D0F78 = 1; + D_801D0504 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D0504; +extern s16 D_801D057C; +extern s16 D_801D057E; +extern s16 D_801D0580; +extern s16 D_801D0574; +extern s16 D_801D0576; +extern s16 D_801D0578; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801D0504 = 0; + D_801D057C = (s16) D_80114F30; + D_801D057E = (s16) D_80114F34; + D_801D0580 = (s16) D_80114F38; + D_801D0574 = (s16) D_80114F24; + D_801D0576 = (s16) D_80114F28; + D_801D0578 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801D0594; +extern s16 D_801D0596; +extern s16 D_801D0598; +extern s16 D_801D059C; +extern s16 D_801D059E; +extern s16 D_801D05A0; + +void func_8017B824(void) { + D_801D0594 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801D0596 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801D0598 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801D059C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801D059E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801D05A0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801D0594; +extern s16 D_801D0596; +extern s16 D_801D0598; +extern s16 D_801D059C; +extern s16 D_801D059E; +extern s16 D_801D05A0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801D0594; + D_80114F34 = D_801D0596; + D_80114F38 = D_801D0598; + D_80114F24 = D_801D059C; + D_80114F28 = D_801D059E; + D_80114F2C = D_801D05A0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801D057C), src[8..15] -> (*(S8_8017B8E8 *)&D_801D0574) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801D057C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801D0574) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801D0584; +extern u16 D_801D0586; +extern u16 D_801D0588; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801D0504; +extern short D_801D058C; +extern short D_801D058E; +extern short D_801D0590; +extern s16 D_801D057C; +extern s16 D_801D057E; +extern s16 D_801D0580; +extern s16 D_801D0574; +extern s16 D_801D0576; +extern s16 D_801D0578; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801D0584); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801D0586); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801D0588); + (*(s16 *)&D_801D058C) = buf[0]; + (*(s16 *)&D_801D058E) = buf[1]; + (*(s16 *)&D_801D0590) = buf[2]; + D_801D057C = D_80114F30 + buf[0]; + D_801D0504 = 0; + D_801D057E = D_80114F34 + buf[1]; + D_801D0580 = D_80114F38 + buf[2]; + D_801D0574 = D_80114F24 + buf[0]; + D_801D0576 = D_80114F28 + buf[1]; + D_801D0578 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801D0524; +extern SV4 D_801D052C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801D052C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801D0524 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801D052C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801D052C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801D0524) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801D052C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801D054C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801D054C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801D0504; +extern s16 D_801D0F78; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801D0504 = D_801D0504 + 1; + if (D_801D0504 >= 0x1F) { + D_801D0F78 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801D0504; +extern s16 D_801D0F78; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D0504 = D_801D0504 + 1; + if (0x18 < D_801D0504) { + func_8012A4BC(); + D_801D0F78 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801D0504; +extern void (*D_801D0548)(void); +extern short D_801D058C; +extern short D_801D058E; +extern short D_801D0590; +extern s16 D_801D0F78; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801D0504 = D_801D0504 + 1; + if (D_801D0504 >= 0x19) { + if (D_801D0548 != 0) { + (*D_801D0548)(); + } else { + D_80114F30 = D_80114F30 + D_801D058C; + D_80114F34 = D_80114F34 + D_801D058E; + D_80114F38 = D_80114F38 + D_801D0590; + D_80114F24 = D_80114F24 + D_801D058C; + D_80114F28 = D_80114F28 + D_801D058E; + D_80114F2C = D_80114F2C + D_801D0590; + func_8012A4BC(); + } + D_801D0F78 = 0; + } +} + + + +extern void (*D_80195214[])(void); + +void func_8017BE60(void *a0) { + D_80195214[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + + +extern void (*D_8019522C[])(void); + +void func_8017BEBC(void *a0) { + D_8019522C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017BEF8); + +DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017C0A4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017C120); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017C1DC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017C24C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D12C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D1F8); + + +extern void (*D_80195264[])(void); + +void func_8017D354(void *a0) { + D_80195264[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D390); + +extern void func_8002931C(void); + void func_8017D3F0(void) { + ((void (*)(s32))func_8002931C)(0x3C00000); + } + + + +extern void (*D_801952BC[])(void); + +void func_8017D410(void *a0) { + D_801952BC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D44C); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D490(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801952C4[])(void); + +void func_8017D4B4(void *a0) { + D_801952C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D4F0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D530(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017D5AC(void) { + func_800D1EBC(); + } + + + +extern void (*D_801952D0[])(void); + +void func_8017D5CC(void *a0) { + D_801952D0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D608); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D67C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D6A4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D6CC); + + +extern void (*D_801952F4[])(void); + +void func_8017D7A4(void *a0) { + D_801952F4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017D7E0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DA78); + +void func_8017DC10(void *a0) { + *(short *)((char *)a0 + 0xa0) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DC18); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DC30); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DCC4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DD48); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DD88); + + +extern void (*D_801952FC[])(void); + +void func_8017DDC4(void *a0) { + D_801952FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DE00); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DE74); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DF44); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017DFE8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E0E4); + + +s32 func_8017E21C(void) { + return 126; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E224); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E3EC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E594); + +s32 func_8017E5F4(s32 *a0) { + s16 v = *(u16 *)((s32)a0 + 0xA) + 4; + *(u16 *)((s32)a0 + 0xA) = v; + return 0; + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E60C); + +void func_8017E694(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E69C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E784); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E7DC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E82C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017E8B0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EA0C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EA60); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EA84); + + +extern void (*D_801953D0[])(void); + +void func_8017EAC8(void *a0) { + D_801953D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EB04); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EC50); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017ECC8); + + +void func_8017ECF8(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017ED0C); + + +extern void (*D_80195408[])(void); + +void func_8017ED74(void *a0) { + D_80195408[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EDB0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EDFC); + +void func_8017EE44(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EE4C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017EFB0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017F32C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017F53C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017F940); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017FAB4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017FC64); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8017FEF0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801803B4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80180584); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80180774); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80180A8C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80180C84); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801810CC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801812DC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181720); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181930); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181BB4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181BD4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181CD4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181D74); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181E34); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181ECC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181EEC); + +void func_80181FDC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80181FE4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801820B8); + +extern void func_8012B370(int a0); + void func_80182178(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182198); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801821B8); + +void func_801822AC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801822B4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801823A8); + +extern void func_8012B370(int a0); + void func_80182468(void) { + ((void (*)(void))func_8012B370)(); + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182488); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801824F8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182714); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182764); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018282C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182998); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801829D8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182B60); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182B94); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182C1C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182C68); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182DA4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182DF8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182F48); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80182F88); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183004); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183284); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801832CC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018338C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801833CC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183530); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183584); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183694); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801836FC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183B7C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183CF0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183DA8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183E88); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183EC8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183F48); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80183F80); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80184254); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801843CC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80184414); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801846B4); + +extern void func_80185AC0(void); + void func_80184830(s32 *param) { + if (*(s16 *)((char *)param + 0x98) == 0) { + ((void (*)(void))func_80185AC0)(); + } + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80184860); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801849E0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80184CF8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018515C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801851C0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018520C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185288); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801852D8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018531C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185364); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801853B0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018541C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185808); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018595C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018597C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185A00); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185AC0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185BB8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185CD8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185DA8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80185F6C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801860E4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186144); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018626C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801862CC); + + +extern void (*D_801AFC18[])(void); + +void func_801863AC(void *a0) { + D_801AFC18[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801863E8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186574); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186858); + +extern void (*D_801AFD70[])(void); + +void func_80186B10(void *a0) { + D_801AFD70[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186B4C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186CBC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186D24); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186F7C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80186FDC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187114); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187138); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187588); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187624); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801877DC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187818); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187898); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187A88); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187D0C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187DA4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187E08); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187E54); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187ED4); + +extern void (*D_801AFDA4[])(void); + +void func_80187F3C(void *a0) { + D_801AFDA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80187F78); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801883DC); + +extern void (*D_801AFDC4[])(void); + +void func_80188480(void *a0) { + D_801AFDC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801884BC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801886B0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801887EC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801888E8); + +extern void (*D_801AFDD0[])(void); + +void func_80188A54(void *a0) { + D_801AFDD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80188A90); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80188B40); + + +extern s32 D_801D0C38; +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80188BF8(s32 a0, s32 a1) { + D_801D0C38 = a1; + return func_8012C588(0x85, a0); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80188C28); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80188E6C); + + +extern void (*D_801C7C10[])(void); + +void func_8018910C(void *a0) { + D_801C7C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189148); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189250); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189390); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801895AC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189B9C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189D30); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80189EC4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018A318); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018A6F8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018AAF4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018AD9C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018B3D0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018BB48); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018BCD4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018C2D8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018CD5C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018D05C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018D7B4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018D98C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018E4A4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018E89C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018ECA0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F028); + +void func_8018F088(void) { +} + +void func_8018F090(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F098); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F194); + +void func_8018F2BC(void) { +} + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F2C4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F3E0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F518); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F6EC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018F898); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018FA80); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8018FDBC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190064); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190194); + + +extern void (*D_801C9600[])(void); + +void func_8019026C(void *a0) { + D_801C9600[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801902A8); + + +extern void (*D_801C9620[])(void); + +void func_8019041C(void *a0) { + D_801C9620[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190458); + + +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_8018F518(void); + +void func_801904E0(void *a0) { + func_8002D4C8(0xB32, 0); + ((void (*)(void *))func_8018F518)(a0); +} + + + + +extern void func_8018F6EC(void); + void func_80190518(s32 *param) { + *(s16 *)(*(s32 *)((char *)param + 0x20) + 0x10) = 0xE00; + func_8018F6EC(); + } + + +extern void func_8018F6EC(void); + void func_80190540(s32 *a0) { + s32 v1 = *(s32 *)((s32)a0 + 0x20); + *(u16 *)(v1 + 0x10) += 0x20; + func_8018F6EC(); + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190574); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801905C0); + +extern void func_8018F518(void); + void func_801906AC(s32 *a0) { + *(s32 *)((s32)a0 + 0x10) = *(s32 *)((s32)a0 + 0x10) >> 1; + *(s32 *)((s32)a0 + 0x18) = *(s32 *)((s32)a0 + 0x18) >> 1; + ((void (*)(void))func_8018F518)(); + } + + +extern void func_8018F518(void); + void func_801906E0(s32 a0) { + s32 v0; + v0 = 0xC; + *(s8 *)(a0 + 0xC1) = v0; + *(s32 *)(a0 + 0x1C) = 0x3C; + ((void (*)(void))func_8018F518)(); + } + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8019070C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190798); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801908C0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801909F4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190A54); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190B14); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190BE8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190CE0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_80190E64); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8019131C); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801914A0); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801915A8); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_801916BC); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80178D40", func_8019171C); + + diff --git a/src/ov_SC07_000/ov_SC07_000_jr_801734BC.c b/src/ov_SC07_000/ov_SC07_000_jr_801734BC.c index 77e0712fc..aca0292bd 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_801734BC.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_801734BC.c @@ -3084,1204 +3084,3 @@ void func_80178D18(void) { D_801D0CE4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CFA64; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801CFA64 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801CFA64; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801CFA64 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801CFA8C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801CFA8C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801CFA48; - -s32 func_8017A3B0(void) { - switch (D_801CFA48) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801CFA84; -extern short D_801CFA80; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801CFA84) { - case 0: - func_800D0CA0(1); - D_801CFA84 = D_801CFA84 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801CFA80; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801CFA84 = D_801CFA84 + 1; - if (D_801CFA84 < 0x1E) { - return 0; - } - D_801CFA84 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801CFAC4; - extern s16 D_801CFAC6; - extern s16 D_801CFAC8; - extern s16 D_801CFABC; - extern s16 D_801CFABE; - extern s16 D_801CFAC0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CFAC4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CFAC6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CFAC8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CFABC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CFABE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CFAC0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801CFA4C; -extern u16 D_801CFACC; -extern u16 D_801CFACE; -extern u16 D_801CFAD0; -extern s16 D_801D0C70; - -void func_8017B1D8(void) { - func_8012A418(); - D_801D0C70 = 0; - D_801CFA4C = 0; - D_801CFACC = D_80126B5E; - D_801CFACE = D_80126B62; - D_801CFAD0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185FBC[]; - extern s16 D_801CFAC4; - extern s16 D_801CFABC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185FBC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185FBC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CFAC4; - s16 *p78C = &D_801CFABC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801D0C70 = 1; - D_801CFA4C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801CFA6C; - extern SV4_8017B368 D_801CFA74; - extern s16 D_801CFAC4; - extern s16 D_801CFABC; - extern u16 D_80185FBC; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801CFA6C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801CFA74; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80185FBC)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80185FBC)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801CFAC4) = loc0; - (*(SV4_8017B368 *)&D_801CFABC) = loc1; - D_801D0C70 = 1; - D_801CFA4C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80185FBC[]; - extern s16 D_801CFAC4; - extern s16 D_801CFAC6; - extern s16 D_801CFAC8; - extern s16 D_801CFABC; - extern s16 D_801CFABE; - extern s16 D_801CFAC0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80185FBC[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80185FBC[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801CFAC4; - s16 *p78C = &D_801CFABC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801CFAC6; - v798 = D_801CFAC8; - v78C = *p78C; - v78E = D_801CFABE; - v790 = D_801CFAC0; - __asm__ __volatile__(""); - D_801D0C70 = 1; - D_801CFA4C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CFA4C; -extern s16 D_801CFAC4; -extern s16 D_801CFAC6; -extern s16 D_801CFAC8; -extern s16 D_801CFABC; -extern s16 D_801CFABE; -extern s16 D_801CFAC0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801CFA4C = 0; - D_801CFAC4 = (s16) D_80114F30; - D_801CFAC6 = (s16) D_80114F34; - D_801CFAC8 = (s16) D_80114F38; - D_801CFABC = (s16) D_80114F24; - D_801CFABE = (s16) D_80114F28; - D_801CFAC0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801CFADC; -extern s16 D_801CFADE; -extern s16 D_801CFAE0; -extern s16 D_801CFAE4; -extern s16 D_801CFAE6; -extern s16 D_801CFAE8; - -void func_8017B824(void) { - D_801CFADC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801CFADE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801CFAE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801CFAE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801CFAE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801CFAE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801CFADC; -extern s16 D_801CFADE; -extern s16 D_801CFAE0; -extern s16 D_801CFAE4; -extern s16 D_801CFAE6; -extern s16 D_801CFAE8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801CFADC; - D_80114F34 = D_801CFADE; - D_80114F38 = D_801CFAE0; - D_80114F24 = D_801CFAE4; - D_80114F28 = D_801CFAE6; - D_80114F2C = D_801CFAE8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801CFAC4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CFABC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801CFAC4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801CFABC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801CFACC; -extern u16 D_801CFACE; -extern u16 D_801CFAD0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801CFA4C; -extern short D_801CFAD4; -extern short D_801CFAD6; -extern short D_801CFAD8; -extern s16 D_801CFAC4; -extern s16 D_801CFAC6; -extern s16 D_801CFAC8; -extern s16 D_801CFABC; -extern s16 D_801CFABE; -extern s16 D_801CFAC0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CFACC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CFACE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CFAD0); - (*(s16 *)&D_801CFAD4) = buf[0]; - (*(s16 *)&D_801CFAD6) = buf[1]; - (*(s16 *)&D_801CFAD8) = buf[2]; - D_801CFAC4 = D_80114F30 + buf[0]; - D_801CFA4C = 0; - D_801CFAC6 = D_80114F34 + buf[1]; - D_801CFAC8 = D_80114F38 + buf[2]; - D_801CFABC = D_80114F24 + buf[0]; - D_801CFABE = D_80114F28 + buf[1]; - D_801CFAC0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801CFA6C; -extern SV4 D_801CFA74; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CFA74) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801CFA6C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801CFA74 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CFA74)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801CFA6C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801CFA74) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801CFA94[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801CFA94; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801CFA4C; -extern s16 D_801D0C70; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801CFA4C = D_801CFA4C + 1; - if (D_801CFA4C >= 0x1F) { - D_801D0C70 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801CFA4C; -extern s16 D_801D0C70; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CFA4C = D_801CFA4C + 1; - if (0x18 < D_801CFA4C) { - func_8012A4BC(); - D_801D0C70 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801CFA4C; -extern void (*D_801CFA90)(void); -extern short D_801CFAD4; -extern short D_801CFAD6; -extern short D_801CFAD8; -extern s16 D_801D0C70; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801CFA4C = D_801CFA4C + 1; - if (D_801CFA4C >= 0x19) { - if (D_801CFA90 != 0) { - (*D_801CFA90)(); - } else { - D_80114F30 = D_80114F30 + D_801CFAD4; - D_80114F34 = D_80114F34 + D_801CFAD6; - D_80114F38 = D_80114F38 + D_801CFAD8; - D_80114F24 = D_80114F24 + D_801CFAD4; - D_80114F28 = D_80114F28 + D_801CFAD6; - D_80114F2C = D_80114F2C + D_801CFAD8; - func_8012A4BC(); - } - D_801D0C70 = 0; - } -} - - - -extern void (*D_8018605C[])(void); - -void func_8017BE60(void *a0) { - D_8018605C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017CDF0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017D8C4); - - -extern void (*D_801860B8[])(void); - -void func_8017D8E4(void *a0) { - D_801860B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017D920); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D964(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_801860C0[])(void); - -void func_8017D988(void *a0) { - D_801860C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017D9C4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017D9E0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DA54); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DA78); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DAA0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DAC8); - - -extern void (*D_801860D4[])(void); - -void func_8017DB64(void *a0) { - D_801860D4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DBA0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DC68); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DE00); - -extern s32 D_801D0598; - void func_8017DF84(s32 arg0) { - D_801D0598 = arg0; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DF94); - -s32 func_8017DFF4(void) { - return 0x86; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017DFFC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E01C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E040); - -extern s16 D_801D0B7C; - void func_8017E058(void) { - D_801D0B7C = 0x2; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E06C); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8017E084(void *arg0) { - *(s32 *)((char *)arg0 + 0x1c) = 0x40; - func_8002D4C8(0xB70, 0); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E0B0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E118); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E1A8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E1BC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E20C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E268); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E3A4); - - -s32 func_8017E3F0(s32 arg0) { - return *(u16*)(arg0 + 0x34) == 0x2; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E404); - -extern void func_8002D4C8(s32 arg0, s32 arg1); - void func_8017E41C(void *a0) { - *(s32 *)((s32)a0 + 0x1C) = 0x20; - func_8002D4C8(0xB70, 0); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E448); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E4B0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E524); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E554); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E56C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E58C); - -s32 func_8017E5B4(void) { - return 0; - } - - -extern s32 func_80014C54(s32 arg0, s32 arg1, s32 arg2); - s16 func_8017E5BC(void) { - return func_80014C54(1, 0, 0x10); - } - - -extern s16 D_801D0B7C; - void func_8017E5E8(void) { - D_801D0B7C = 0x6; - } - - - -extern void (*D_80186528[])(void); - -void func_8017E5FC(void *a0) { - D_80186528[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012B200(u8 *a0); - void func_8017E638(s32 *a0) { - *(s16 *)((s32)a0 + 0xFE) = 0; - ((void (*)(void))func_8012B200)(); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E658); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E7A0); - -void func_8017E7E8(void *a0) { - s32 v0 = *(u16 *)((s32)a0 + 0xA); - s32 v1 = *(u16 *)((s32)a0 + 0x52); - *(u16 *)((s32)a0 + 0x52) = 0; - *(u16 *)((s32)a0 + 0x102) = 0; - *(u16 *)((s32)a0 + 0xA) = v0 + v1; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E804); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E830); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017E960); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017EAD8); - - -extern void (*D_80186548[])(void); - -void func_8017EBC4(void *a0) { - D_80186548[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017EC00); - -void func_8017ECAC(void) { -} - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017ECB4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017ED8C); - -void func_8017EE38(void) { -} - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017EE40); - -extern void func_8012B200(u8 *a0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_8017EE8C(s32 param_1) { - ((void (*)(s32))func_8012B200)(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 2); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017EEC0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017EEE0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F044); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F098); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F0D0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F15C); - - -extern void (*D_80186560[])(void); - -void func_8017F3C0(void *a0) { - D_80186560[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F3FC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F464); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F4F8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F554); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F59C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F69C); - - -extern void (*D_8018658C[])(void); - -void func_8017F84C(void *a0) { - D_8018658C[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F888(s32 *a0, s32 *a1) { - *(u16 *)((s32)a0 + 0x6) = *(u16 *)((s32)a1 + 0x0); - *(u16 *)((s32)a0 + 0xA) = *(u16 *)((s32)a1 + 0x2); - *(u16 *)((s32)a0 + 0xE) = *(u16 *)((s32)a1 + 0x4); - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = *(u16 *)((s32)a1 + 0x6); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F8B8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F958); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017F9B4); - - -extern void (*D_801865AC[])(void); - -void func_8017FAFC(void *a0) { - D_801865AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017FB38); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017FBE8); - - -extern void (*D_801865C4[])(void); - -void func_8017FE20(void *a0) { - D_801865C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017FE5C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017FE9C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8017FEEC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018000C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018006C); - - -extern void (*D_801867DC[])(void); - -void func_801801C4(void *a0) { - D_801867DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180200); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801802E4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801803F0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180440); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180490); - - -extern void (*D_80186840[])(void); - -void func_80180584(void *a0) { - D_80186840[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801805C0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180704); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180790); - - -extern void (*D_80186858[])(void); - -void func_80180818(void *a0) { - D_80186858[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180854); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018091C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018096C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801809A4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180A3C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180AA4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180B3C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180B90); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180C68); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180CEC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180DB4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180ED0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80180FA8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018107C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181174); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181228); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181304); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801813D4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801814B0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181528); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801815F8); - - -extern void (*D_80186860[])(void); - -void func_80181670(void *a0) { - D_80186860[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_801816AC(u8 *param_1) { - *(short *)(param_1 + 0xfc) = 0; - *(unsigned short *)(param_1 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801816D8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181790); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801817B4); - - -extern s16 D_801D0A7C; - extern s16 D_801D0A7E; - extern s16 D_801D0A80; - extern s16 D_801D0A82; - void func_80181854(s32 arg0, s32 arg1, s32 arg2) { - D_801D0A7C = *(u16 *)((s32)arg0 + 0x0); - D_801D0A7E = *(u16 *)((s32)arg0 + 0x2); - D_801D0A80 = arg1; - D_801D0A82 = arg2; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181884); - -extern s16 D_801D0A82; - void func_801818FC(s32 arg0) { - *(s16 *)((s32)&D_801D0A82 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181918); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181970); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181A44); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181A80); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181ACC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181BA8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181E6C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181E90); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181EB8); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181F40); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80181FAC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018201C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80182094); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801820E0); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_801821FC); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_80182238); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801734BC", func_8018234C); - diff --git a/src/ov_SC07_000/ov_SC07_000_jr_80178D40.c b/src/ov_SC07_000/ov_SC07_000_jr_80178D40.c new file mode 100644 index 000000000..b836f830a --- /dev/null +++ b/src/ov_SC07_000/ov_SC07_000_jr_80178D40.c @@ -0,0 +1,4650 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80185864[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CEDB8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80185858[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018589C[]; +extern unsigned short D_801858A4[]; +extern unsigned short D_801858AC[]; +extern unsigned char D_801CEDC0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CEDB8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801858B4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CEEF4; +extern M2C_UNK D_801CEEF8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CEE80; +extern void (*D_801858E4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CEEFC[]; +extern u8 D_801CEF04[]; +extern u8 D_801CEEB4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801858EC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80185908[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80185910[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80185978[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018591C; +extern u8 D_80185928; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801859AC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801859B4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80185A08[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80185A3C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80185A2C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80185A58; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80185AD0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80185AD8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80185AE0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80185AE8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80185AF0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80185AF8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80185B04[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80185B10[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80185B1C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80185B2C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80185B3C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80185B44[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80185B4C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80185B54[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80185B5C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80185B64[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80185B6C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80185B74[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80185B7C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80185B84[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80185B8C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80185B94[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80185B9C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80185BA4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80185BAC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80185BB4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80185BBC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80185BC4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80185BCC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80185BD4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80185BDC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80185BE4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80185BEC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80185C30[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80185BF4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80185C60[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80185C9C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80185CF4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80185D04[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80185D0C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80185E74[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80185E80[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CE3DC; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801D0C70; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CF638; +extern short D_801D0CE4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801D0CE4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801D0CE4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801CF638 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801D0CE4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801D0C40 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801D0C40 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801D0CE4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801D0CE4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801CFA94[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801CF63C; + extern s32 D_801CFA50; + extern s16 D_801CFA54; + extern s16 D_801CFA58; + extern s16 D_801CFA5C; + extern s16 D_801CFA60; + extern s32 D_801CFA68; + extern s32 D_801CFA6C; + extern s32 D_801CFA7C; + extern s16 D_801CFA80; + extern s16 D_801CFA84; + extern s32 D_801CFA88; + extern s32 D_801CFA90; + extern s32 D_801CFA94[10]; + extern s32 D_801D0B78; + extern s16 D_801D0C40; + extern s32 D_801D0C6C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801D0C40; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801CFA50); + D_801CFA50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CFA5C, D_801CFA60 ? 0x48 : 0x40); + (*(s16*)&D_801D0CE4) = 2; + break; + case 0: + func_80179B28(D_801CFA50); + D_801CFA50 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801CFA54, D_801CFA58 ? 0x48 : 0x40); + (*(s16*)&D_801D0CE4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801D0B78 != 0) { + func_80179B28(D_801CFA50); + D_801CFA50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801CFA54, D_801CFA58 ? 0x48 : 0x40); + (*(s16*)&D_801D0CE4) = 1; + } else { + (*(s16*)&D_801D0CE4) = 3; + } + break; + case 0x32: + func_80179B28(D_801CFA50); + D_801CFA50 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801CFA54, + D_801CFA58 ? 0x48 : 0x40); + (*(s16*)&D_801D0CE4) = 1; + break; + case 2: + func_80179B28(D_801CFA50); + if (D_801CFA68 != 0) { + D_801CF638 = D_801CFA68; + D_801CFA68 = 0; + (*(s16*)&D_801D0CE4) = 3; + return; + } + (*(s16*)&D_801D0CE4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801D0CE4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801D0CE4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801D0CE4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x1B: + D_801CFA88 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801D0CE4) = 4; + D_801CF63C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801D0CE4) = 5; + D_801CFA7C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801CFA7C = (s32)func_8017A3B0; + (*(s16*)&D_801D0CE4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x24: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D0CE4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801D0CE4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801D0CE4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0CE4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0CE4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801D0CE4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801D0CE4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CFA6C); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801CFA6C); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CFA6C); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801CFA6C); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x4E: + D_801CFA90 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x2B: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801D0CE4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801D0C6C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x34: + (*(s16*)&D_801D0CE4) = 3; + D_801CF638 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801CFA68 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801D0CE4) = 3; + D_801CF638 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801D0CE4) = 3; + D_801CF638 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801CF638 = *(s32 *)(D_801CF638 + 4); + return; + case 0x37: + (*(s16*)&D_801D0CE4) = 3; + D_801CFA54 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CFA58 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801D0CE4) = 3; + D_801CFA5C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801CFA60 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801D0CE4) = 3; + D_801CFA54 = w1; + D_801CFA58 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801D0CE4) = 3; + D_801CFA5C = w2; + D_801CFA60 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x43: + D_801CFA7C = (s32)func_8017A3D8; + D_801CFA84 = 0; + (*(s16*)&D_801D0CE4) = 5; + D_801CFA80 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801D0CE4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801D0CE4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801CFA94; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801D0CE4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801CFA94; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801D0CE4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801CFA94[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801D0CE4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801CFA94; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801D0CE4) = 3; + break; + default: + break; + } +Lend: + D_801CF638 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CFA64; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801CFA64 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801CFA64; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801CFA64 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801CFA8C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801CFA8C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801CFA48; + +s32 func_8017A3B0(void) { + switch (D_801CFA48) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801CFA84; +extern short D_801CFA80; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801CFA84) { + case 0: + func_800D0CA0(1); + D_801CFA84 = D_801CFA84 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801CFA80; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801CFA84 = D_801CFA84 + 1; + if (D_801CFA84 < 0x1E) { + return 0; + } + D_801CFA84 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801CFAC4; + extern s16 D_801CFAC6; + extern s16 D_801CFAC8; + extern s16 D_801CFABC; + extern s16 D_801CFABE; + extern s16 D_801CFAC0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801CFAC4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801CFAC6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801CFAC8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801CFABC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801CFABE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801CFAC0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801CFA4C; +extern u16 D_801CFACC; +extern u16 D_801CFACE; +extern u16 D_801CFAD0; +extern s16 D_801D0C70; + +void func_8017B1D8(void) { + func_8012A418(); + D_801D0C70 = 0; + D_801CFA4C = 0; + D_801CFACC = D_80126B5E; + D_801CFACE = D_80126B62; + D_801CFAD0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185FBC[]; + extern s16 D_801CFAC4; + extern s16 D_801CFABC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185FBC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185FBC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CFAC4; + s16 *p78C = &D_801CFABC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801D0C70 = 1; + D_801CFA4C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801CFA6C; + extern SV4_8017B368 D_801CFA74; + extern s16 D_801CFAC4; + extern s16 D_801CFABC; + extern u16 D_80185FBC; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801CFA6C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801CFA74; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80185FBC)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80185FBC)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801CFAC4) = loc0; + (*(SV4_8017B368 *)&D_801CFABC) = loc1; + D_801D0C70 = 1; + D_801CFA4C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80185FBC[]; + extern s16 D_801CFAC4; + extern s16 D_801CFAC6; + extern s16 D_801CFAC8; + extern s16 D_801CFABC; + extern s16 D_801CFABE; + extern s16 D_801CFAC0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80185FBC[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80185FBC[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801CFAC4; + s16 *p78C = &D_801CFABC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801CFAC6; + v798 = D_801CFAC8; + v78C = *p78C; + v78E = D_801CFABE; + v790 = D_801CFAC0; + __asm__ __volatile__(""); + D_801D0C70 = 1; + D_801CFA4C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CFA4C; +extern s16 D_801CFAC4; +extern s16 D_801CFAC6; +extern s16 D_801CFAC8; +extern s16 D_801CFABC; +extern s16 D_801CFABE; +extern s16 D_801CFAC0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801CFA4C = 0; + D_801CFAC4 = (s16) D_80114F30; + D_801CFAC6 = (s16) D_80114F34; + D_801CFAC8 = (s16) D_80114F38; + D_801CFABC = (s16) D_80114F24; + D_801CFABE = (s16) D_80114F28; + D_801CFAC0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801CFADC; +extern s16 D_801CFADE; +extern s16 D_801CFAE0; +extern s16 D_801CFAE4; +extern s16 D_801CFAE6; +extern s16 D_801CFAE8; + +void func_8017B824(void) { + D_801CFADC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801CFADE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801CFAE0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801CFAE4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801CFAE6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801CFAE8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801CFADC; +extern s16 D_801CFADE; +extern s16 D_801CFAE0; +extern s16 D_801CFAE4; +extern s16 D_801CFAE6; +extern s16 D_801CFAE8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801CFADC; + D_80114F34 = D_801CFADE; + D_80114F38 = D_801CFAE0; + D_80114F24 = D_801CFAE4; + D_80114F28 = D_801CFAE6; + D_80114F2C = D_801CFAE8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801CFAC4), src[8..15] -> (*(S8_8017B8E8 *)&D_801CFABC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801CFAC4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801CFABC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801CFACC; +extern u16 D_801CFACE; +extern u16 D_801CFAD0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801CFA4C; +extern short D_801CFAD4; +extern short D_801CFAD6; +extern short D_801CFAD8; +extern s16 D_801CFAC4; +extern s16 D_801CFAC6; +extern s16 D_801CFAC8; +extern s16 D_801CFABC; +extern s16 D_801CFABE; +extern s16 D_801CFAC0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801CFACC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801CFACE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801CFAD0); + (*(s16 *)&D_801CFAD4) = buf[0]; + (*(s16 *)&D_801CFAD6) = buf[1]; + (*(s16 *)&D_801CFAD8) = buf[2]; + D_801CFAC4 = D_80114F30 + buf[0]; + D_801CFA4C = 0; + D_801CFAC6 = D_80114F34 + buf[1]; + D_801CFAC8 = D_80114F38 + buf[2]; + D_801CFABC = D_80114F24 + buf[0]; + D_801CFABE = D_80114F28 + buf[1]; + D_801CFAC0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801CFA6C; +extern SV4 D_801CFA74; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801CFA74) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801CFA6C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801CFA74 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801CFA74)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801CFA6C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801CFA74) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801CFA94[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801CFA94; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801CFA4C; +extern s16 D_801D0C70; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801CFA4C = D_801CFA4C + 1; + if (D_801CFA4C >= 0x1F) { + D_801D0C70 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801CFA4C; +extern s16 D_801D0C70; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CFA4C = D_801CFA4C + 1; + if (0x18 < D_801CFA4C) { + func_8012A4BC(); + D_801D0C70 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801CFA4C; +extern void (*D_801CFA90)(void); +extern short D_801CFAD4; +extern short D_801CFAD6; +extern short D_801CFAD8; +extern s16 D_801D0C70; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801CFA4C = D_801CFA4C + 1; + if (D_801CFA4C >= 0x19) { + if (D_801CFA90 != 0) { + (*D_801CFA90)(); + } else { + D_80114F30 = D_80114F30 + D_801CFAD4; + D_80114F34 = D_80114F34 + D_801CFAD6; + D_80114F38 = D_80114F38 + D_801CFAD8; + D_80114F24 = D_80114F24 + D_801CFAD4; + D_80114F28 = D_80114F28 + D_801CFAD6; + D_80114F2C = D_80114F2C + D_801CFAD8; + func_8012A4BC(); + } + D_801D0C70 = 0; + } +} + + + +extern void (*D_8018605C[])(void); + +void func_8017BE60(void *a0) { + D_8018605C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017CDF0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017D8C4); + + +extern void (*D_801860B8[])(void); + +void func_8017D8E4(void *a0) { + D_801860B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017D920); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D964(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_801860C0[])(void); + +void func_8017D988(void *a0) { + D_801860C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017D9C4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017D9E0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DA54); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DA78); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DAA0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DAC8); + + +extern void (*D_801860D4[])(void); + +void func_8017DB64(void *a0) { + D_801860D4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DBA0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DC68); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DE00); + +extern s32 D_801D0598; + void func_8017DF84(s32 arg0) { + D_801D0598 = arg0; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DF94); + +s32 func_8017DFF4(void) { + return 0x86; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017DFFC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E01C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E040); + +extern s16 D_801D0B7C; + void func_8017E058(void) { + D_801D0B7C = 0x2; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E06C); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8017E084(void *arg0) { + *(s32 *)((char *)arg0 + 0x1c) = 0x40; + func_8002D4C8(0xB70, 0); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E0B0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E118); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E1A8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E1BC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E20C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E268); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E3A4); + + +s32 func_8017E3F0(s32 arg0) { + return *(u16*)(arg0 + 0x34) == 0x2; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E404); + +extern void func_8002D4C8(s32 arg0, s32 arg1); + void func_8017E41C(void *a0) { + *(s32 *)((s32)a0 + 0x1C) = 0x20; + func_8002D4C8(0xB70, 0); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E448); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E4B0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E524); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E554); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E56C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E58C); + +s32 func_8017E5B4(void) { + return 0; + } + + +extern s32 func_80014C54(s32 arg0, s32 arg1, s32 arg2); + s16 func_8017E5BC(void) { + return func_80014C54(1, 0, 0x10); + } + + +extern s16 D_801D0B7C; + void func_8017E5E8(void) { + D_801D0B7C = 0x6; + } + + + +extern void (*D_80186528[])(void); + +void func_8017E5FC(void *a0) { + D_80186528[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012B200(u8 *a0); + void func_8017E638(s32 *a0) { + *(s16 *)((s32)a0 + 0xFE) = 0; + ((void (*)(void))func_8012B200)(); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E658); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E7A0); + +void func_8017E7E8(void *a0) { + s32 v0 = *(u16 *)((s32)a0 + 0xA); + s32 v1 = *(u16 *)((s32)a0 + 0x52); + *(u16 *)((s32)a0 + 0x52) = 0; + *(u16 *)((s32)a0 + 0x102) = 0; + *(u16 *)((s32)a0 + 0xA) = v0 + v1; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E804); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E830); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017E960); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017EAD8); + + +extern void (*D_80186548[])(void); + +void func_8017EBC4(void *a0) { + D_80186548[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017EC00); + +void func_8017ECAC(void) { +} + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017ECB4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017ED8C); + +void func_8017EE38(void) { +} + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017EE40); + +extern void func_8012B200(u8 *a0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017EE8C(s32 param_1) { + ((void (*)(s32))func_8012B200)(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 2); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017EEC0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017EEE0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F044); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F098); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F0D0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F15C); + + +extern void (*D_80186560[])(void); + +void func_8017F3C0(void *a0) { + D_80186560[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F3FC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F464); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F4F8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F554); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F59C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F69C); + + +extern void (*D_8018658C[])(void); + +void func_8017F84C(void *a0) { + D_8018658C[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F888(s32 *a0, s32 *a1) { + *(u16 *)((s32)a0 + 0x6) = *(u16 *)((s32)a1 + 0x0); + *(u16 *)((s32)a0 + 0xA) = *(u16 *)((s32)a1 + 0x2); + *(u16 *)((s32)a0 + 0xE) = *(u16 *)((s32)a1 + 0x4); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = *(u16 *)((s32)a1 + 0x6); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F8B8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F958); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017F9B4); + + +extern void (*D_801865AC[])(void); + +void func_8017FAFC(void *a0) { + D_801865AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017FB38); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017FBE8); + + +extern void (*D_801865C4[])(void); + +void func_8017FE20(void *a0) { + D_801865C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017FE5C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017FE9C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8017FEEC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018000C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018006C); + + +extern void (*D_801867DC[])(void); + +void func_801801C4(void *a0) { + D_801867DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180200); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801802E4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801803F0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180440); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180490); + + +extern void (*D_80186840[])(void); + +void func_80180584(void *a0) { + D_80186840[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801805C0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180704); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180790); + + +extern void (*D_80186858[])(void); + +void func_80180818(void *a0) { + D_80186858[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180854); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018091C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018096C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801809A4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180A3C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180AA4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180B3C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180B90); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180C68); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180CEC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180DB4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180ED0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80180FA8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018107C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181174); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181228); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181304); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801813D4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801814B0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181528); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801815F8); + + +extern void (*D_80186860[])(void); + +void func_80181670(void *a0) { + D_80186860[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_801816AC(u8 *param_1) { + *(short *)(param_1 + 0xfc) = 0; + *(unsigned short *)(param_1 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801816D8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181790); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801817B4); + + +extern s16 D_801D0A7C; + extern s16 D_801D0A7E; + extern s16 D_801D0A80; + extern s16 D_801D0A82; + void func_80181854(s32 arg0, s32 arg1, s32 arg2) { + D_801D0A7C = *(u16 *)((s32)arg0 + 0x0); + D_801D0A7E = *(u16 *)((s32)arg0 + 0x2); + D_801D0A80 = arg1; + D_801D0A82 = arg2; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181884); + +extern s16 D_801D0A82; + void func_801818FC(s32 arg0) { + *(s16 *)((s32)&D_801D0A82 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181918); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181970); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181A44); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181A80); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181ACC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181BA8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181E6C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181E90); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181EB8); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181F40); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80181FAC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018201C); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80182094); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801820E0); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_801821FC); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_80182238); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_80178D40", func_8018234C); + + diff --git a/src/ov_SC07_001/ov_SC07_001_jr_801734BC.c b/src/ov_SC07_001/ov_SC07_001_jr_801734BC.c index fcac7dcf5..4a3879a87 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_801734BC.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_801734BC.c @@ -3084,1031 +3084,3 @@ void func_80178D18(void) { D_801AAF0C = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AAB14; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801AAB14 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801AAB14; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801AAB14 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801AAB3C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801AAB3C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801AAAF8; - -s32 func_8017A3B0(void) { - switch (D_801AAAF8) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801AAB34; -extern short D_801AAB30; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801AAB34) { - case 0: - func_800D0CA0(1); - D_801AAB34 = D_801AAB34 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801AAB30; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801AAB34 = D_801AAB34 + 1; - if (D_801AAB34 < 0x1E) { - return 0; - } - D_801AAB34 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801AAB74; - extern s16 D_801AAB76; - extern s16 D_801AAB78; - extern s16 D_801AAB6C; - extern s16 D_801AAB6E; - extern s16 D_801AAB70; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AAB74, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AAB76, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AAB78, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AAB6C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AAB6E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AAB70, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801AAAFC; -extern u16 D_801AAB7C; -extern u16 D_801AAB7E; -extern u16 D_801AAB80; -extern s16 D_801AAE98; - -void func_8017B1D8(void) { - func_8012A418(); - D_801AAE98 = 0; - D_801AAAFC = 0; - D_801AAB7C = D_80126B5E; - D_801AAB7E = D_80126B62; - D_801AAB80 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184E6C[]; - extern s16 D_801AAB74; - extern s16 D_801AAB6C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184E6C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184E6C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AAB74; - s16 *p78C = &D_801AAB6C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801AAE98 = 1; - D_801AAAFC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801AAB1C; - extern SV4_8017B368 D_801AAB24; - extern s16 D_801AAB74; - extern s16 D_801AAB6C; - extern u16 D_80184E6C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801AAB1C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801AAB24; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80184E6C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80184E6C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801AAB74) = loc0; - (*(SV4_8017B368 *)&D_801AAB6C) = loc1; - D_801AAE98 = 1; - D_801AAAFC = 0; -} - - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80184E6C[]; - extern s16 D_801AAB74; - extern s16 D_801AAB76; - extern s16 D_801AAB78; - extern s16 D_801AAB6C; - extern s16 D_801AAB6E; - extern s16 D_801AAB70; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80184E6C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80184E6C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801AAB74; - s16 *p78C = &D_801AAB6C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801AAB76; - v798 = D_801AAB78; - v78C = *p78C; - v78E = D_801AAB6E; - v790 = D_801AAB70; - __asm__ __volatile__(""); - D_801AAE98 = 1; - D_801AAAFC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AAAFC; -extern s16 D_801AAB74; -extern s16 D_801AAB76; -extern s16 D_801AAB78; -extern s16 D_801AAB6C; -extern s16 D_801AAB6E; -extern s16 D_801AAB70; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801AAAFC = 0; - D_801AAB74 = (s16) D_80114F30; - D_801AAB76 = (s16) D_80114F34; - D_801AAB78 = (s16) D_80114F38; - D_801AAB6C = (s16) D_80114F24; - D_801AAB6E = (s16) D_80114F28; - D_801AAB70 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801AAB8C; -extern s16 D_801AAB8E; -extern s16 D_801AAB90; -extern s16 D_801AAB94; -extern s16 D_801AAB96; -extern s16 D_801AAB98; - -void func_8017B824(void) { - D_801AAB8C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801AAB8E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801AAB90 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801AAB94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801AAB96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801AAB98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801AAB8C; -extern s16 D_801AAB8E; -extern s16 D_801AAB90; -extern s16 D_801AAB94; -extern s16 D_801AAB96; -extern s16 D_801AAB98; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801AAB8C; - D_80114F34 = D_801AAB8E; - D_80114F38 = D_801AAB90; - D_80114F24 = D_801AAB94; - D_80114F28 = D_801AAB96; - D_80114F2C = D_801AAB98; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801AAB74), src[8..15] -> (*(S8_8017B8E8 *)&D_801AAB6C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801AAB74) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801AAB6C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801AAB7C; -extern u16 D_801AAB7E; -extern u16 D_801AAB80; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801AAAFC; -extern short D_801AAB84; -extern short D_801AAB86; -extern short D_801AAB88; -extern s16 D_801AAB74; -extern s16 D_801AAB76; -extern s16 D_801AAB78; -extern s16 D_801AAB6C; -extern s16 D_801AAB6E; -extern s16 D_801AAB70; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AAB7C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AAB7E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AAB80); - (*(s16 *)&D_801AAB84) = buf[0]; - (*(s16 *)&D_801AAB86) = buf[1]; - (*(s16 *)&D_801AAB88) = buf[2]; - D_801AAB74 = D_80114F30 + buf[0]; - D_801AAAFC = 0; - D_801AAB76 = D_80114F34 + buf[1]; - D_801AAB78 = D_80114F38 + buf[2]; - D_801AAB6C = D_80114F24 + buf[0]; - D_801AAB6E = D_80114F28 + buf[1]; - D_801AAB70 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801AAB1C; -extern SV4 D_801AAB24; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AAB24) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801AAB1C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801AAB24 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AAB24)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801AAB1C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801AAB24) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801AAB44[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801AAB44; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801AAAFC; -extern s16 D_801AAE98; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801AAAFC = D_801AAAFC + 1; - if (D_801AAAFC >= 0x1F) { - D_801AAE98 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801AAAFC; -extern s16 D_801AAE98; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AAAFC = D_801AAAFC + 1; - if (0x18 < D_801AAAFC) { - func_8012A4BC(); - D_801AAE98 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801AAAFC; -extern void (*D_801AAB40)(void); -extern short D_801AAB84; -extern short D_801AAB86; -extern short D_801AAB88; -extern s16 D_801AAE98; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801AAAFC = D_801AAAFC + 1; - if (D_801AAAFC >= 0x19) { - if (D_801AAB40 != 0) { - (*D_801AAB40)(); - } else { - D_80114F30 = D_80114F30 + D_801AAB84; - D_80114F34 = D_80114F34 + D_801AAB86; - D_80114F38 = D_80114F38 + D_801AAB88; - D_80114F24 = D_80114F24 + D_801AAB84; - D_80114F28 = D_80114F28 + D_801AAB86; - D_80114F2C = D_80114F2C + D_801AAB88; - func_8012A4BC(); - } - D_801AAE98 = 0; - } -} - - - -extern void (*D_80184F0C[])(void); - -void func_8017BE60(void *a0) { - D_80184F0C[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017CD9C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017CDF0); - -extern void func_8002931C(void); - void func_8017D8C4(void) { - ((void (*)(s32))func_8002931C)(0x4740000); - } - - - -extern void (*D_80184F68[])(void); - -void func_8017D8E4(void *a0) { - D_80184F68[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017D920); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017D964(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80184F70[])(void); - -void func_8017D988(void *a0) { - D_80184F70[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017D9C4); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017D9E0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017DA5C(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DA7C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DAA4); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DACC); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DB70); - - -extern void (*D_80184F84[])(void); - -void func_8017DC40(void *a0) { - D_80184F84[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DC7C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DDD4); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017DF14); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E0AC); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E278); - - -s32 func_8017E2A8(void) { - return 134; -} - - -extern void func_8013373C(s32 arg0); - void func_8017E2B0(void) { - func_8013373C(0); - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E2D0); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E3E8); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E448); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E4DC); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E64C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E6EC); - - -extern s32 func_8012E8A8(u8 *a0); - void func_8017E734(s32 arg0) { - *(s32 *)(arg0 + 0x1c) = 128; - *(s16 *)(arg0 + 0x2) = 0x4; - ((s32 (*)(void *))func_8012E8A8)((void *)arg0); - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E760); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E7E8); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017E8DC); - -void func_8017EA6C(void *a0) { - *(s32 *)((s32)a0 + 0x1c) = 0x10; - *(s16 *)((s32)a0 + 0x2) = 0x8; - *(s16 *)((s32)a0 + 0x34) = 0; - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017EA84); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017EBE8); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017ECA0); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017ED50); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017EDC0); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017EF30); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F0EC); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F15C); - -s32 func_8017F258(s32 *a0) { - return *(u16 *)((s32)a0 + 0x34) == 0x2; - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F26C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F32C); - -extern s16 D_801AAD8C; - void func_8017F36C(void) { - D_801AAD8C += 1; - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F38C); - - -extern void (*D_80185380[])(void); - -void func_8017F3A8(void *a0) { - D_80185380[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F3E4); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F470); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F4E4); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F668); - - -extern void (*D_80185388[])(void); - -void func_8017F7F8(void *a0) { - D_80185388[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017F834); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017FD88); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8017FE38); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", listCdBuffer); - - -extern void (*D_801853E0[])(void); - -void func_801801F4(void *a0) { - D_801853E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180230); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180350); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180404); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180570); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180754); - - -extern void (*D_801853FC[])(void); - -void func_80180814(void *a0) { - D_801853FC[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80185470[])(void); - -void func_80180850(void *a0) { - D_80185470[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_8018088C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180A2C); - - -extern void (*D_80185690[])(void); - -void func_80180B54(void *a0) { - D_80185690[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180B90); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180C2C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180CB0); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180D74); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180E78); - -void func_80180F18(void) { -} - - -extern void (*D_8018569C[])(void); - -void func_80180F20(void *a0) { - D_8018569C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_80180F5C(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180F7C); - -void func_80180FC8(void) { -} - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80180FD0); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80181034); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80181194); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80181378); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_801734BC", func_80181434); - diff --git a/src/ov_SC07_001/ov_SC07_001_jr_80178D40.c b/src/ov_SC07_001/ov_SC07_001_jr_80178D40.c new file mode 100644 index 000000000..839dd02b3 --- /dev/null +++ b/src/ov_SC07_001/ov_SC07_001_jr_80178D40.c @@ -0,0 +1,4477 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80184714[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A9E68; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80184708[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018474C[]; +extern unsigned short D_80184754[]; +extern unsigned short D_8018475C[]; +extern unsigned char D_801A9E70[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A9E68; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80184764[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A9FA4; +extern M2C_UNK D_801A9FA8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A9F30; +extern void (*D_80184794[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A9FAC[]; +extern u8 D_801A9FB4[]; +extern u8 D_801A9F64[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018479C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_801847B8[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_801847C0[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80184828[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801847CC; +extern u8 D_801847D8; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018485C[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80184864[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_801848B8[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801848EC[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801848DC[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80184908; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80184980[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80184988[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80184990[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80184998[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801849A0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801849A8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_801849B4[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_801849C0[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801849CC[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801849DC[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801849EC[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801849F4[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801849FC[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80184A04[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80184A0C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80184A14[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80184A1C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80184A24[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80184A2C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80184A34[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80184A3C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80184A44[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80184A4C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80184A54[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80184A5C[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80184A64[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80184A6C[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80184A74[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80184A7C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80184A84[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80184A8C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80184A94[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80184A9C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80184AE0[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80184AA4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80184B10[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80184B4C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80184BA4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80184BB4[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80184BBC[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80184D24[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80184D30[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A9578; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801AAE98; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801AA6E8; +extern short D_801AAF0C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801AAF0C) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801AAF0C)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801AA6E8 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801AAF0C) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801AAE68 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801AAE68 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801AAF0C) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801AAF0C) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801AAB44[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801AA6EC; + extern s32 D_801AAB00; + extern s16 D_801AAB04; + extern s16 D_801AAB08; + extern s16 D_801AAB0C; + extern s16 D_801AAB10; + extern s32 D_801AAB18; + extern s32 D_801AAB1C; + extern s32 D_801AAB2C; + extern s16 D_801AAB30; + extern s16 D_801AAB34; + extern s32 D_801AAB38; + extern s32 D_801AAB40; + extern s32 D_801AAB44[10]; + extern s32 D_801AADB0; + extern s16 D_801AAE68; + extern s32 D_801AAE94; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801AAE68; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801AAB00); + D_801AAB00 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AAB0C, D_801AAB10 ? 0x48 : 0x40); + (*(s16*)&D_801AAF0C) = 2; + break; + case 0: + func_80179B28(D_801AAB00); + D_801AAB00 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801AAB04, D_801AAB08 ? 0x48 : 0x40); + (*(s16*)&D_801AAF0C) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801AADB0 != 0) { + func_80179B28(D_801AAB00); + D_801AAB00 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801AAB04, D_801AAB08 ? 0x48 : 0x40); + (*(s16*)&D_801AAF0C) = 1; + } else { + (*(s16*)&D_801AAF0C) = 3; + } + break; + case 0x32: + func_80179B28(D_801AAB00); + D_801AAB00 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801AAB04, + D_801AAB08 ? 0x48 : 0x40); + (*(s16*)&D_801AAF0C) = 1; + break; + case 2: + func_80179B28(D_801AAB00); + if (D_801AAB18 != 0) { + D_801AA6E8 = D_801AAB18; + D_801AAB18 = 0; + (*(s16*)&D_801AAF0C) = 3; + return; + } + (*(s16*)&D_801AAF0C) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801AAF0C) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801AAF0C) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801AAF0C) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x1B: + D_801AAB38 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801AAF0C) = 4; + D_801AA6EC = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801AAF0C) = 5; + D_801AAB2C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801AAB2C = (s32)func_8017A3B0; + (*(s16*)&D_801AAF0C) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x24: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AAF0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801AAF0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801AAF0C) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAF0C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAF0C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801AAF0C) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801AAF0C) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AAB1C); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801AAB1C); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AAB1C); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801AAB1C); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x4E: + D_801AAB40 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x2B: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801AAF0C) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801AAE94 = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x34: + (*(s16*)&D_801AAF0C) = 3; + D_801AA6E8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801AAB18 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801AAF0C) = 3; + D_801AA6E8 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801AAF0C) = 3; + D_801AA6E8 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801AA6E8 = *(s32 *)(D_801AA6E8 + 4); + return; + case 0x37: + (*(s16*)&D_801AAF0C) = 3; + D_801AAB04 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AAB08 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801AAF0C) = 3; + D_801AAB0C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801AAB10 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801AAF0C) = 3; + D_801AAB04 = w1; + D_801AAB08 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801AAF0C) = 3; + D_801AAB0C = w2; + D_801AAB10 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x43: + D_801AAB2C = (s32)func_8017A3D8; + D_801AAB34 = 0; + (*(s16*)&D_801AAF0C) = 5; + D_801AAB30 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801AAF0C) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801AAF0C) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801AAB44; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801AAF0C) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801AAB44; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801AAF0C) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801AAB44[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801AAF0C) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801AAB44; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801AAF0C) = 3; + break; + default: + break; + } +Lend: + D_801AA6E8 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AAB14; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801AAB14 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801AAB14; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801AAB14 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801AAB3C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801AAB3C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801AAAF8; + +s32 func_8017A3B0(void) { + switch (D_801AAAF8) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801AAB34; +extern short D_801AAB30; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801AAB34) { + case 0: + func_800D0CA0(1); + D_801AAB34 = D_801AAB34 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801AAB30; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801AAB34 = D_801AAB34 + 1; + if (D_801AAB34 < 0x1E) { + return 0; + } + D_801AAB34 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801AAB74; + extern s16 D_801AAB76; + extern s16 D_801AAB78; + extern s16 D_801AAB6C; + extern s16 D_801AAB6E; + extern s16 D_801AAB70; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801AAB74, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801AAB76, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801AAB78, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801AAB6C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801AAB6E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801AAB70, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801AAAFC; +extern u16 D_801AAB7C; +extern u16 D_801AAB7E; +extern u16 D_801AAB80; +extern s16 D_801AAE98; + +void func_8017B1D8(void) { + func_8012A418(); + D_801AAE98 = 0; + D_801AAAFC = 0; + D_801AAB7C = D_80126B5E; + D_801AAB7E = D_80126B62; + D_801AAB80 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184E6C[]; + extern s16 D_801AAB74; + extern s16 D_801AAB6C; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184E6C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184E6C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AAB74; + s16 *p78C = &D_801AAB6C; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801AAE98 = 1; + D_801AAAFC = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801AAB1C; + extern SV4_8017B368 D_801AAB24; + extern s16 D_801AAB74; + extern s16 D_801AAB6C; + extern u16 D_80184E6C; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801AAB1C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801AAB24; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80184E6C)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80184E6C)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801AAB74) = loc0; + (*(SV4_8017B368 *)&D_801AAB6C) = loc1; + D_801AAE98 = 1; + D_801AAAFC = 0; +} + + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80184E6C[]; + extern s16 D_801AAB74; + extern s16 D_801AAB76; + extern s16 D_801AAB78; + extern s16 D_801AAB6C; + extern s16 D_801AAB6E; + extern s16 D_801AAB70; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80184E6C[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80184E6C[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801AAB74; + s16 *p78C = &D_801AAB6C; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801AAB76; + v798 = D_801AAB78; + v78C = *p78C; + v78E = D_801AAB6E; + v790 = D_801AAB70; + __asm__ __volatile__(""); + D_801AAE98 = 1; + D_801AAAFC = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AAAFC; +extern s16 D_801AAB74; +extern s16 D_801AAB76; +extern s16 D_801AAB78; +extern s16 D_801AAB6C; +extern s16 D_801AAB6E; +extern s16 D_801AAB70; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801AAAFC = 0; + D_801AAB74 = (s16) D_80114F30; + D_801AAB76 = (s16) D_80114F34; + D_801AAB78 = (s16) D_80114F38; + D_801AAB6C = (s16) D_80114F24; + D_801AAB6E = (s16) D_80114F28; + D_801AAB70 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801AAB8C; +extern s16 D_801AAB8E; +extern s16 D_801AAB90; +extern s16 D_801AAB94; +extern s16 D_801AAB96; +extern s16 D_801AAB98; + +void func_8017B824(void) { + D_801AAB8C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801AAB8E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801AAB90 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801AAB94 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801AAB96 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801AAB98 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801AAB8C; +extern s16 D_801AAB8E; +extern s16 D_801AAB90; +extern s16 D_801AAB94; +extern s16 D_801AAB96; +extern s16 D_801AAB98; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801AAB8C; + D_80114F34 = D_801AAB8E; + D_80114F38 = D_801AAB90; + D_80114F24 = D_801AAB94; + D_80114F28 = D_801AAB96; + D_80114F2C = D_801AAB98; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801AAB74), src[8..15] -> (*(S8_8017B8E8 *)&D_801AAB6C) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801AAB74) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801AAB6C) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801AAB7C; +extern u16 D_801AAB7E; +extern u16 D_801AAB80; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801AAAFC; +extern short D_801AAB84; +extern short D_801AAB86; +extern short D_801AAB88; +extern s16 D_801AAB74; +extern s16 D_801AAB76; +extern s16 D_801AAB78; +extern s16 D_801AAB6C; +extern s16 D_801AAB6E; +extern s16 D_801AAB70; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801AAB7C); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801AAB7E); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801AAB80); + (*(s16 *)&D_801AAB84) = buf[0]; + (*(s16 *)&D_801AAB86) = buf[1]; + (*(s16 *)&D_801AAB88) = buf[2]; + D_801AAB74 = D_80114F30 + buf[0]; + D_801AAAFC = 0; + D_801AAB76 = D_80114F34 + buf[1]; + D_801AAB78 = D_80114F38 + buf[2]; + D_801AAB6C = D_80114F24 + buf[0]; + D_801AAB6E = D_80114F28 + buf[1]; + D_801AAB70 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801AAB1C; +extern SV4 D_801AAB24; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801AAB24) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801AAB1C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801AAB24 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801AAB24)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801AAB1C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801AAB24) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801AAB44[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801AAB44; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801AAAFC; +extern s16 D_801AAE98; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801AAAFC = D_801AAAFC + 1; + if (D_801AAAFC >= 0x1F) { + D_801AAE98 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801AAAFC; +extern s16 D_801AAE98; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AAAFC = D_801AAAFC + 1; + if (0x18 < D_801AAAFC) { + func_8012A4BC(); + D_801AAE98 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801AAAFC; +extern void (*D_801AAB40)(void); +extern short D_801AAB84; +extern short D_801AAB86; +extern short D_801AAB88; +extern s16 D_801AAE98; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801AAAFC = D_801AAAFC + 1; + if (D_801AAAFC >= 0x19) { + if (D_801AAB40 != 0) { + (*D_801AAB40)(); + } else { + D_80114F30 = D_80114F30 + D_801AAB84; + D_80114F34 = D_80114F34 + D_801AAB86; + D_80114F38 = D_80114F38 + D_801AAB88; + D_80114F24 = D_80114F24 + D_801AAB84; + D_80114F28 = D_80114F28 + D_801AAB86; + D_80114F2C = D_80114F2C + D_801AAB88; + func_8012A4BC(); + } + D_801AAE98 = 0; + } +} + + + +extern void (*D_80184F0C[])(void); + +void func_8017BE60(void *a0) { + D_80184F0C[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017CD9C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017CDF0); + +extern void func_8002931C(void); + void func_8017D8C4(void) { + ((void (*)(s32))func_8002931C)(0x4740000); + } + + + +extern void (*D_80184F68[])(void); + +void func_8017D8E4(void *a0) { + D_80184F68[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017D920); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017D964(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80184F70[])(void); + +void func_8017D988(void *a0) { + D_80184F70[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017D9C4); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D9E0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017DA5C(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DA7C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DAA4); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DACC); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DB70); + + +extern void (*D_80184F84[])(void); + +void func_8017DC40(void *a0) { + D_80184F84[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DC7C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DDD4); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017DF14); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E0AC); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E278); + + +s32 func_8017E2A8(void) { + return 134; +} + + +extern void func_8013373C(s32 arg0); + void func_8017E2B0(void) { + func_8013373C(0); + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E2D0); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E3E8); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E448); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E4DC); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E64C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E6EC); + + +extern s32 func_8012E8A8(u8 *a0); + void func_8017E734(s32 arg0) { + *(s32 *)(arg0 + 0x1c) = 128; + *(s16 *)(arg0 + 0x2) = 0x4; + ((s32 (*)(void *))func_8012E8A8)((void *)arg0); + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E760); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E7E8); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017E8DC); + +void func_8017EA6C(void *a0) { + *(s32 *)((s32)a0 + 0x1c) = 0x10; + *(s16 *)((s32)a0 + 0x2) = 0x8; + *(s16 *)((s32)a0 + 0x34) = 0; + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017EA84); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017EBE8); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017ECA0); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017ED50); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017EDC0); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017EF30); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F0EC); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F15C); + +s32 func_8017F258(s32 *a0) { + return *(u16 *)((s32)a0 + 0x34) == 0x2; + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F26C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F32C); + +extern s16 D_801AAD8C; + void func_8017F36C(void) { + D_801AAD8C += 1; + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F38C); + + +extern void (*D_80185380[])(void); + +void func_8017F3A8(void *a0) { + D_80185380[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F3E4); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F470); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F4E4); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F668); + + +extern void (*D_80185388[])(void); + +void func_8017F7F8(void *a0) { + D_80185388[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017F834); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017FD88); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8017FE38); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", listCdBuffer); + + +extern void (*D_801853E0[])(void); + +void func_801801F4(void *a0) { + D_801853E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180230); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180350); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180404); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180570); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180754); + + +extern void (*D_801853FC[])(void); + +void func_80180814(void *a0) { + D_801853FC[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_80185470[])(void); + +void func_80180850(void *a0) { + D_80185470[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_8018088C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180A2C); + + +extern void (*D_80185690[])(void); + +void func_80180B54(void *a0) { + D_80185690[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180B90); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180C2C); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180CB0); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180D74); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180E78); + +void func_80180F18(void) { +} + + +extern void (*D_8018569C[])(void); + +void func_80180F20(void *a0) { + D_8018569C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_80180F5C(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180F7C); + +void func_80180FC8(void) { +} + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80180FD0); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80181034); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80181194); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80181378); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_80178D40", func_80181434); + + diff --git a/src/ov_SC07_002/ov_SC07_002_jr_801734BC.c b/src/ov_SC07_002/ov_SC07_002_jr_801734BC.c index 6e95426a9..491c74b77 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_801734BC.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_801734BC.c @@ -3084,1386 +3084,3 @@ void func_80178D18(void) { D_801A00D4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019B664; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019B664 = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019B664; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019B664 = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_8019B68C; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_8019B68C = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_8019B648; - -s32 func_8017A3B0(void) { - switch (D_8019B648) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019B684; -extern short D_8019B680; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019B684) { - case 0: - func_800D0CA0(1); - D_8019B684 = D_8019B684 + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_8019B680; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019B684 = D_8019B684 + 1; - if (D_8019B684 < 0x1E) { - return 0; - } - D_8019B684 = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_8019B6C4; - extern s16 D_8019B6C6; - extern s16 D_8019B6C8; - extern s16 D_8019B6BC; - extern s16 D_8019B6BE; - extern s16 D_8019B6C0; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019B6C4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019B6C6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019B6C8, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019B6BC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019B6BE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019B6C0, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_8019B64C; -extern u16 D_8019B6CC; -extern u16 D_8019B6CE; -extern u16 D_8019B6D0; -extern s16 D_801A0060; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A0060 = 0; - D_8019B64C = 0; - D_8019B6CC = D_80126B5E; - D_8019B6CE = D_80126B62; - D_8019B6D0 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A128[]; - extern s16 D_8019B6C4; - extern s16 D_8019B6BC; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A128[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A128[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019B6C4; - s16 *p78C = &D_8019B6BC; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A0060 = 1; - D_8019B64C = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_8019B66C; - extern SV4_8017B368 D_8019B674; - extern s16 D_8019B6C4; - extern s16 D_8019B6BC; - extern u16 D_8018A128; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_8019B66C; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019B674; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A128)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A128)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_8019B6C4) = loc0; - (*(SV4_8017B368 *)&D_8019B6BC) = loc1; - D_801A0060 = 1; - D_8019B64C = 0; -} - - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_8018A128[]; - extern s16 D_8019B6C4; - extern s16 D_8019B6C6; - extern s16 D_8019B6C8; - extern s16 D_8019B6BC; - extern s16 D_8019B6BE; - extern s16 D_8019B6C0; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_8018A128[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_8018A128[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_8019B6C4; - s16 *p78C = &D_8019B6BC; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_8019B6C6; - v798 = D_8019B6C8; - v78C = *p78C; - v78E = D_8019B6BE; - v790 = D_8019B6C0; - __asm__ __volatile__(""); - D_801A0060 = 1; - D_8019B64C = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019B64C; -extern s16 D_8019B6C4; -extern s16 D_8019B6C6; -extern s16 D_8019B6C8; -extern s16 D_8019B6BC; -extern s16 D_8019B6BE; -extern s16 D_8019B6C0; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_8019B64C = 0; - D_8019B6C4 = (s16) D_80114F30; - D_8019B6C6 = (s16) D_80114F34; - D_8019B6C8 = (s16) D_80114F38; - D_8019B6BC = (s16) D_80114F24; - D_8019B6BE = (s16) D_80114F28; - D_8019B6C0 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_8019B6DC; -extern s16 D_8019B6DE; -extern s16 D_8019B6E0; -extern s16 D_8019B6E4; -extern s16 D_8019B6E6; -extern s16 D_8019B6E8; - -void func_8017B824(void) { - D_8019B6DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_8019B6DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_8019B6E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_8019B6E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_8019B6E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_8019B6E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_8019B6DC; -extern s16 D_8019B6DE; -extern s16 D_8019B6E0; -extern s16 D_8019B6E4; -extern s16 D_8019B6E6; -extern s16 D_8019B6E8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_8019B6DC; - D_80114F34 = D_8019B6DE; - D_80114F38 = D_8019B6E0; - D_80114F24 = D_8019B6E4; - D_80114F28 = D_8019B6E6; - D_80114F2C = D_8019B6E8; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_8019B6C4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019B6BC) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_8019B6C4) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_8019B6BC) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_8019B6CC; -extern u16 D_8019B6CE; -extern u16 D_8019B6D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_8019B64C; -extern short D_8019B6D4; -extern short D_8019B6D6; -extern short D_8019B6D8; -extern s16 D_8019B6C4; -extern s16 D_8019B6C6; -extern s16 D_8019B6C8; -extern s16 D_8019B6BC; -extern s16 D_8019B6BE; -extern s16 D_8019B6C0; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019B6CC); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019B6CE); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019B6D0); - (*(s16 *)&D_8019B6D4) = buf[0]; - (*(s16 *)&D_8019B6D6) = buf[1]; - (*(s16 *)&D_8019B6D8) = buf[2]; - D_8019B6C4 = D_80114F30 + buf[0]; - D_8019B64C = 0; - D_8019B6C6 = D_80114F34 + buf[1]; - D_8019B6C8 = D_80114F38 + buf[2]; - D_8019B6BC = D_80114F24 + buf[0]; - D_8019B6BE = D_80114F28 + buf[1]; - D_8019B6C0 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_8019B66C; -extern SV4 D_8019B674; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019B674) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_8019B66C = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019B674 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019B674)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_8019B66C) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019B674) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019B694[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019B694; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_8019B64C; -extern s16 D_801A0060; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_8019B64C = D_8019B64C + 1; - if (D_8019B64C >= 0x1F) { - D_801A0060 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_8019B64C; -extern s16 D_801A0060; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019B64C = D_8019B64C + 1; - if (0x18 < D_8019B64C) { - func_8012A4BC(); - D_801A0060 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_8019B64C; -extern void (*D_8019B690)(void); -extern short D_8019B6D4; -extern short D_8019B6D6; -extern short D_8019B6D8; -extern s16 D_801A0060; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_8019B64C = D_8019B64C + 1; - if (D_8019B64C >= 0x19) { - if (D_8019B690 != 0) { - (*D_8019B690)(); - } else { - D_80114F30 = D_80114F30 + D_8019B6D4; - D_80114F34 = D_80114F34 + D_8019B6D6; - D_80114F38 = D_80114F38 + D_8019B6D8; - D_80114F24 = D_80114F24 + D_8019B6D4; - D_80114F28 = D_80114F28 + D_8019B6D6; - D_80114F2C = D_80114F2C + D_8019B6D8; - func_8012A4BC(); - } - D_801A0060 = 0; - } -} - - - -extern void (*D_8018A1C8[])(void); - -void func_8017BE60(void *a0) { - D_8018A1C8[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017BEBC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017BEE0); - - - -extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); - void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { - ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017BF34); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017BFBC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017C010); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017C068); - - -extern void (*D_8018A228[])(void); - -void func_8017C114(void *a0) { - D_8018A228[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017C150); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017C43C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017C8D0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017D7B0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017D7D4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017D858); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017D8D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017D920); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017DAEC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017DC80); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E1E8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E37C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E4D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E5D4); - - -extern void (*D_8018A230[])(void); - -void func_8017E604(void *a0) { - D_8018A230[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E640); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E7E8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017E97C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017EC34); - - -extern void (*D_8018A2A8[])(void); - -void func_8017ECC0(void *a0) { - D_8018A2A8[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017ECFC); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017ED40(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_8018A2B0[])(void); - -void func_8017ED64(void *a0) { - D_8018A2B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017EDA0); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017EDE0(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017EE5C(void) { - func_800D1EBC(); - } - - - -extern void (*D_8018A2BC[])(void); - -void func_8017EE7C(void *a0) { - D_8018A2BC[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017EEB8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017EEF8); - -extern s32 func_80016978(s32 arg); -extern void func_80029240(void); - -s32 func_8017EF74(void) { - if ((func_80016978(4) & 0xFFFF) == 0) { - return 0; - } - func_80029240(); - return 1; -} - - -void func_8017EFAC(void) { -} - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_8018A2C8; - -void func_8017EFB4(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018A2C8, 0x1000000); -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); - extern s32 D_8018A2CC; - void func_8017EFDC(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_8018A2CC, 0x1000000); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F004); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F048); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F0E8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F184); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F1C8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F250); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F2D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F31C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F39C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F418); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F45C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F4DC); - -extern s32 D_8019F038; - void func_8017F558(void) { - D_8019F038 += 1; - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F578); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F5C4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F680); - -extern void func_8017F750(void); - void func_8017F730(void) { - func_8017F750(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F750); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F7D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F7F8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F880); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F8A0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F928); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F948); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F9CC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017F9EC); - -extern s32 func_8017FA94(void); - s32 func_8017FA74(void) { - return func_8017FA94(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FA94); - - -extern void (*D_8018A2F8[])(void); - -void func_8017FB48(void *a0) { - D_8018A2F8[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FB84); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FBD0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FCA8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FE78); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FEC4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8017FF84); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", listCdBuffer); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180044); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180090); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180248); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801804D4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018059C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801808E0); - -extern s32 func_8018094C(void); - void func_8018092C(void) { - func_8018094C(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018094C); - -extern s32 func_80180A2C(void); - void func_80180A0C(void) { - func_80180A2C(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180A2C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180AEC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180B0C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180BCC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180BEC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180CAC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180CCC); - -extern s32 func_80180DAC(void); - void func_80180D8C(void) { - func_80180DAC(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180DAC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80180F7C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181394); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801817E0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181834); - -void func_80181844(void) { -} - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018184C); - -void func_801819C4(void) { -} - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801819CC); - -extern s16 D_8019F070; - void func_80181A00(void) { - D_8019F070 = 0x1; - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181A14); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181BD8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181BF8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181C18); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181C80); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181CBC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181CF0); - - -extern void (*D_8018A428[])(void); - -void func_80181E9C(void *a0) { - D_8018A428[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181ED8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181F98); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80181FE8); - -extern void func_80182940(s32 arg0); - extern void func_8012AD44(s32 *a0, s16 a1); - void func_80182038(s32 param_1) { - func_80182940(param_1); - ((void (*)(s32, s32))func_8012AD44)(param_1, 3); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018206C); - -extern void (*D_8018A444[])(void); - -void func_80182228(void *a0) { - D_8018A444[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182264); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182270); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018241C); - -void func_80182464(void *a0) { - s32 v0 = *(u16 *)((s32)a0 + 0xA); - s32 v1 = *(u16 *)((s32)a0 + 0x52); - *(u16 *)((s32)a0 + 0x52) = 0; - *(u16 *)((s32)a0 + 0xA) = v0 + v1; - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018247C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182538); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018260C); - -extern void func_80182940(s32 arg0); -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_80182648(void *arg0) { - func_80182940((s32)arg0); - ((s32 (*)(s32, s32))func_8012AD44)((s32)arg0, 0x3); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018267C); - - -extern void (*D_8018A484[])(void); - -void func_801827DC(void *a0) { - D_8018A484[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182818); - -void func_801828FC(void) { -} - - -extern void (*D_8018A4A0[])(void); - -void func_80182904(void *a0) { - D_8018A4A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182940); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801829F0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182AD4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182B10); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182C18); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182C68); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182D50); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182DF0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182E48); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182F2C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182F94); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80182FE4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80183078); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801830D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801831FC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80183458); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801838FC); - -extern void (*D_8018A528[])(void); - -void func_80183A34(void *a0) { - D_8018A528[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_8018A53C[])(void); - -void func_80183A70(void *a0) { - D_8018A53C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80183AAC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80183F28); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80183FE0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018439C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184410); - -extern void (*D_8018A544[])(void); - -void func_80184470(void *a0) { - D_8018A544[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern s32 func_8012AD50(void *a0); - void func_801844AC(u8 *a0) { - *(s16 *)(a0 + 0xFC) = 0; - *(u16 *)(a0 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801844D8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184594); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801845B8); - - -extern s16 D_8019FE7C; - extern s16 D_8019FE7E; - extern s16 D_8019FE80; - extern s16 D_8019FE82; - void func_80184658(s32 arg0, s32 arg1, s32 arg2) { - D_8019FE7C = *(u16 *)((s32)arg0 + 0x0); - D_8019FE7E = *(u16 *)((s32)arg0 + 0x2); - D_8019FE80 = arg1; - D_8019FE82 = arg2; - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184688); - -extern s16 D_8019FE82; - void func_80184700(s32 arg0) { - *(s16 *)((s32)&D_8019FE82 + 0x0) += arg0; - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018471C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184774); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184848); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184884); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801848D0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801849AC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184C70); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184C94); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184CBC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184D44); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184DB0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184E20); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184E98); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80184EE4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185000); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018503C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185150); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185434); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185684); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801856E8); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185848); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185A2C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185AE8); - - -extern void (*D_801987F8[])(void); - -void func_80185B94(void *a0) { - D_801987F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80185C00(s32 arg); -extern void func_80146CA0(void *a0); - -void func_80185BD0(s32 arg0) { - func_80185C00(arg0); - ((void (*)(s32))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185C00); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185C9C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185D40); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185E48); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185E90); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185F04); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185F4C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80185FB0); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80186090); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801861EC); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80186298); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018637C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801863B0); - - -extern void (*D_80198BA0[])(void); - -void func_80186458(void *a0) { - D_80198BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80186494); - -extern s32 func_801866D4(void); - void func_80186694(void) { - func_801866D4(); - } - - -extern void func_80146C3C(void); - void func_801866B4(void) { - func_80146C3C(); - } - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_801866D4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_8018672C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_801734BC", func_80186758); - diff --git a/src/ov_SC07_002/ov_SC07_002_jr_80178D40.c b/src/ov_SC07_002/ov_SC07_002_jr_80178D40.c new file mode 100644 index 000000000..3537c9d6a --- /dev/null +++ b/src/ov_SC07_002/ov_SC07_002_jr_80178D40.c @@ -0,0 +1,4832 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801899D0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_8019A9B8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801899C4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80189A08[]; +extern unsigned short D_80189A10[]; +extern unsigned short D_80189A18[]; +extern unsigned char D_8019A9C0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_8019A9B8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80189A20[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_8019AAF4; +extern M2C_UNK D_8019AAF8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_8019AA80; +extern void (*D_80189A50[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8019AAFC[]; +extern u8 D_8019AB04[]; +extern u8 D_8019AAB4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80189A58[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80189A74[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80189A7C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80189AE4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80189A88; +extern u8 D_80189A94; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80189B18[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80189B20[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80189B74[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80189BA8[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80189B98[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80189BC4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80189C3C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80189C44[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80189C4C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80189C54[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80189C5C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80189C64[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80189C70[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80189C7C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80189C88[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80189C98[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80189CA8[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80189CB0[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80189CB8[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80189CC0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80189CC8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80189CD0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80189CD8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80189CE0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80189CE8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80189CF0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80189CF8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80189D00[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80189D08[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80189D10[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80189D18[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80189D20[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80189D28[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80189D30[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80189D38[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80189D40[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80189D48[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80189D50[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80189D58[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80189D9C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80189D60; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80189DCC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80189E08[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80189E60[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80189E70[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80189E78[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80189FE0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80189FEC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80199F60; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A0060; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_8019B238; +extern short D_801A00D4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A00D4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A00D4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_8019B238 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A00D4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A0030 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A0030 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A00D4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A00D4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019B694[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_8019B23C; + extern s32 D_8019B650; + extern s16 D_8019B654; + extern s16 D_8019B658; + extern s16 D_8019B65C; + extern s16 D_8019B660; + extern s32 D_8019B668; + extern s32 D_8019B66C; + extern s32 D_8019B67C; + extern s16 D_8019B680; + extern s16 D_8019B684; + extern s32 D_8019B688; + extern s32 D_8019B690; + extern s32 D_8019B694[10]; + extern s32 D_8019FF78; + extern s16 D_801A0030; + extern s32 D_801A005C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A0030; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_8019B650); + D_8019B650 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019B65C, D_8019B660 ? 0x48 : 0x40); + (*(s16*)&D_801A00D4) = 2; + break; + case 0: + func_80179B28(D_8019B650); + D_8019B650 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019B654, D_8019B658 ? 0x48 : 0x40); + (*(s16*)&D_801A00D4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_8019FF78 != 0) { + func_80179B28(D_8019B650); + D_8019B650 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019B654, D_8019B658 ? 0x48 : 0x40); + (*(s16*)&D_801A00D4) = 1; + } else { + (*(s16*)&D_801A00D4) = 3; + } + break; + case 0x32: + func_80179B28(D_8019B650); + D_8019B650 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019B654, + D_8019B658 ? 0x48 : 0x40); + (*(s16*)&D_801A00D4) = 1; + break; + case 2: + func_80179B28(D_8019B650); + if (D_8019B668 != 0) { + D_8019B238 = D_8019B668; + D_8019B668 = 0; + (*(s16*)&D_801A00D4) = 3; + return; + } + (*(s16*)&D_801A00D4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A00D4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A00D4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A00D4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A00D4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A00D4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x1B: + D_8019B688 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A00D4) = 4; + D_8019B23C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A00D4) = 5; + D_8019B67C = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_8019B67C = (s32)func_8017A3B0; + (*(s16*)&D_801A00D4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x24: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A00D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A00D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A00D4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A00D4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A00D4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A00D4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A00D4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A00D4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A00D4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019B66C); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_8019B66C); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019B66C); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_8019B66C); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x4E: + D_8019B690 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x2B: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A00D4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A005C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x34: + (*(s16*)&D_801A00D4) = 3; + D_8019B238 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_8019B668 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A00D4) = 3; + D_8019B238 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A00D4) = 3; + D_8019B238 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_8019B238 = *(s32 *)(D_8019B238 + 4); + return; + case 0x37: + (*(s16*)&D_801A00D4) = 3; + D_8019B654 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019B658 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A00D4) = 3; + D_8019B65C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_8019B660 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A00D4) = 3; + D_8019B654 = w1; + D_8019B658 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A00D4) = 3; + D_8019B65C = w2; + D_8019B660 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x43: + D_8019B67C = (s32)func_8017A3D8; + D_8019B684 = 0; + (*(s16*)&D_801A00D4) = 5; + D_8019B680 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A00D4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A00D4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019B694; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A00D4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019B694; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A00D4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019B694[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A00D4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019B694; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A00D4) = 3; + break; + default: + break; + } +Lend: + D_8019B238 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019B664; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019B664 = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019B664; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019B664 = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_8019B68C; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_8019B68C = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_8019B648; + +s32 func_8017A3B0(void) { + switch (D_8019B648) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019B684; +extern short D_8019B680; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019B684) { + case 0: + func_800D0CA0(1); + D_8019B684 = D_8019B684 + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_8019B680; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019B684 = D_8019B684 + 1; + if (D_8019B684 < 0x1E) { + return 0; + } + D_8019B684 = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_8019B6C4; + extern s16 D_8019B6C6; + extern s16 D_8019B6C8; + extern s16 D_8019B6BC; + extern s16 D_8019B6BE; + extern s16 D_8019B6C0; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_8019B6C4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_8019B6C6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_8019B6C8, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_8019B6BC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_8019B6BE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_8019B6C0, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_8019B64C; +extern u16 D_8019B6CC; +extern u16 D_8019B6CE; +extern u16 D_8019B6D0; +extern s16 D_801A0060; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A0060 = 0; + D_8019B64C = 0; + D_8019B6CC = D_80126B5E; + D_8019B6CE = D_80126B62; + D_8019B6D0 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A128[]; + extern s16 D_8019B6C4; + extern s16 D_8019B6BC; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A128[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A128[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019B6C4; + s16 *p78C = &D_8019B6BC; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A0060 = 1; + D_8019B64C = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_8019B66C; + extern SV4_8017B368 D_8019B674; + extern s16 D_8019B6C4; + extern s16 D_8019B6BC; + extern u16 D_8018A128; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_8019B66C; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019B674; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_8018A128)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_8018A128)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_8019B6C4) = loc0; + (*(SV4_8017B368 *)&D_8019B6BC) = loc1; + D_801A0060 = 1; + D_8019B64C = 0; +} + + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_8018A128[]; + extern s16 D_8019B6C4; + extern s16 D_8019B6C6; + extern s16 D_8019B6C8; + extern s16 D_8019B6BC; + extern s16 D_8019B6BE; + extern s16 D_8019B6C0; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_8018A128[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_8018A128[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_8019B6C4; + s16 *p78C = &D_8019B6BC; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_8019B6C6; + v798 = D_8019B6C8; + v78C = *p78C; + v78E = D_8019B6BE; + v790 = D_8019B6C0; + __asm__ __volatile__(""); + D_801A0060 = 1; + D_8019B64C = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019B64C; +extern s16 D_8019B6C4; +extern s16 D_8019B6C6; +extern s16 D_8019B6C8; +extern s16 D_8019B6BC; +extern s16 D_8019B6BE; +extern s16 D_8019B6C0; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_8019B64C = 0; + D_8019B6C4 = (s16) D_80114F30; + D_8019B6C6 = (s16) D_80114F34; + D_8019B6C8 = (s16) D_80114F38; + D_8019B6BC = (s16) D_80114F24; + D_8019B6BE = (s16) D_80114F28; + D_8019B6C0 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_8019B6DC; +extern s16 D_8019B6DE; +extern s16 D_8019B6E0; +extern s16 D_8019B6E4; +extern s16 D_8019B6E6; +extern s16 D_8019B6E8; + +void func_8017B824(void) { + D_8019B6DC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_8019B6DE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_8019B6E0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_8019B6E4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_8019B6E6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_8019B6E8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_8019B6DC; +extern s16 D_8019B6DE; +extern s16 D_8019B6E0; +extern s16 D_8019B6E4; +extern s16 D_8019B6E6; +extern s16 D_8019B6E8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_8019B6DC; + D_80114F34 = D_8019B6DE; + D_80114F38 = D_8019B6E0; + D_80114F24 = D_8019B6E4; + D_80114F28 = D_8019B6E6; + D_80114F2C = D_8019B6E8; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_8019B6C4), src[8..15] -> (*(S8_8017B8E8 *)&D_8019B6BC) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_8019B6C4) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_8019B6BC) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_8019B6CC; +extern u16 D_8019B6CE; +extern u16 D_8019B6D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_8019B64C; +extern short D_8019B6D4; +extern short D_8019B6D6; +extern short D_8019B6D8; +extern s16 D_8019B6C4; +extern s16 D_8019B6C6; +extern s16 D_8019B6C8; +extern s16 D_8019B6BC; +extern s16 D_8019B6BE; +extern s16 D_8019B6C0; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_8019B6CC); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_8019B6CE); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_8019B6D0); + (*(s16 *)&D_8019B6D4) = buf[0]; + (*(s16 *)&D_8019B6D6) = buf[1]; + (*(s16 *)&D_8019B6D8) = buf[2]; + D_8019B6C4 = D_80114F30 + buf[0]; + D_8019B64C = 0; + D_8019B6C6 = D_80114F34 + buf[1]; + D_8019B6C8 = D_80114F38 + buf[2]; + D_8019B6BC = D_80114F24 + buf[0]; + D_8019B6BE = D_80114F28 + buf[1]; + D_8019B6C0 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_8019B66C; +extern SV4 D_8019B674; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019B674) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_8019B66C = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019B674 = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019B674)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_8019B66C) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019B674) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019B694[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019B694; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_8019B64C; +extern s16 D_801A0060; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_8019B64C = D_8019B64C + 1; + if (D_8019B64C >= 0x1F) { + D_801A0060 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_8019B64C; +extern s16 D_801A0060; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019B64C = D_8019B64C + 1; + if (0x18 < D_8019B64C) { + func_8012A4BC(); + D_801A0060 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_8019B64C; +extern void (*D_8019B690)(void); +extern short D_8019B6D4; +extern short D_8019B6D6; +extern short D_8019B6D8; +extern s16 D_801A0060; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_8019B64C = D_8019B64C + 1; + if (D_8019B64C >= 0x19) { + if (D_8019B690 != 0) { + (*D_8019B690)(); + } else { + D_80114F30 = D_80114F30 + D_8019B6D4; + D_80114F34 = D_80114F34 + D_8019B6D6; + D_80114F38 = D_80114F38 + D_8019B6D8; + D_80114F24 = D_80114F24 + D_8019B6D4; + D_80114F28 = D_80114F28 + D_8019B6D6; + D_80114F2C = D_80114F2C + D_8019B6D8; + func_8012A4BC(); + } + D_801A0060 = 0; + } +} + + + +extern void (*D_8018A1C8[])(void); + +void func_8017BE60(void *a0) { + D_8018A1C8[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017BEBC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017BEE0); + + + +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3) { + ((void (*)(void *, void *, s32, s32))func_8017BF34)(a0, a1, (s16)a2, (s16)a3); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017BF34); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017BFBC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017C010); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017C068); + + +extern void (*D_8018A228[])(void); + +void func_8017C114(void *a0) { + D_8018A228[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017C150); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017C43C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017C8D0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017D7B0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017D7D4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017D858); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017D8D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017D920); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017DAEC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017DC80); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E1E8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E37C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E4D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E5D4); + + +extern void (*D_8018A230[])(void); + +void func_8017E604(void *a0) { + D_8018A230[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E640); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E7E8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017E97C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017EC34); + + +extern void (*D_8018A2A8[])(void); + +void func_8017ECC0(void *a0) { + D_8018A2A8[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017ECFC); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017ED40(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_8018A2B0[])(void); + +void func_8017ED64(void *a0) { + D_8018A2B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017EDA0); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017EDE0(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017EE5C(void) { + func_800D1EBC(); + } + + + +extern void (*D_8018A2BC[])(void); + +void func_8017EE7C(void *a0) { + D_8018A2BC[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017EEB8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017EEF8); + +extern s32 func_80016978(s32 arg); +extern void func_80029240(void); + +s32 func_8017EF74(void) { + if ((func_80016978(4) & 0xFFFF) == 0) { + return 0; + } + func_80029240(); + return 1; +} + + +void func_8017EFAC(void) { +} + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_8018A2C8; + +void func_8017EFB4(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018A2C8, 0x1000000); +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); + extern s32 D_8018A2CC; + void func_8017EFDC(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_8018A2CC, 0x1000000); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F004); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F048); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F0E8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F184); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F1C8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F250); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F2D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F31C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F39C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F418); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F45C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F4DC); + +extern s32 D_8019F038; + void func_8017F558(void) { + D_8019F038 += 1; + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F578); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F5C4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F680); + +extern void func_8017F750(void); + void func_8017F730(void) { + func_8017F750(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F750); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F7D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F7F8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F880); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F8A0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F928); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F948); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F9CC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017F9EC); + +extern s32 func_8017FA94(void); + s32 func_8017FA74(void) { + return func_8017FA94(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FA94); + + +extern void (*D_8018A2F8[])(void); + +void func_8017FB48(void *a0) { + D_8018A2F8[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FB84); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FBD0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FCA8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FE78); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FEC4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8017FF84); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", listCdBuffer); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180044); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180090); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180248); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801804D4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018059C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801808E0); + +extern s32 func_8018094C(void); + void func_8018092C(void) { + func_8018094C(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018094C); + +extern s32 func_80180A2C(void); + void func_80180A0C(void) { + func_80180A2C(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180A2C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180AEC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180B0C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180BCC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180BEC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180CAC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180CCC); + +extern s32 func_80180DAC(void); + void func_80180D8C(void) { + func_80180DAC(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180DAC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80180F7C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181394); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801817E0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181834); + +void func_80181844(void) { +} + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018184C); + +void func_801819C4(void) { +} + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801819CC); + +extern s16 D_8019F070; + void func_80181A00(void) { + D_8019F070 = 0x1; + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181A14); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181BD8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181BF8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181C18); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181C80); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181CBC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181CF0); + + +extern void (*D_8018A428[])(void); + +void func_80181E9C(void *a0) { + D_8018A428[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181ED8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181F98); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80181FE8); + +extern void func_80182940(s32 arg0); + extern void func_8012AD44(s32 *a0, s16 a1); + void func_80182038(s32 param_1) { + func_80182940(param_1); + ((void (*)(s32, s32))func_8012AD44)(param_1, 3); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018206C); + +extern void (*D_8018A444[])(void); + +void func_80182228(void *a0) { + D_8018A444[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182264); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182270); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018241C); + +void func_80182464(void *a0) { + s32 v0 = *(u16 *)((s32)a0 + 0xA); + s32 v1 = *(u16 *)((s32)a0 + 0x52); + *(u16 *)((s32)a0 + 0x52) = 0; + *(u16 *)((s32)a0 + 0xA) = v0 + v1; + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018247C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182538); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018260C); + +extern void func_80182940(s32 arg0); +extern void func_8012AD44(s32 *a0, s16 a1); + +void func_80182648(void *arg0) { + func_80182940((s32)arg0); + ((s32 (*)(s32, s32))func_8012AD44)((s32)arg0, 0x3); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018267C); + + +extern void (*D_8018A484[])(void); + +void func_801827DC(void *a0) { + D_8018A484[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182818); + +void func_801828FC(void) { +} + + +extern void (*D_8018A4A0[])(void); + +void func_80182904(void *a0) { + D_8018A4A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182940); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801829F0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182AD4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182B10); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182C18); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182C68); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182D50); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182DF0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182E48); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182F2C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182F94); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80182FE4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80183078); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801830D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801831FC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80183458); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801838FC); + +extern void (*D_8018A528[])(void); + +void func_80183A34(void *a0) { + D_8018A528[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_8018A53C[])(void); + +void func_80183A70(void *a0) { + D_8018A53C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80183AAC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80183F28); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80183FE0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018439C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184410); + +extern void (*D_8018A544[])(void); + +void func_80184470(void *a0) { + D_8018A544[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern s32 func_8012AD50(void *a0); + void func_801844AC(u8 *a0) { + *(s16 *)(a0 + 0xFC) = 0; + *(u16 *)(a0 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801844D8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184594); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801845B8); + + +extern s16 D_8019FE7C; + extern s16 D_8019FE7E; + extern s16 D_8019FE80; + extern s16 D_8019FE82; + void func_80184658(s32 arg0, s32 arg1, s32 arg2) { + D_8019FE7C = *(u16 *)((s32)arg0 + 0x0); + D_8019FE7E = *(u16 *)((s32)arg0 + 0x2); + D_8019FE80 = arg1; + D_8019FE82 = arg2; + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184688); + +extern s16 D_8019FE82; + void func_80184700(s32 arg0) { + *(s16 *)((s32)&D_8019FE82 + 0x0) += arg0; + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018471C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184774); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184848); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184884); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801848D0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801849AC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184C70); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184C94); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184CBC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184D44); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184DB0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184E20); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184E98); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80184EE4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185000); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018503C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185150); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185434); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185684); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801856E8); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185848); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185A2C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185AE8); + + +extern void (*D_801987F8[])(void); + +void func_80185B94(void *a0) { + D_801987F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_80185C00(s32 arg); +extern void func_80146CA0(void *a0); + +void func_80185BD0(s32 arg0) { + func_80185C00(arg0); + ((void (*)(s32))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185C00); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185C9C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185D40); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185E48); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185E90); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185F04); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185F4C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80185FB0); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80186090); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801861EC); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80186298); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018637C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801863B0); + + +extern void (*D_80198BA0[])(void); + +void func_80186458(void *a0) { + D_80198BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80186494); + +extern s32 func_801866D4(void); + void func_80186694(void) { + func_801866D4(); + } + + +extern void func_80146C3C(void); + void func_801866B4(void) { + func_80146C3C(); + } + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_801866D4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_8018672C); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_80178D40", func_80186758); + + diff --git a/src/ov_SC07_008/ov_SC07_008_jr_801734BC.c b/src/ov_SC07_008/ov_SC07_008_jr_801734BC.c index f59f7fd3a..794f280c9 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_801734BC.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_801734BC.c @@ -3083,814 +3083,3 @@ void func_80178D18(void) { D_80196744 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019654C; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_8019654C = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_8019654C; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_8019654C = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_80196574; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_80196574 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_80196530; - -s32 func_8017A3B0(void) { - switch (D_80196530) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_8019656C; -extern short D_80196568; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_8019656C) { - case 0: - func_800D0CA0(1); - D_8019656C = D_8019656C + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_80196568; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_8019656C = D_8019656C + 1; - if (D_8019656C < 0x1E) { - return 0; - } - D_8019656C = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801965AC; - extern s16 D_801965AE; - extern s16 D_801965B0; - extern s16 D_801965A4; - extern s16 D_801965A6; - extern s16 D_801965A8; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801965AC, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801965AE, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801965B0, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801965A4, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801965A6, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801965A8, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_80196534; -extern u16 D_801965B4; -extern u16 D_801965B6; -extern u16 D_801965B8; -extern s16 D_801966D0; - -void func_8017B1D8(void) { - func_8012A418(); - D_801966D0 = 0; - D_80196534 = 0; - D_801965B4 = D_80126B5E; - D_801965B6 = D_80126B62; - D_801965B8 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80180C40[]; - extern s16 D_801965AC; - extern s16 D_801965A4; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80180C40[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80180C40[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801965AC; - s16 *p78C = &D_801965A4; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801966D0 = 1; - D_80196534 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_80196554; - extern SV4_8017B368 D_8019655C; - extern s16 D_801965AC; - extern s16 D_801965A4; - extern u16 D_80180C40; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_80196554; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_8019655C; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80180C40)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80180C40)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801965AC) = loc0; - (*(SV4_8017B368 *)&D_801965A4) = loc1; - D_801966D0 = 1; - D_80196534 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80180C40[]; - extern s16 D_801965AC; - extern s16 D_801965AE; - extern s16 D_801965B0; - extern s16 D_801965A4; - extern s16 D_801965A6; - extern s16 D_801965A8; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80180C40[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80180C40[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801965AC; - s16 *p78C = &D_801965A4; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801965AE; - v798 = D_801965B0; - v78C = *p78C; - v78E = D_801965A6; - v790 = D_801965A8; - __asm__ __volatile__(""); - D_801966D0 = 1; - D_80196534 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80196534; -extern s16 D_801965AC; -extern s16 D_801965AE; -extern s16 D_801965B0; -extern s16 D_801965A4; -extern s16 D_801965A6; -extern s16 D_801965A8; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_80196534 = 0; - D_801965AC = (s16) D_80114F30; - D_801965AE = (s16) D_80114F34; - D_801965B0 = (s16) D_80114F38; - D_801965A4 = (s16) D_80114F24; - D_801965A6 = (s16) D_80114F28; - D_801965A8 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801965C4; -extern s16 D_801965C6; -extern s16 D_801965C8; -extern s16 D_801965CC; -extern s16 D_801965CE; -extern s16 D_801965D0; - -void func_8017B824(void) { - D_801965C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801965C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801965C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801965CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801965CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801965D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801965C4; -extern s16 D_801965C6; -extern s16 D_801965C8; -extern s16 D_801965CC; -extern s16 D_801965CE; -extern s16 D_801965D0; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801965C4; - D_80114F34 = D_801965C6; - D_80114F38 = D_801965C8; - D_80114F24 = D_801965CC; - D_80114F28 = D_801965CE; - D_80114F2C = D_801965D0; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801965AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801965A4) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801965AC) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801965A4) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801965B4; -extern u16 D_801965B6; -extern u16 D_801965B8; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_80196534; -extern short D_801965BC; -extern short D_801965BE; -extern short D_801965C0; -extern s16 D_801965AC; -extern s16 D_801965AE; -extern s16 D_801965B0; -extern s16 D_801965A4; -extern s16 D_801965A6; -extern s16 D_801965A8; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801965B4); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801965B6); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801965B8); - (*(s16 *)&D_801965BC) = buf[0]; - (*(s16 *)&D_801965BE) = buf[1]; - (*(s16 *)&D_801965C0) = buf[2]; - D_801965AC = D_80114F30 + buf[0]; - D_80196534 = 0; - D_801965AE = D_80114F34 + buf[1]; - D_801965B0 = D_80114F38 + buf[2]; - D_801965A4 = D_80114F24 + buf[0]; - D_801965A6 = D_80114F28 + buf[1]; - D_801965A8 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_80196554; -extern SV4 D_8019655C; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019655C) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_80196554 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_8019655C = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019655C)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_80196554) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_8019655C) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_8019657C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_8019657C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_80196534; -extern s16 D_801966D0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_80196534 = D_80196534 + 1; - if (D_80196534 >= 0x1F) { - D_801966D0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_80196534; -extern s16 D_801966D0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80196534 = D_80196534 + 1; - if (0x18 < D_80196534) { - func_8012A4BC(); - D_801966D0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_80196534; -extern void (*D_80196578)(void); -extern short D_801965BC; -extern short D_801965BE; -extern short D_801965C0; -extern s16 D_801966D0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_80196534 = D_80196534 + 1; - if (D_80196534 >= 0x19) { - if (D_80196578 != 0) { - (*D_80196578)(); - } else { - D_80114F30 = D_80114F30 + D_801965BC; - D_80114F34 = D_80114F34 + D_801965BE; - D_80114F38 = D_80114F38 + D_801965C0; - D_80114F24 = D_80114F24 + D_801965BC; - D_80114F28 = D_80114F28 + D_801965BE; - D_80114F2C = D_80114F2C + D_801965C0; - func_8012A4BC(); - } - D_801966D0 = 0; - } -} - - - -extern void (*D_80180CE0[])(void); - -void func_8017BE60(void *a0) { - D_80180CE0[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017BEBC); - - -extern void (*D_80180D3C[])(void); - -void func_8017CD9C(void *a0) { - D_80180D3C[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017CDD8); - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017CE1C(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - - -extern void (*D_80180D44[])(void); - -void func_8017CE40(void *a0) { - D_80180D44[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017CE7C); - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); -extern void func_800D1E28(void); - -s32 func_8017CEBC(u8 *a0) { - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - func_800D1E28(); - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017CF38(void) { - func_800D1EBC(); - } - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017CF58); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017CF80); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017CFA8); - - -extern void (*D_80180D70[])(void); - -void func_8017D040(void *a0) { - D_80180D70[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017D07C); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_801734BC", func_8017D11C); - diff --git a/src/ov_SC07_008/ov_SC07_008_jr_80178D40.c b/src/ov_SC07_008/ov_SC07_008_jr_80178D40.c new file mode 100644 index 000000000..d68f9cf40 --- /dev/null +++ b/src/ov_SC07_008/ov_SC07_008_jr_80178D40.c @@ -0,0 +1,4259 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_801804E8[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801958A0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_801804DC[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80180520[]; +extern unsigned short D_80180528[]; +extern unsigned short D_80180530[]; +extern unsigned char D_801958A8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801958A0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80180538[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801959DC; +extern M2C_UNK D_801959E0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80195968; +extern void (*D_80180568[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801959E4[]; +extern u8 D_801959EC[]; +extern u8 D_8019599C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80180570[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018058C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80180594[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801805FC[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801805A0; +extern u8 D_801805AC; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80180630[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80180638[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018068C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_801806C0[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_801806B0[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_801806DC; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80180754[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018075C[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80180764[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018076C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80180774[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018077C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80180788[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80180794[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_801807A0[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_801807B0[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_801807C0[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_801807C8[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_801807D0[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_801807D8[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_801807E0[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_801807E8[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_801807F0[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_801807F8[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80180800[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80180808[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80180810[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80180818[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80180820[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80180828[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80180830[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80180838[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80180840[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80180848[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80180850[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80180858[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80180860[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80180868[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80180870[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_801808B4[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80180878; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801808E4[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80180920[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80180978[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80180988[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80180990[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_80180AF8[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80180B04[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80194FB0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801966D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80196120; +extern short D_80196744; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_80196744) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_80196744)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_80196120 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_80196744) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801966A0 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801966A0 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_80196744) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_80196744) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_8019657C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_80196124; + extern s32 D_80196538; + extern s16 D_8019653C; + extern s16 D_80196540; + extern s16 D_80196544; + extern s16 D_80196548; + extern s32 D_80196550; + extern s32 D_80196554; + extern s32 D_80196564; + extern s16 D_80196568; + extern s16 D_8019656C; + extern s32 D_80196570; + extern s32 D_80196578; + extern s32 D_8019657C[10]; + extern s32 D_801965E8; + extern s16 D_801966A0; + extern s32 D_801966CC; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801966A0; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_80196538); + D_80196538 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_80196544, D_80196548 ? 0x48 : 0x40); + (*(s16*)&D_80196744) = 2; + break; + case 0: + func_80179B28(D_80196538); + D_80196538 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_8019653C, D_80196540 ? 0x48 : 0x40); + (*(s16*)&D_80196744) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801965E8 != 0) { + func_80179B28(D_80196538); + D_80196538 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_8019653C, D_80196540 ? 0x48 : 0x40); + (*(s16*)&D_80196744) = 1; + } else { + (*(s16*)&D_80196744) = 3; + } + break; + case 0x32: + func_80179B28(D_80196538); + D_80196538 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_8019653C, + D_80196540 ? 0x48 : 0x40); + (*(s16*)&D_80196744) = 1; + break; + case 2: + func_80179B28(D_80196538); + if (D_80196550 != 0) { + D_80196120 = D_80196550; + D_80196550 = 0; + (*(s16*)&D_80196744) = 3; + return; + } + (*(s16*)&D_80196744) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_80196744) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_80196744) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80196744) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_80196744) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_80196744) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_80196744) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80196744) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_80196744) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_80196744) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_80196744) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_80196744) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_80196744) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_80196744) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_80196744) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_80196744) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_80196744) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_80196744) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80196744) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x1B: + D_80196570 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_80196744) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_80196744) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_80196744) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_80196744) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_80196744) = 4; + D_80196124 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_80196744) = 5; + D_80196564 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_80196564 = (s32)func_8017A3B0; + (*(s16*)&D_80196744) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_80196744) = 3; + break; + case 0x24: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80196744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_80196744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_80196744) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196744) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196744) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_80196744) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80196744) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_80196744) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_80196744) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80196554); + (*(s16*)&D_80196744) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_80196554); + (*(s16*)&D_80196744) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80196554); + (*(s16*)&D_80196744) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_80196554); + (*(s16*)&D_80196744) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + break; + case 0x4E: + D_80196578 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_80196744) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_80196744) = 3; + break; + case 0x2B: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_80196744) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_80196744) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_80196744) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_80196744) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_80196744) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801966CC = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_80196744) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_80196744) = 3; + break; + case 0x34: + (*(s16*)&D_80196744) = 3; + D_80196120 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_80196550 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_80196744) = 3; + D_80196120 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_80196744) = 3; + D_80196120 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_80196120 = *(s32 *)(D_80196120 + 4); + return; + case 0x37: + (*(s16*)&D_80196744) = 3; + D_8019653C = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80196540 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_80196744) = 3; + D_80196544 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_80196548 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_80196744) = 3; + D_8019653C = w1; + D_80196540 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_80196744) = 3; + D_80196544 = w2; + D_80196548 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_80196744) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + case 0x43: + D_80196564 = (s32)func_8017A3D8; + D_8019656C = 0; + (*(s16*)&D_80196744) = 5; + D_80196568 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_80196744) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_80196744) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_80196744) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_80196744) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_8019657C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_80196744) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_8019657C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_80196744) = 3; + break; + } + i5c = 0; + do { + p5c = &D_8019657C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_80196744) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_8019657C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_80196744) = 3; + break; + default: + break; + } +Lend: + D_80196120 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019654C; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_8019654C = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_8019654C; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_8019654C = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_80196574; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_80196574 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_80196530; + +s32 func_8017A3B0(void) { + switch (D_80196530) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_8019656C; +extern short D_80196568; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_8019656C) { + case 0: + func_800D0CA0(1); + D_8019656C = D_8019656C + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_80196568; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_8019656C = D_8019656C + 1; + if (D_8019656C < 0x1E) { + return 0; + } + D_8019656C = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801965AC; + extern s16 D_801965AE; + extern s16 D_801965B0; + extern s16 D_801965A4; + extern s16 D_801965A6; + extern s16 D_801965A8; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801965AC, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801965AE, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801965B0, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801965A4, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801965A6, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801965A8, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80196534; +extern u16 D_801965B4; +extern u16 D_801965B6; +extern u16 D_801965B8; +extern s16 D_801966D0; + +void func_8017B1D8(void) { + func_8012A418(); + D_801966D0 = 0; + D_80196534 = 0; + D_801965B4 = D_80126B5E; + D_801965B6 = D_80126B62; + D_801965B8 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_80180C40[]; + extern s16 D_801965AC; + extern s16 D_801965A4; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80180C40[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80180C40[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801965AC; + s16 *p78C = &D_801965A4; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801966D0 = 1; + D_80196534 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_80196554; + extern SV4_8017B368 D_8019655C; + extern s16 D_801965AC; + extern s16 D_801965A4; + extern u16 D_80180C40; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_80196554; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_8019655C; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_80180C40)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_80180C40)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801965AC) = loc0; + (*(SV4_8017B368 *)&D_801965A4) = loc1; + D_801966D0 = 1; + D_80196534 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_80180C40[]; + extern s16 D_801965AC; + extern s16 D_801965AE; + extern s16 D_801965B0; + extern s16 D_801965A4; + extern s16 D_801965A6; + extern s16 D_801965A8; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_80180C40[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_80180C40[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801965AC; + s16 *p78C = &D_801965A4; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801965AE; + v798 = D_801965B0; + v78C = *p78C; + v78E = D_801965A6; + v790 = D_801965A8; + __asm__ __volatile__(""); + D_801966D0 = 1; + D_80196534 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80196534; +extern s16 D_801965AC; +extern s16 D_801965AE; +extern s16 D_801965B0; +extern s16 D_801965A4; +extern s16 D_801965A6; +extern s16 D_801965A8; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_80196534 = 0; + D_801965AC = (s16) D_80114F30; + D_801965AE = (s16) D_80114F34; + D_801965B0 = (s16) D_80114F38; + D_801965A4 = (s16) D_80114F24; + D_801965A6 = (s16) D_80114F28; + D_801965A8 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801965C4; +extern s16 D_801965C6; +extern s16 D_801965C8; +extern s16 D_801965CC; +extern s16 D_801965CE; +extern s16 D_801965D0; + +void func_8017B824(void) { + D_801965C4 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801965C6 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801965C8 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801965CC = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801965CE = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801965D0 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801965C4; +extern s16 D_801965C6; +extern s16 D_801965C8; +extern s16 D_801965CC; +extern s16 D_801965CE; +extern s16 D_801965D0; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801965C4; + D_80114F34 = D_801965C6; + D_80114F38 = D_801965C8; + D_80114F24 = D_801965CC; + D_80114F28 = D_801965CE; + D_80114F2C = D_801965D0; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801965AC), src[8..15] -> (*(S8_8017B8E8 *)&D_801965A4) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801965AC) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801965A4) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801965B4; +extern u16 D_801965B6; +extern u16 D_801965B8; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_80196534; +extern short D_801965BC; +extern short D_801965BE; +extern short D_801965C0; +extern s16 D_801965AC; +extern s16 D_801965AE; +extern s16 D_801965B0; +extern s16 D_801965A4; +extern s16 D_801965A6; +extern s16 D_801965A8; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801965B4); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801965B6); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801965B8); + (*(s16 *)&D_801965BC) = buf[0]; + (*(s16 *)&D_801965BE) = buf[1]; + (*(s16 *)&D_801965C0) = buf[2]; + D_801965AC = D_80114F30 + buf[0]; + D_80196534 = 0; + D_801965AE = D_80114F34 + buf[1]; + D_801965B0 = D_80114F38 + buf[2]; + D_801965A4 = D_80114F24 + buf[0]; + D_801965A6 = D_80114F28 + buf[1]; + D_801965A8 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_80196554; +extern SV4 D_8019655C; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_8019655C) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_80196554 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_8019655C = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_8019655C)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_80196554) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_8019655C) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_8019657C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_8019657C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_80196534; +extern s16 D_801966D0; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_80196534 = D_80196534 + 1; + if (D_80196534 >= 0x1F) { + D_801966D0 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_80196534; +extern s16 D_801966D0; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80196534 = D_80196534 + 1; + if (0x18 < D_80196534) { + func_8012A4BC(); + D_801966D0 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_80196534; +extern void (*D_80196578)(void); +extern short D_801965BC; +extern short D_801965BE; +extern short D_801965C0; +extern s16 D_801966D0; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_80196534 = D_80196534 + 1; + if (D_80196534 >= 0x19) { + if (D_80196578 != 0) { + (*D_80196578)(); + } else { + D_80114F30 = D_80114F30 + D_801965BC; + D_80114F34 = D_80114F34 + D_801965BE; + D_80114F38 = D_80114F38 + D_801965C0; + D_80114F24 = D_80114F24 + D_801965BC; + D_80114F28 = D_80114F28 + D_801965BE; + D_80114F2C = D_80114F2C + D_801965C0; + func_8012A4BC(); + } + D_801966D0 = 0; + } +} + + + +extern void (*D_80180CE0[])(void); + +void func_8017BE60(void *a0) { + D_80180CE0[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017BEBC); + + +extern void (*D_80180D3C[])(void); + +void func_8017CD9C(void *a0) { + D_80180D3C[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017CDD8); + + +extern s32 func_800167F0(s32 a0); + +s32 func_8017CE1C(void) { + return (func_800167F0(0) & 0xffff) != 0; +} + + + +extern void (*D_80180D44[])(void); + +void func_8017CE40(void *a0) { + D_80180D44[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017CE7C); + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017CEBC(u8 *a0) { + if (--(*(s32 *)(a0 + 0x28)) == -1) { + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + + +extern void func_800D1EBC(void); + void func_8017CF38(void) { + func_800D1EBC(); + } + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017CF58); + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017CF80); + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017CFA8); + + +extern void (*D_80180D70[])(void); + +void func_8017D040(void *a0) { + D_80180D70[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017D07C); + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_80178D40", func_8017D11C); + + diff --git a/src/ov_SC07_009/ov_SC07_009_jr_801734BC.c b/src/ov_SC07_009/ov_SC07_009_jr_801734BC.c index cfe646588..89d043909 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_801734BC.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_801734BC.c @@ -3084,948 +3084,3 @@ void func_80178D18(void) { D_801A3DD4 = 0; func_80174714(); } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_80178D40); - -DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_80179B74); - -DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ - -DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ - -DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ - -DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ - -DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ - -DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ - -DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ - -DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ - -DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ - -DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ - -DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ - -DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ - -DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ - -DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ - -DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A3BDC; - -void func_8017A094(s32 arg0) { - s16 sp10; - - D_801A3BDC = arg0; - sp10 = 0x15; - func_80179B74(&sp10); -} - - - -extern void func_80179B74(s16 *a0); -extern s32 D_801A3BDC; - -void func_8017A0C4(s32 arg0) { - s16 sp10; - - D_801A3BDC = arg0; - sp10 = 0x16; - func_80179B74(&sp10); -} - - -DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ - -DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ - - -extern s32 D_801A3C04; -extern void func_80179B74(s16 *a0); - -void func_8017A144(s32 a0) { - s16 sp10; - sp10 = 0x1B; - func_80179B74(&sp10); - D_801A3C04 = a0; -} - - -DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ - -DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ - -DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ - -DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ - -DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ - -DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ - -DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ - -DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ - -DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ - -DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ - -DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ - -DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ - -DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ - -DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ - - -extern s16 D_801A3BC0; - -s32 func_8017A3B0(void) { - switch (D_801A3BC0) { - case 0: - return 1; - case 1: - return 0; - default: - return 1; - } -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern short D_801A3BFC; -extern short D_801A3BF8; - -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); - -int func_8017A3D8(void) -{ - switch (D_801A3BFC) { - case 0: - func_800D0CA0(1); - D_801A3BFC = D_801A3BFC + 1; - return 0; - case 100: - { - register int a __asm__("$4"); - a = D_801A3BF8; - if (a != -1) { - return func_8001AAA0() != 0; - } - return func_800D0CE0() == 1; - } - default: - D_801A3BFC = D_801A3BFC + 1; - if (D_801A3BFC < 0x1E) { - return 0; - } - D_801A3BFC = 100; - return 0; - } -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017A4AC); - -DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ - -DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ - -DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017AE2C); - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801A3C3C; - extern s16 D_801A3C3E; - extern s16 D_801A3C40; - extern s16 D_801A3C34; - extern s16 D_801A3C36; - extern s16 D_801A3C38; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A3C3C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A3C3E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A3C40, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A3C34, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A3C36, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A3C38, (s32)((s16)param_2)); -} - - - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern s16 D_801A3BC4; -extern u16 D_801A3C44; -extern u16 D_801A3C46; -extern u16 D_801A3C48; -extern s16 D_801A3D60; - -void func_8017B1D8(void) { - func_8012A418(); - D_801A3D60 = 0; - D_801A3BC4 = 0; - D_801A3C44 = D_80126B5E; - D_801A3C46 = D_80126B62; - D_801A3C48 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - -typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_801816E4[]; - extern s16 D_801A3C3C; - extern s16 D_801A3C34; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801816E4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801816E4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A3C3C; - s16 *p78C = &D_801A3C34; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801A3D60 = 1; - D_801A3BC4 = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - -typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ -typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801A3BE4; - extern SV4_8017B368 D_801A3BEC; - extern s16 D_801A3C3C; - extern s16 D_801A3C34; - extern u16 D_801816E4; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801A3BE4; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801A3BEC; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_801816E4)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_801816E4)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801A3C3C) = loc0; - (*(SV4_8017B368 *)&D_801A3C34) = loc1; - D_801A3D60 = 1; - D_801A3BC4 = 0; -} - - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017B490); - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - -typedef struct { u8 b[8]; } Blk8_8017B614; - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_801816E4[]; - extern s16 D_801A3C3C; - extern s16 D_801A3C3E; - extern s16 D_801A3C40; - extern s16 D_801A3C34; - extern s16 D_801A3C36; - extern s16 D_801A3C38; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_801816E4[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_801816E4[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801A3C3C; - s16 *p78C = &D_801A3C34; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801A3C3E; - v798 = D_801A3C40; - v78C = *p78C; - v78E = D_801A3C36; - v790 = D_801A3C38; - __asm__ __volatile__(""); - D_801A3D60 = 1; - D_801A3BC4 = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A3BC4; -extern s16 D_801A3C3C; -extern s16 D_801A3C3E; -extern s16 D_801A3C40; -extern s16 D_801A3C34; -extern s16 D_801A3C36; -extern s16 D_801A3C38; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801A3BC4 = 0; - D_801A3C3C = (s16) D_80114F30; - D_801A3C3E = (s16) D_80114F34; - D_801A3C40 = (s16) D_80114F38; - D_801A3C34 = (s16) D_80114F24; - D_801A3C36 = (s16) D_80114F28; - D_801A3C38 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801A3C54; -extern s16 D_801A3C56; -extern s16 D_801A3C58; -extern s16 D_801A3C5C; -extern s16 D_801A3C5E; -extern s16 D_801A3C60; - -void func_8017B824(void) { - D_801A3C54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801A3C56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801A3C58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801A3C5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801A3C5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801A3C60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801A3C54; -extern s16 D_801A3C56; -extern s16 D_801A3C58; -extern s16 D_801A3C5C; -extern s16 D_801A3C5E; -extern s16 D_801A3C60; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801A3C54; - D_80114F34 = D_801A3C56; - D_80114F38 = D_801A3C58; - D_80114F24 = D_801A3C5C; - D_80114F28 = D_801A3C5E; - D_80114F2C = D_801A3C60; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801A3C3C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A3C34) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - -typedef struct { unsigned char b[8]; } S8_8017B8E8; - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801A3C3C) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801A3C34) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; -extern u16 D_801A3C44; -extern u16 D_801A3C46; -extern u16 D_801A3C48; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801A3BC4; -extern short D_801A3C4C; -extern short D_801A3C4E; -extern short D_801A3C50; -extern s16 D_801A3C3C; -extern s16 D_801A3C3E; -extern s16 D_801A3C40; -extern s16 D_801A3C34; -extern s16 D_801A3C36; -extern s16 D_801A3C38; - -void func_8017B940(void) -{ - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A3C44); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A3C46); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A3C48); - (*(s16 *)&D_801A3C4C) = buf[0]; - (*(s16 *)&D_801A3C4E) = buf[1]; - (*(s16 *)&D_801A3C50) = buf[2]; - D_801A3C3C = D_80114F30 + buf[0]; - D_801A3BC4 = 0; - D_801A3C3E = D_80114F34 + buf[1]; - D_801A3C40 = D_80114F38 + buf[2]; - D_801A3C34 = D_80114F24 + buf[0]; - D_801A3C36 = D_80114F28 + buf[1]; - D_801A3C38 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801A3BE4; -extern SV4 D_801A3BEC; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A3BEC) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801A3BE4 = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801A3BEC = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - -typedef struct { s16 a, b, c, d; } SV4_8017BB34; -typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A3BEC)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801A3BE4) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801A3BEC) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801A3C0C[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801A3C0C; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801A3BC4; -extern s16 D_801A3D60; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801A3BC4 = D_801A3BC4 + 1; - if (D_801A3BC4 >= 0x1F) { - D_801A3D60 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801A3BC4; -extern s16 D_801A3D60; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A3BC4 = D_801A3BC4 + 1; - if (0x18 < D_801A3BC4) { - func_8012A4BC(); - D_801A3D60 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801A3BC4; -extern void (*D_801A3C08)(void); -extern short D_801A3C4C; -extern short D_801A3C4E; -extern short D_801A3C50; -extern s16 D_801A3D60; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801A3BC4 = D_801A3BC4 + 1; - if (D_801A3BC4 >= 0x19) { - if (D_801A3C08 != 0) { - (*D_801A3C08)(); - } else { - D_80114F30 = D_80114F30 + D_801A3C4C; - D_80114F34 = D_80114F34 + D_801A3C4E; - D_80114F38 = D_80114F38 + D_801A3C50; - D_80114F24 = D_80114F24 + D_801A3C4C; - D_80114F28 = D_80114F28 + D_801A3C4E; - D_80114F2C = D_80114F2C + D_801A3C50; - func_8012A4BC(); - } - D_801A3D60 = 0; - } -} - - - -extern void (*D_80181784[])(void); - -void func_8017BE60(void *a0) { - D_80181784[*(u8 *)((s32)a0 + 0x4)](); -} - - -DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ - -DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ - -DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ - -DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017BEBC); - - -extern void (*D_80181804[])(void); - -void func_8017CD9C(void *a0) { - D_80181804[*(u8 *)((s32)a0 + 0x15)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017CDD8); - -s32 func_8017CE14(void) { - return 1; - } - - - -extern void (*D_8018180C[])(void); - -void func_8017CE1C(void *a0) { - D_8018180C[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017CE58(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017CE74); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017CEC8); - - -extern void (*D_80181818[])(void); - -void func_8017CEEC(void *a0) { - D_80181818[*(u8 *)((s32)a0 + 0x15)](); -} - - -s32 func_8017CF28(u8 *a0) { - *(s32 *)(a0 + 0x28) = 0xA; - a0[0x15] += 1; - return 0; - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017CF44); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017CFC0); - - -extern void (*D_80181858[])(void); - -void func_8017D024(void *a0) { - D_80181858[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D060); - -void func_8017D0CC(void) { -} - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D0D4); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D150); - -extern s32 func_80171990(u8 *a0); - extern s32 D_80126B58; - void func_8017D178(void) { - ((void (*)(void *))func_80171990)(&D_80126B58); - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D1A0); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D1C8); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D260); - -extern s32 D_8019EE74; -extern s32 D_80126950; -extern void func_80174E9C(s32); - -void func_8017D304(void) { - D_80126950 = 0x16F; - func_80174E9C((s32)&D_8019EE74); -} - - - -extern void (*D_80181878[])(void); - -void func_8017D338(void *a0) { - D_80181878[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D374); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D39C); - -extern s32 func_8017D3E4(void); - -s32 func_8017D3E4(void) { - return 0x91; -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D3EC); - -extern s32 func_8012AD50(void *a0); - void func_8017D4AC(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D4CC); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D508); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D554); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D5A0); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D5EC); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D634); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D680); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D6CC); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D718); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D760); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D7AC); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D7F8); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D844); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D88C); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D8D8); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D924); - -void func_8017D978(void) { -} - -void func_8017D980(s32 *a0) { - *(s32 *)((s32)a0 + 0x30) = 0; - *(s32 *)((s32)a0 + 0x34) = 0; - *(s32 *)((s32)a0 + 0x38) = 0; - *(s32 *)((s32)a0 + 0x3C) = 0; - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017D994); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DA0C); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DA7C); - - -extern void (*D_801819E4[])(void); - -void func_8017DACC(void *a0) { - D_801819E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017DB08(u8 *param_1) { - *(short *)(param_1 + 0xfc) = 0; - *(unsigned short *)(param_1 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DB34); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DB80); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DBCC); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DC40); - - -extern void (*D_80181A78[])(void); - -void func_8017DCA8(void *a0) { - D_80181A78[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DCE4); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_801734BC", func_8017DD18); - diff --git a/src/ov_SC07_009/ov_SC07_009_jr_80178D40.c b/src/ov_SC07_009/ov_SC07_009_jr_80178D40.c new file mode 100644 index 000000000..5b258ffc2 --- /dev/null +++ b/src/ov_SC07_009/ov_SC07_009_jr_80178D40.c @@ -0,0 +1,4394 @@ +#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; +typedef struct { char b[4]; } W_8016BFD0; +typedef struct { s16 x, y, z; } Vec3_8016BFD0; +typedef struct { + s16 m[9]; /* 0x00 */ + s16 pad; /* 0x12 */ + s32 t[3]; /* 0x14, 0x18, 0x1c */ + s32 rest[8]; /* 0x20..0x3f */ +} Mtx_8016BFD0; +typedef struct { + u8 f0, f1, f2, f3; + struct { s16 a, b, c, d, e, g; } ent[16]; +} Blk_8016CF04_8016CF04; /* 4 + 16*12 = 0xC4 stride */ +typedef struct { short vx, vy, vz, pad; } SVECTOR_8016E7C8; /* 0x08 */ +typedef struct { short m[3][3]; short pad; s32 t[3]; } MATRIX_8016E7C8; /* 0x20 */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +struct Entry_8016E95C { + u8 f0; + u8 f1; + u8 pad[0x1e]; +}; +typedef void (*Handler)(struct Entry_8016E95C *); +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 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +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_8015AE2C(); +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 void func_8015CC40(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_8015CF8C(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 s32 func_80161A60(s32 a0); +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 s32 func_80161488(void *a0); +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_801619A4(s32 *a0); +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 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 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); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80180F8C[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801A2F30; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80180F80[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80180FC4[]; +extern unsigned short D_80180FCC[]; +extern unsigned short D_80180FD4[]; +extern unsigned char D_801A2F38[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801A2F30; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80180FDC[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801A306C; +extern M2C_UNK D_801A3070; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801A2FF8; +extern void (*D_8018100C[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801A3074[]; +extern u8 D_801A307C[]; +extern u8 D_801A302C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80181014[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80181030[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80181038[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_801810A0[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80181044; +extern u8 D_80181050; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801810D4[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801810DC[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80181130[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80181164[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80181154[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80181180; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801811F8[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80181200[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80181208[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80181210[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80181218[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80181220[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018122C[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80181238[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80181244[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80181254[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80181264[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018126C[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80181274[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018127C[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80181284[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018128C[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80181294[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018129C[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_801812A4[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_801812AC[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_801812B4[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_801812BC[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_801812C4[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801812CC[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801812D4[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801812DC[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801812E4[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801812EC[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801812F4[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801812FC[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80181304[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018130C[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80181314[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80181358[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018131C; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80181388[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801813C4[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(s32); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018141C[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018142C[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80181434[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175414(s32 _arg0); +extern void func_80175494(void); +extern void (*D_8018159C[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801815A8[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801A263C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +extern s16 D_801A3D60; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801A37B0; +extern short D_801A3DD4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +/* ==== end §8b carried decl layer ==== */ + + +/* func_80178D40 - 890 ins, 94-case jr switch (jtbl_801D8E24). + * STATUS: **MATCH** -- 890/890 ins, byte-exact (masked). PIN-FREE (this body is + * templated across 134 overlays; a pinned body would crash the sibling TUs). + * python3 tools/match_one.py func_80178D40 --c .run/phase26-cracks/func_80178D40.c \ + * --asm-subdir asm/ov_SC01_077/nonmatchings/ov_SC01_077_jr_801734BC + * => MATCH (890 ins) + * Jump table VERIFIED: 94 entries (= the sltiu 0x5E bound, no trailing zero pad), + * 93 unique blocks, cases 0xF/0x3F share one block; my case->block sequence is + * identical to jtbl_801D8E24's. + * + * Byte-derived structure (the levers that cracked it): + * 1. NO status variable. Every case stores `(*(s16*)&D_801A3DD4) = K` DIRECTLY. The shared + * `sh $v0, (*(s16*)&D_801A3DD4)` at .L80179AEC is a jump2 CROSS-JUMP merge of those stores: + * find_cross_jump's FIRST call (minimum=1, vs the code before the target label) + * matches that 1 insn, and because it succeeds the jump_chain loop (minimum=2) is + * SKIPPED -- which is what BLOCKS the deeper, wrong 3-insn merges of the identical + * func_80137614 tails (cases 0/0x45/0x32). reorg then steals the `li K` back into + * each `j` delay slot, so it looks un-merged. A `status` pseudo instead of direct + * stores loses that block and costs 6 insns. + * 2. after-switch = `D_801A37B0 += 8;` (.L80179AF4) -> the out-of-range default lands + * there with NO explicit `default:` label. + * 3. arg0/arg1/pv are STRUCT pointers. gcc-2.7.2 sched alias (sched.c true_dependence) + * only lets a MEM_IN_STRUCT varying-address load hoist above a non-MEM_IN_STRUCT + * fixed-address store (the (*(s16*)&D_801A3DD4) store). Raw `*(T *)(int + off)` casts get + * MEM_IN_STRUCT_P = 0 and block that hoist -> stray nops. + * 4. g = &D_801A3D30 stays a plain `s16 *` (NOT a struct ptr) so its varying, + * non-in-struct stores keep their order w.r.t. the loads. + * 5. Statement order inside the D_801A3D30 cases is load-bearing (sched LUID/priority): + * g[0],g[2],g[1] in 0x25/0x48/0x26; g[7],g[8],g[1],g[3] in 0x4F/0x28. + * 6. Cases 0x5B/0x5C: the loops "found" bodies are emitted BEFORE the case label -> + * source-level labels placed between cases + `goto`. + * 7. Per-case temporaries are BLOCK-LOCAL (local-alloc), not function-scope. + * 8. stack locals declared in slot order (0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48, + * 0x50,0x58,0x60) -> frame 0x78. + * + * Case 0x5C -- the last 39 residuals. Four levers, all generalizable: + * + * 9. NO-PEEL: a `break` out of a do-while whose target COINCIDES with the loop's own + * natural fall-through exit makes NOTE_INSN_LOOP_BEG be followed by an + * unconditional jump -> jump.c `duplicate_loop_exit_test` (jump.c:599/2131) rotates + * the loop and peels iteration 1 (here `i` was provably 0, so the peeled `i++` + * const-folded to `li $a2,1` and dragged an extra lui/addiu/lw address block with + * it). Writing `goto L5D;` instead of `break;` -- SAME destination, different + * construct -- keeps the loop a plain do-while and the peel disappears. + * RULE: never let a loop's `break` land on the loop's own fall-through label. + * + * 10. SURVIVING REG-REG COPY (residual #1, `addu $v1,$v0,$zero`). A source-level + * `fp = q;` copy ALWAYS dies: cse.c `canon_reg` rewrites every later use of `fp` + * to `q` (qty_first_reg keeps the older reg) and flow deletes the now-dead set. + * To make a copy SURVIVE, its def and its uses must sit in different extended basic + * blocks -- cse resets its hash table at a label with >1 predecessor (a loop top). + * So: TEST THE MEM DIRECTLY, then assign the variable inside the branch body: + * if (arg1->a.w != 0) { fp5c = arg1->a.w; ... do { ... fp5c ... } while (); } + * cse folds the redundant 2nd load into `fp5c = ` (a copy) in the guard + * block, but CANNOT propagate it into the loop body -> the copy is emitted. + * (Assigning `fp5c` BEFORE the test gives one pseudo and no copy -- what we had.) + * + * 11. CROSS-JUMP-MERGED `(*(s16*)&D_801A3DD4) = 3` (residual #2). `if (i != 10) { (*(s16*)&D_801A3DD4) = 3; + * break; }` lets jump2 tail-merge the `lui/sh` into the shared .L80179AEC tail and + * reorg steal the `li 3` into the `bne` delay slot. Storing it unconditionally + * BEFORE the `if` blocks the merge and costs 3 inline insns. + * + * 12. THE UN-COALESCED LOOP COPY (residual #3, `addu $v1,$a0,$zero` + `addiu $a0,$v1,4`). + * This is loop.c's NON-REPLACEABLE DEST_REG GIV, not a source-level copy (see #10: + * those always die). Recipe -- BOTH halves are needed: + * a) make the pointer an INDEX GIV: `p5c = &D_801A3C0C[i5c];` (a DEST_REG giv) + * b) make it NON-replaceable so loop.c emits `emit_insn_after(move dest,new_reg)` + * (loop.c:3945): record_giv (loop.c:4437) needs the giv used OUTSIDE the loop + * -- so the "found" body goes AFTER the loop and stores through `p5c`. + * c) put the BIV increment (`i5c++`) LAST in the body. loop.c inserts the reduced + * giv's `addiu` immediately BEFORE the biv's increment insn, so `i5c++` at the + * bottom puts `addiu $a0,$v1,4` in the loop-back delay slot. With `i5c++` at + * the TOP the giv-add lands at the top, nothing is left to fill the delay slot, + * and reorg STEALS the loop-top `move` into it (duplicating it: +1 insn). + * + * 13. Loop3 needs its OWN pointer pseudo (`r5c`, not `q5c`). `q5c` is loop1's pointer, + * and in loop1 $v1 is held by `fp5c` -> q5c is forced to $a0, and loop3 inherits it. + * Both "found" bodies then read $a0, become identical, and jump2 CROSS-JUMPS them + * into one block (-2 insns). A distinct pseudo frees loop3 into $v1, so found3 + * (`sw $zero,0($v1)`) differs from found2 (`sw $zero,0($a0)`) and they stay separate. + * RULE: two structurally identical loops must differ in REGISTER, or cross_jump + * merges their tails. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV3_80178D40; +typedef struct { u8 pad0[0x12]; u16 unk12; } Obj20_80178D40; +typedef struct { u16 f0; u16 f2; u16 f4; u16 f6; } Blk_80178D40; + +typedef struct Actor_80178D40 { + s16 unk0; + s16 unk2; + s16 unk4; + u16 unk6; + s16 unk8; + u16 unkA; + s16 unkC; + u16 unkE; + u8 pad10[0x20 - 0x10]; + Obj20_80178D40 *unk20; + u8 pad24[0x34 - 0x24]; + s16 unk34; + u8 pad36[0xD4 - 0x36]; + struct Actor_80178D40 *unkD4; + s32 unkD8; + s32 unkDC[7]; + s32 unkF8; + u8 padFC[0x10A - 0xFC]; + s16 unk10A; +} Actor_80178D40; + +typedef struct { + s32 op; + union { + s32 w; + void *p; + s16 h[2]; + u16 uh[2]; + } a; +} Cmd_80178D40; + + + +s32 func_80178D40(s32 arg0, s32 arg1) +{ + extern void func_80179B28(s32); + extern s32 func_80137614(s32, s32, s32); + extern void func_8012F214(void *, void *, void *); + extern void func_8012F40C(void *, void *); + extern void func_80179D30(void *); + extern void func_80179D78(void *); + extern void func_80179EA0(void *); + extern void func_80179DCC(s32); + extern void func_80179DF8(void); + extern void func_80179E1C(s32); + extern void func_80179E48(s32); + extern void func_80179E74(s32); + extern void func_80179EE8(s32); + extern void func_80179F14(s32, s32); + extern void func_80179F44(void); + extern void func_80179F6C(s32); + extern void func_80179F98(s32); + extern void func_80179FEC(s32); + extern void func_8017A040(s32); + extern void func_8017A094(s32); + extern void func_8017A0C4(s32); + extern void func_8017A0F4(void); + extern void func_8017A11C(void); + extern void func_8017A144(s32); + extern void func_8017A180(void); + extern void func_8017A1A8(void); + extern void func_8017A1D0(void); + extern void func_8017A1F8(void); + extern void func_8017A220(void); + extern void func_8017A248(void); + extern void func_8017A270(void); + extern void func_8017A298(void); + extern void func_8017A2C0(void); + extern void func_8017A2E8(void); + extern void func_8017A310(void); + extern void func_8017A338(void); + extern void func_8017A360(void); + extern void func_8017A388(void); + extern void func_8017A3B0(void); + extern void func_8017A3D8(void); + extern void func_8017AD0C(s32); + extern void func_8017B238(void *, s32); + extern void func_8017B614(void *, s32); + extern void func_8017B7A8(void *); + extern void func_8017B824(void); + extern void func_8017B880(void); + extern void func_8017B940(void *); + extern void func_8017BA3C(void *, s32); + extern void func_8017BB34(void *, s32); + extern void func_8012A828(void *, s32); + extern s32 func_8012B8A4(void *); + extern void func_8012E88C(void *); + extern void func_8012E8A8(void *); + extern void func_8001AAD0(s32, s32); + extern s32 D_801A37B4; + extern s32 D_801A3BC8; + extern s16 D_801A3BCC; + extern s16 D_801A3BD0; + extern s16 D_801A3BD4; + extern s16 D_801A3BD8; + extern s32 D_801A3BE0; + extern s32 D_801A3BE4; + extern s32 D_801A3BF4; + extern s16 D_801A3BF8; + extern s16 D_801A3BFC; + extern s32 D_801A3C00; + extern s32 D_801A3C08; + extern s32 D_801A3C0C[10]; + extern s32 D_801A3C78; + extern s16 D_801A3D30; + extern s32 D_801A3D5C; + + + SV3_80178D40 v10, v18, v20, v28, v30, v38, v40, v48; + s32 out50[2]; + SV3_80178D40 v58, v60; + Actor_80178D40 *pv = &(*(Actor_80178D40*)&D_80126B58); + s32 i5b, i5c, fp5b, fp5c; + s32 *q5b, *q5c, *p5c, *r5c; + s16 *g = &D_801A3D30; + + switch (((Cmd_80178D40 *)arg1)->op) { + case 1: + func_80179B28(D_801A3BC8); + D_801A3BC8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A3BD4, D_801A3BD8 ? 0x48 : 0x40); + (*(s16*)&D_801A3DD4) = 2; + break; + case 0: + func_80179B28(D_801A3BC8); + D_801A3BC8 = func_80137614(((Cmd_80178D40 *)arg1)->a.w, D_801A3BCC, D_801A3BD0 ? 0x48 : 0x40); + (*(s16*)&D_801A3DD4) = 1; + break; + case 0x45: + ((void (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)); + if (D_801A3C78 != 0) { + func_80179B28(D_801A3BC8); + D_801A3BC8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[1], D_801A3BCC, D_801A3BD0 ? 0x48 : 0x40); + (*(s16*)&D_801A3DD4) = 1; + } else { + (*(s16*)&D_801A3DD4) = 3; + } + break; + case 0x32: + func_80179B28(D_801A3BC8); + D_801A3BC8 = func_80137614(((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w], D_801A3BCC, + D_801A3BD0 ? 0x48 : 0x40); + (*(s16*)&D_801A3DD4) = 1; + break; + case 2: + func_80179B28(D_801A3BC8); + if (D_801A3BE0 != 0) { + D_801A37B0 = D_801A3BE0; + D_801A3BE0 = 0; + (*(s16*)&D_801A3DD4) = 3; + return; + } + (*(s16*)&D_801A3DD4) = 6; + break; + case 6: + func_80179DF8(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 3: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179D30(&v10); + (*(s16*)&D_801A3DD4) = 3; + break; + case 4: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x4C: + func_80179D78((void *)((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x4D: + v10.vx = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f0; + v10.vy = 0; + v10.vz = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f4; + func_8012F214(((Actor_80178D40 *)arg0), &v10, &v18); + v18.pad = ((Blk_80178D40 *)((Cmd_80178D40 *)arg1)->a.p)->f6; + func_80179D78(&v18); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x15: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0)->unkD4, &v10, &v18); + func_80179D30(&v18); + (*(s16*)&D_801A3DD4) = 3; + break; + case 5: + func_80179DCC(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 7: + func_80179E1C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 8: + func_80179E74(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 9: + v10.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v10.vy = 0; + v10.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_80179EA0(&v10); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0xA: + v10.vx = ((Actor_80178D40 *)arg0)->unk6; + v10.vy = ((Actor_80178D40 *)arg0)->unkA; + v10.vz = ((Actor_80178D40 *)arg0)->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x16: { + Actor_80178D40 *p = ((Actor_80178D40 *)arg0)->unkD4; + v10.vx = p->unk6; + v10.vy = p->unkA; + v10.vz = p->unkE; + func_80179EA0(&v10); + (*(s16*)&D_801A3DD4) = 3; + break; + } + case 0xB: + func_8017A0F4(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0xC: + func_8017A11C(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0xD: + func_8017A180(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0xE: + func_8017A1A8(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x10: + func_8017A1D0(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x46: + func_8017A1F8(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x59: + func_8017A220(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x5A: + func_8017A248(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x49: + func_8017A144(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x47: + func_8017A270(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x17: + func_80179EE8(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x18: + func_80179F14(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x19: + func_80179F6C(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x1A: + func_80179F98(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x51: + func_8017A040(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x1B: + D_801A3C00 = ((Cmd_80178D40 *)arg1)->a.w; + func_80179F44(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x1C: + func_8017A338(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x52: + func_8017A360(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x1D: + func_8017A388(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x3B: + func_8017A094(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x3C: + func_8017A0C4(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0xF: + case 0x3F: + (*(s16*)&D_801A3DD4) = 4; + D_801A37B4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3E: + (*(s16*)&D_801A3DD4) = 5; + D_801A3BF4 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x40: + D_801A3BF4 = (s32)func_8017A3B0; + (*(s16*)&D_801A3DD4) = 5; + break; + case 0x23: + func_8012A828(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x31: + func_8012A828(((Actor_80178D40 *)arg0), ((Actor_80178D40 *)arg0)->unkDC[((Cmd_80178D40 *)arg1)->a.w]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x24: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unk20->unk12 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x25: + g[0] = 1; + g[2] = ((Actor_80178D40 *)arg0)->unk20->unk12 + ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A3DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x48: + g[0] = 1; + g[2] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + g[1] = 0x1E; + (*(s16*)&D_801A3DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x26: + g[0] = 1; + g[2] = func_8012B8A4(((Actor_80178D40 *)arg0)); + g[1] = 0x1E; + (*(s16*)&D_801A3DD4) = 3; + g[3] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x3D: + ((void(*)(void *, s32))func_8012E8E0)(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x27: + g[0] = 2; + g[4] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A3DD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x4F: + g[5] = 1; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A3DD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + /* fallthrough */ + case 0x28: + g[5] = 0; + g[0] = 3; + g[6] = ((Cmd_80178D40 *)arg1)->a.uh[0]; + (*(s16*)&D_801A3DD4) = 3; + g[7] = ((Actor_80178D40 *)arg0)->unkA; + g[8] = ((Cmd_80178D40 *)arg1)->a.uh[1]; + g[1] = 0x10; + g[3] = 4; + break; + case 0x29: + v20.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v20.vy = ((Actor_80178D40 *)arg0)->unkA; + v20.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v20, &v28); + g[5] = 0; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v28; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x50: + v30.vx = ((Cmd_80178D40 *)arg1)->a.uh[0]; + v30.vy = ((Actor_80178D40 *)arg0)->unkA; + v30.vz = ((Cmd_80178D40 *)arg1)->a.uh[1]; + func_8012F214(((Actor_80178D40 *)arg0), &v30, &v38); + g[5] = 1; + g[0] = 3; + *(SV3_80178D40 *)(g + 6) = v38; + g[1] = 0x10; + g[3] = 4; + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x2A: + g[0] = 4; + (*(s16*)&D_801A3DD4) = 3; + g[1] = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x1E: + func_8017B238(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x21: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A3BE4); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x54: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B238(((Actor_80178D40 *)arg0), (s32)&D_801A3BE4); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x1F: + func_8017B614(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x22: + func_8017BA3C(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A3BE4); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x55: + func_8017BB34(((Actor_80178D40 *)arg0), ((Cmd_80178D40 *)arg1)->a.w); + func_8017B614(((Actor_80178D40 *)arg0), (s32)&D_801A3BE4); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x20: + func_8017B7A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x4E: + D_801A3C08 = ((Cmd_80178D40 *)arg1)->a.w; + func_8017B940(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x57: + func_8017B824(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x58: + func_8017B880(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x2B: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unk2 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2C: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unk34 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2D: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unkD8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2F: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unk10A = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x2E: + (*(s16*)&D_801A3DD4) = 3; + ((Actor_80178D40 *)arg0)->unkF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x11: + func_8017A298(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x12: + func_8017A2C0(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x13: + func_8017A2E8(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x14: + func_8017A310(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x33: { + void (*f)(Actor_80178D40 *) = (void (*)(Actor_80178D40 *))((Cmd_80178D40 *)arg1)->a.w; + D_801A3D5C = (s32)&((Cmd_80178D40 *)arg1)[1]; + f(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + break; + } + case 0x30: + if (((Cmd_80178D40 *)arg1)->a.w == 0) { + func_8012E8A8(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + } else { + func_8012E88C(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + } + break; + case 0x4A: + ((void(*)())func_80175414)(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x4B: + func_80175454(); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x34: + (*(s16*)&D_801A3DD4) = 3; + D_801A37B0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x35: + D_801A3BE0 = (s32)&((Cmd_80178D40 *)arg1)[1]; + (*(s16*)&D_801A3DD4) = 3; + D_801A37B0 = ((Cmd_80178D40 *)arg1)->a.w; + return; + case 0x36: + (*(s16*)&D_801A3DD4) = 3; + D_801A37B0 += 8; + if (((s32 (*)(s32))((Cmd_80178D40 *)arg1)->a.w)(((Actor_80178D40 *)arg0)) == 0) { + break; + } + D_801A37B0 = *(s32 *)(D_801A37B0 + 4); + return; + case 0x37: + (*(s16*)&D_801A3DD4) = 3; + D_801A3BCC = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A3BD0 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x38: + (*(s16*)&D_801A3DD4) = 3; + D_801A3BD4 = ((Cmd_80178D40 *)arg1)->a.uh[0]; + D_801A3BD8 = ((Cmd_80178D40 *)arg1)->a.uh[1]; + break; + case 0x39: { + s32 w1, w2; + v40.vx = ((Actor_80178D40 *)arg0)->unk6; + v40.vy = ((Actor_80178D40 *)arg0)->unkA; + v40.vz = ((Actor_80178D40 *)arg0)->unkE; + v48.vx = pv->unk6; + v48.vy = pv->unkA; + v48.vz = pv->unkE; + func_8012F40C(out50, &v40); + w1 = out50[0]; + func_8012F40C(out50, &v48); + w2 = out50[0]; + (*(s16*)&D_801A3DD4) = 3; + D_801A3BCC = w1; + D_801A3BD0 = (s16)w1 >= (s16)w2; + break; + } + case 0x3A: { + s32 w1, w2; + v58.vx = ((Actor_80178D40 *)arg0)->unk6; + v58.vy = ((Actor_80178D40 *)arg0)->unkA; + v58.vz = ((Actor_80178D40 *)arg0)->unkE; + v60.vx = pv->unk6; + v60.vy = pv->unkA; + v60.vz = pv->unkE; + func_8012F40C(out50, &v58); + w1 = out50[0]; + func_8012F40C(out50, &v60); + w2 = out50[0]; + (*(s16*)&D_801A3DD4) = 3; + D_801A3BD4 = w2; + D_801A3BD8 = (s16)w1 < (s16)w2; + break; + } + case 0x41: + ((void(*)(s32, s32))func_8002D4C8)(((Cmd_80178D40 *)arg1)->a.uh[0], ((Cmd_80178D40 *)arg1)->a.uh[1]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x42: + func_8017AD0C(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x43: + D_801A3BF4 = (s32)func_8017A3D8; + D_801A3BFC = 0; + (*(s16*)&D_801A3DD4) = 5; + D_801A3BF8 = ((Cmd_80178D40 *)arg1)->a.w; + break; + case 0x44: + func_8001AAD0(((Cmd_80178D40 *)arg1)->a.h[0], ((Cmd_80178D40 *)arg1)->a.h[1]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x53: + func_80179E48(((Cmd_80178D40 *)arg1)->a.h[0]); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x56: + func_80179FEC(((Cmd_80178D40 *)arg1)->a.w); + (*(s16*)&D_801A3DD4) = 3; + break; + L5B_found: + fp5b = ((Cmd_80178D40 *)arg1)->a.w; + *q5b = fp5b; + ((void (*)(Actor_80178D40 *))fp5b)(((Actor_80178D40 *)arg0)); + (*(s16*)&D_801A3DD4) = 3; + break; + case 0x5B: + i5b = 0; + q5b = D_801A3C0C; + do { + i5b++; + if (*q5b == 0) { + goto L5B_found; + } + q5b++; + } while (i5b < 10); + (*(s16*)&D_801A3DD4) = 3; + break; + L5C_found1: + *q5c = 0; + goto L5C_join; + case 0x5C: + i5c = 0; + if (((Cmd_80178D40 *)arg1)->a.w != 0) { + fp5c = ((Cmd_80178D40 *)arg1)->a.w; + q5c = D_801A3C0C; + do { + if (*q5c == fp5c) { + goto L5C_found1; + } + i5c++; + q5c++; + } while (i5c < 10); + L5C_join: + if (i5c != 10) { + (*(s16*)&D_801A3DD4) = 3; + break; + } + i5c = 0; + do { + p5c = &D_801A3C0C[i5c]; + if (*p5c != 0) { + goto L5C_found2; + } + i5c++; + } while (i5c < 10); + (*(s16*)&D_801A3DD4) = 3; + break; + L5C_found2: + *p5c = 0; + goto L5D; + } + r5c = D_801A3C0C; + do { + i5c++; + if (*r5c != 0) { + *r5c = 0; + goto L5D; + } + r5c++; + } while (i5c < 10); + /* fallthrough */ + case 0x5D: + L5D: + (*(s16*)&D_801A3DD4) = 3; + break; + default: + break; + } +Lend: + D_801A37B0 += 8; +} + + +DEFINE_func_80179B28() /* dedup: shared engine-core @0x80179B28 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_80179B74); + +DEFINE_func_80179D30() /* dedup: shared engine-core @0x80179D30 (src/shared) */ + +DEFINE_func_80179D78() /* dedup: shared engine-core @0x80179D78 (src/shared) */ + +DEFINE_func_80179DCC() /* dedup: shared engine-core @0x80179DCC (src/shared) */ + +DEFINE_func_80179DF8() /* dedup: shared engine-core @0x80179DF8 (src/shared) */ + +DEFINE_func_80179E1C() /* dedup: shared engine-core @0x80179E1C (src/shared) */ + +DEFINE_func_80179E48() /* dedup: shared engine-core @0x80179E48 (src/shared) */ + +DEFINE_func_80179E74() /* dedup: shared engine-core @0x80179E74 (src/shared) */ + +DEFINE_func_80179EA0() /* dedup: shared engine-core @0x80179EA0 (src/shared) */ + +DEFINE_func_80179EE8() /* dedup: shared engine-core @0x80179EE8 (src/shared) */ + +DEFINE_func_80179F14() /* dedup: shared engine-core @0x80179F14 (src/shared) */ + +DEFINE_func_80179F44() /* dedup: shared engine-core @0x80179F44 (src/shared) */ + +DEFINE_func_80179F6C() /* dedup: shared engine-core @0x80179F6C (src/shared) */ + +DEFINE_func_80179F98() /* dedup: shared engine-core @0x80179F98 (src/shared) */ + +DEFINE_func_80179FEC() /* dedup: shared engine-core @0x80179FEC (src/shared) */ + +DEFINE_func_8017A040() /* dedup: shared engine-core @0x8017A040 (src/shared) */ + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A3BDC; + +void func_8017A094(s32 arg0) { + s16 sp10; + + D_801A3BDC = arg0; + sp10 = 0x15; + func_80179B74(&sp10); +} + + + +extern void func_80179B74(s16 *a0); +extern s32 D_801A3BDC; + +void func_8017A0C4(s32 arg0) { + s16 sp10; + + D_801A3BDC = arg0; + sp10 = 0x16; + func_80179B74(&sp10); +} + + +DEFINE_func_8017A0F4() /* dedup: shared engine-core @0x8017A0F4 (src/shared) */ + +DEFINE_func_8017A11C() /* dedup: shared engine-core @0x8017A11C (src/shared) */ + + +extern s32 D_801A3C04; +extern void func_80179B74(s16 *a0); + +void func_8017A144(s32 a0) { + s16 sp10; + sp10 = 0x1B; + func_80179B74(&sp10); + D_801A3C04 = a0; +} + + +DEFINE_func_8017A180() /* dedup: shared engine-core @0x8017A180 (src/shared) */ + +DEFINE_func_8017A1A8() /* dedup: shared engine-core @0x8017A1A8 (src/shared) */ + +DEFINE_func_8017A1D0() /* dedup: shared engine-core @0x8017A1D0 (src/shared) */ + +DEFINE_func_8017A1F8() /* dedup: shared engine-core @0x8017A1F8 (src/shared) */ + +DEFINE_func_8017A220() /* dedup: shared engine-core @0x8017A220 (src/shared) */ + +DEFINE_func_8017A248() /* dedup: shared engine-core @0x8017A248 (src/shared) */ + +DEFINE_func_8017A270() /* dedup: shared engine-core @0x8017A270 (src/shared) */ + +DEFINE_func_8017A298() /* dedup: shared engine-core @0x8017A298 (src/shared) */ + +DEFINE_func_8017A2C0() /* dedup: shared engine-core @0x8017A2C0 (src/shared) */ + +DEFINE_func_8017A2E8() /* dedup: shared engine-core @0x8017A2E8 (src/shared) */ + +DEFINE_func_8017A310() /* dedup: shared engine-core @0x8017A310 (src/shared) */ + +DEFINE_func_8017A338() /* dedup: shared engine-core @0x8017A338 (src/shared) */ + +DEFINE_func_8017A360() /* dedup: shared engine-core @0x8017A360 (src/shared) */ + +DEFINE_func_8017A388() /* dedup: shared engine-core @0x8017A388 (src/shared) */ + + +extern s16 D_801A3BC0; + +s32 func_8017A3B0(void) { + switch (D_801A3BC0) { + case 0: + return 1; + case 1: + return 0; + default: + return 1; + } +} + + + +// @class: regalloc-order +// @stuck: none — MATCH + +extern short D_801A3BFC; +extern short D_801A3BF8; + +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); + +int func_8017A3D8(void) +{ + switch (D_801A3BFC) { + case 0: + func_800D0CA0(1); + D_801A3BFC = D_801A3BFC + 1; + return 0; + case 100: + { + register int a __asm__("$4"); + a = D_801A3BF8; + if (a != -1) { + return func_8001AAA0() != 0; + } + return func_800D0CE0() == 1; + } + default: + D_801A3BFC = D_801A3BFC + 1; + if (D_801A3BFC < 0x1E) { + return 0; + } + D_801A3BFC = 100; + return 0; + } +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017A4AC); + +DEFINE_func_8017AD0C() /* dedup: shared engine-core @0x8017AD0C (src/shared) */ + +DEFINE_func_8017ADE8() /* dedup: shared engine-core @0x8017ADE8 (src/shared) */ + +DEFINE_func_8017AE08() /* dedup: shared engine-core @0x8017AE08 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017AE2C); + +// @class: plumbing +// @stuck: none — MATCH + + +void func_8017B0E4(int param_1, int param_2) +{ + extern s16 D_801A3C3C; + extern s16 D_801A3C3E; + extern s16 D_801A3C40; + extern s16 D_801A3C34; + extern s16 D_801A3C36; + extern s16 D_801A3C38; + + *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801A3C3C, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801A3C3E, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801A3C40, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801A3C34, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801A3C36, (s32)((s16)param_2)); + *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801A3C38, (s32)((s16)param_2)); +} + + + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_801A3BC4; +extern u16 D_801A3C44; +extern u16 D_801A3C46; +extern u16 D_801A3C48; +extern s16 D_801A3D60; + +void func_8017B1D8(void) { + func_8012A418(); + D_801A3D60 = 0; + D_801A3BC4 = 0; + D_801A3C44 = D_80126B5E; + D_801A3C46 = D_80126B62; + D_801A3C48 = D_80126B66; +} + + +// @class: regalloc-order — simplified sibling of matched func_8017B614. +// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move +// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` +// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. +// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. + +typedef struct { u8 b[8]; } Blk8_8017B238_8017B238; + +s32 func_8017B238(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern s32 func_8017BE60(void *a0); + extern u8 D_801816E4[]; + extern s16 D_801A3C3C; + extern s16 D_801A3C34; + extern u8 D_8012694C; + + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; + *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801816E4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801816E4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A3C3C; + s16 *p78C = &D_801A3C34; + *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; + *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; + func_8012A018((s32)func_8017BE60, 0); + D_8012694C = 0; + D_801A3D60 = 1; + D_801A3BC4 = 0; + } +} + + + +// @class: struct +// @stuck: none — MATCH (74 ins) + +typedef struct { s16 a, b, c, d; } SV4_8017B368; /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ +typedef struct { SV4_8017B368 x, y; } Pair16_8017B368; /* 16-byte stride array element */ + + + +s32 func_8017B368(s32 param) +{ + extern void func_8017BA3C(s32 param_1, s32 param_2); + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern SV4_8017B368 D_801A3BE4; + extern SV4_8017B368 D_801A3BEC; + extern s16 D_801A3C3C; + extern s16 D_801A3C34; + extern u16 D_801816E4; + + SV4_8017B368 loc0; + SV4_8017B368 loc1; + u32 n = (u32)&D_801A3BE4; + + ((void (*)(void))func_8017BA3C)(); + + if (n >= 0xB) { + loc0 = *(SV4_8017B368 *)n; + loc1 = D_801A3BEC; + } else { + s32 ax = (s32)&((Pair16_8017B368 *)&D_801816E4)[n].x; + s32 ay = (s32)&((Pair16_8017B368 *)&D_801816E4)[n].y; + func_8012F214(param, ax, (s32)&loc0); + func_8012F214(param, ay, (s32)&loc1); + } + + (*(SV4_8017B368 *)&D_801A3C3C) = loc0; + (*(SV4_8017B368 *)&D_801A3C34) = loc1; + D_801A3D60 = 1; + D_801A3BC4 = 0; +} + + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017B490); + +// @class: regalloc-order + T1 memcpy-builtin→call re-crack +// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps +// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns +// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol +// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and +// turned the old inlined block-move into a CALL) can no longer drift this. + +typedef struct { u8 b[8]; } Blk8_8017B614; + + + +s32 func_8017B614(s32 param_1, s32 param_2) +{ + extern void func_8012F214(s32 a0, s32 a1, s32 a2); + extern void func_80129CF8(void); + extern s32 func_8017BE60(void *a0); + extern u8 D_801816E4[]; + extern s16 D_801A3C3C; + extern s16 D_801A3C3E; + extern s16 D_801A3C40; + extern s16 D_801A3C34; + extern s16 D_801A3C36; + extern s16 D_801A3C38; + extern u8 D_8012694C; + extern s32 D_80126998; + extern s32 D_80126984; + extern s32 D_80126988; + extern s32 D_8012698C; + + u8 buf[16]; + + if (((u32)param_2) >= 0xB) { + register u8 *src __asm__("$16"); + __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); + *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; + *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); + } else { + s32 a1addr = (s32)&D_801816E4[((u32)param_2) * 0x10]; + s32 a2addr = (s32)&D_801816E4[((u32)param_2) * 0x10 + 8]; + func_8012F214(param_1, a1addr, (s32)&buf[0]); + func_8012F214(param_1, a2addr, (s32)&buf[8]); + } + { + s16 *p794 = &D_801A3C3C; + s16 *p78C = &D_801A3C34; + *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; + *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; + ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); + { + s32 v794, v796, v798, v78C, v78E, v790; + D_8012694C = 0; + v794 = *p794; + v796 = D_801A3C3E; + v798 = D_801A3C40; + v78C = *p78C; + v78E = D_801A3C36; + v790 = D_801A3C38; + __asm__ __volatile__(""); + D_801A3D60 = 1; + D_801A3BC4 = 0x1E; + D_80126990 = v794; + D_80126994 = v796; + D_80126998 = v798; + D_80126984 = v78C; + D_80126988 = v78E; + D_8012698C = v790; + } + func_80129CF8(); + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A3BC4; +extern s16 D_801A3C3C; +extern s16 D_801A3C3E; +extern s16 D_801A3C40; +extern s16 D_801A3C34; +extern s16 D_801A3C36; +extern s16 D_801A3C38; + +void func_8017B7A8(void) +{ + D_8012694C = 1; + D_801A3BC4 = 0; + D_801A3C3C = (s16) D_80114F30; + D_801A3C3E = (s16) D_80114F34; + D_801A3C40 = (s16) D_80114F38; + D_801A3C34 = (s16) D_80114F24; + D_801A3C36 = (s16) D_80114F28; + D_801A3C38 = (s16) D_80114F2C; +} + + + + +extern s32 D_801151D4; +extern s16 D_801A3C54; +extern s16 D_801A3C56; +extern s16 D_801A3C58; +extern s16 D_801A3C5C; +extern s16 D_801A3C5E; +extern s16 D_801A3C60; + +void func_8017B824(void) { + D_801A3C54 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); + D_801A3C56 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); + D_801A3C58 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); + D_801A3C5C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); + D_801A3C5E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); + D_801A3C60 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); +} + + + +// @class: schedule +// @stuck: none — MATCH + +extern s16 D_801A3C54; +extern s16 D_801A3C56; +extern s16 D_801A3C58; +extern s16 D_801A3C5C; +extern s16 D_801A3C5E; +extern s16 D_801A3C60; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +void func_8017B880(void) +{ + D_80114F30 = D_801A3C54; + D_80114F34 = D_801A3C56; + D_80114F38 = D_801A3C58; + D_80114F24 = D_801A3C5C; + D_80114F28 = D_801A3C5E; + D_80114F2C = D_801A3C60; +} + + +// @class: struct +// @stuck: none — MATCH + +/* 16-byte unaligned block copy from param to two adjacent align-1 globals. + src[0..7] -> (*(S8_8017B8E8 *)&D_801A3C3C), src[8..15] -> (*(S8_8017B8E8 *)&D_801A3C34) (source order). + An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ + +typedef struct { unsigned char b[8]; } S8_8017B8E8; + + +s32 func_8017B8E8(s32 src) { + (*(S8_8017B8E8 *)&D_801A3C3C) = ((S8_8017B8E8 *)src)[0]; + (*(S8_8017B8E8 *)&D_801A3C34) = ((S8_8017B8E8 *)src)[1]; +} + + + + +// @class: struct +// @stuck: none — MATCH (63 ins) + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_801A3C44; +extern u16 D_801A3C46; +extern u16 D_801A3C48; + +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; + +extern u8 D_8012694C; +extern s16 D_801A3BC4; +extern short D_801A3C4C; +extern short D_801A3C4E; +extern short D_801A3C50; +extern s16 D_801A3C3C; +extern s16 D_801A3C3E; +extern s16 D_801A3C40; +extern s16 D_801A3C34; +extern s16 D_801A3C36; +extern s16 D_801A3C38; + +void func_8017B940(void) +{ + s32 buf[3]; + + D_8012694C = 2; + buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801A3C44); + buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801A3C46); + buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801A3C48); + (*(s16 *)&D_801A3C4C) = buf[0]; + (*(s16 *)&D_801A3C4E) = buf[1]; + (*(s16 *)&D_801A3C50) = buf[2]; + D_801A3C3C = D_80114F30 + buf[0]; + D_801A3BC4 = 0; + D_801A3C3E = D_80114F34 + buf[1]; + D_801A3C40 = D_80114F38 + buf[2]; + D_801A3C34 = D_80114F24 + buf[0]; + D_801A3C36 = D_80114F28 + buf[1]; + D_801A3C38 = D_80114F2C + buf[2]; +} + + + +// @class: struct +// @stuck: none — MATCH (62 ins) + +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); + +/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ + +/* PSX MATRIX: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ + +extern SV4 D_801A3BE4; +extern SV4 D_801A3BEC; + +void func_8017BA3C(s32 param_1, s32 param_2) +{ + SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4 svec; /* sp+0x40 : func_8012F214 out */ + SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801A3BEC) */ + SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ + + func_8012F214(param_1, param_2, (s32)&svec); + D_801A3BE4 = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + D_801A3BEC = buf1; +} + + +// @class: struct +// @stuck: none — MATCH (65 ins) +#include "common.h" + +typedef struct { s16 a, b, c, d; } SV4_8017BB34; +typedef struct { s16 m[3][3]; s16 pad; s32 t[3]; } MTX_8017BB34; + + + +s32 func_8017BB34(s32 param_1, s32 param_2) +{ + SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ + MTX_8017BB34 mtx; /* sp+0x18 : MATRIX, t[] at sp+0x2c */ + SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ + SV4_8017BB34 svec; /* sp+0x40 */ + SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801A3BEC)) */ + SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ + + svec = *(SV4_8017BB34 *)param_2; + (*(SV4_8017BB34*)&D_801A3BE4) = svec; + + v0.a = -*(s16 *)(param_2 + 0xc); + v0.b = *(u16 *)(param_2 + 8); + v0.c = 0; + v1.a = 0; + v1.b = 0; + v1.c = -*(s16 *)(param_2 + 0xa); + ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); + + mtx.t[0] = (s32)svec.a; + mtx.t[1] = (s32)svec.b; + mtx.t[2] = (s32)svec.c; + func_8004914C(&mtx); + func_800491AC(&mtx); + + RotTransSV(&v1, &buf1, &buf2); + (*(SV4_8017BB34*)&D_801A3BEC) = buf1; +} + + + + +// @class: regalloc-order +// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 + +extern void (*D_801A3C0C[10])(int); + +void func_8017BC38(int param_1) +{ + register int i __asm__("$17"); + register void (**p)(int) __asm__("$16"); + + i = 0; + p = D_801A3C0C; + do { + if (*p != (void (*)(int))0) { + (*p)(param_1); + } + i = i + 1; + p = p + 1; + } while (i < 10); + return; +} + + + + +// @class: plumbing +// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow + +extern void func_8017B0E4(int, int); +extern s16 D_801A3BC4; +extern s16 D_801A3D60; + +void func_8017BCA0(int param_1) { + func_8017B0E4(param_1, 0xC); + D_801A3BC4 = D_801A3BC4 + 1; + if (D_801A3BC4 >= 0x1F) { + D_801A3D60 = 2; + } +} + + + + +// @class: plumbing +// @stuck: none — MATCH expected (simple short-increment + guarded call) + +extern s16 D_801A3BC4; +extern s16 D_801A3D60; + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +void func_8017BCF4(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A3BC4 = D_801A3BC4 + 1; + if (0x18 < D_801A3BC4) { + func_8012A4BC(); + D_801A3D60 = 0; + } + return; +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) + +extern void func_8017B0E4(int, int); +extern void func_8012A4BC(void); + +extern s16 D_801A3BC4; +extern void (*D_801A3C08)(void); +extern short D_801A3C4C; +extern short D_801A3C4E; +extern short D_801A3C50; +extern s16 D_801A3D60; + +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; + +void func_8017BD50(int param_1) +{ + func_8017B0E4(param_1, 6); + D_801A3BC4 = D_801A3BC4 + 1; + if (D_801A3BC4 >= 0x19) { + if (D_801A3C08 != 0) { + (*D_801A3C08)(); + } else { + D_80114F30 = D_80114F30 + D_801A3C4C; + D_80114F34 = D_80114F34 + D_801A3C4E; + D_80114F38 = D_80114F38 + D_801A3C50; + D_80114F24 = D_80114F24 + D_801A3C4C; + D_80114F28 = D_80114F28 + D_801A3C4E; + D_80114F2C = D_80114F2C + D_801A3C50; + func_8012A4BC(); + } + D_801A3D60 = 0; + } +} + + + +extern void (*D_80181784[])(void); + +void func_8017BE60(void *a0) { + D_80181784[*(u8 *)((s32)a0 + 0x4)](); +} + + +DEFINE_func_8017BE9C() /* dedup: shared engine-core @0x8017BE9C (src/shared) */ + +DEFINE_func_8017BEA4() /* dedup: shared engine-core @0x8017BEA4 (src/shared) */ + +DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ + +DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017BEBC); + + +extern void (*D_80181804[])(void); + +void func_8017CD9C(void *a0) { + D_80181804[*(u8 *)((s32)a0 + 0x15)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017CDD8); + +s32 func_8017CE14(void) { + return 1; + } + + + +extern void (*D_8018180C[])(void); + +void func_8017CE1C(void *a0) { + D_8018180C[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017CE58(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017CE74); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017CEC8); + + +extern void (*D_80181818[])(void); + +void func_8017CEEC(void *a0) { + D_80181818[*(u8 *)((s32)a0 + 0x15)](); +} + + +s32 func_8017CF28(u8 *a0) { + *(s32 *)(a0 + 0x28) = 0xA; + a0[0x15] += 1; + return 0; + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017CF44); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017CFC0); + + +extern void (*D_80181858[])(void); + +void func_8017D024(void *a0) { + D_80181858[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D060); + +void func_8017D0CC(void) { +} + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D0D4); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D150); + +extern s32 func_80171990(u8 *a0); + extern s32 D_80126B58; + void func_8017D178(void) { + ((void (*)(void *))func_80171990)(&D_80126B58); + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D1A0); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D1C8); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D260); + +extern s32 D_8019EE74; +extern s32 D_80126950; +extern void func_80174E9C(s32); + +void func_8017D304(void) { + D_80126950 = 0x16F; + func_80174E9C((s32)&D_8019EE74); +} + + + +extern void (*D_80181878[])(void); + +void func_8017D338(void *a0) { + D_80181878[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D374); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D39C); + +extern s32 func_8017D3E4(void); + +s32 func_8017D3E4(void) { + return 0x91; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D3EC); + +extern s32 func_8012AD50(void *a0); + void func_8017D4AC(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D4CC); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D508); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D554); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D5A0); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D5EC); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D634); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D680); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D6CC); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D718); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D760); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D7AC); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D7F8); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D844); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D88C); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D8D8); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D924); + +void func_8017D978(void) { +} + +void func_8017D980(s32 *a0) { + *(s32 *)((s32)a0 + 0x30) = 0; + *(s32 *)((s32)a0 + 0x34) = 0; + *(s32 *)((s32)a0 + 0x38) = 0; + *(s32 *)((s32)a0 + 0x3C) = 0; + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017D994); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DA0C); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DA7C); + + +extern void (*D_801819E4[])(void); + +void func_8017DACC(void *a0) { + D_801819E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017DB08(u8 *param_1) { + *(short *)(param_1 + 0xfc) = 0; + *(unsigned short *)(param_1 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DB34); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DB80); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DBCC); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DC40); + + +extern void (*D_80181A78[])(void); + +void func_8017DCA8(void *a0) { + D_80181A78[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DCE4); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_80178D40", func_8017DD18); + + diff --git a/tools/bank_exemplar.py b/tools/bank_exemplar.py new file mode 100644 index 000000000..28ecb094e --- /dev/null +++ b/tools/bank_exemplar.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +"""Bank a cracked EXEMPLAR ×1 (carve → splice → staged gate), mirroring jtbl_family_bank.bank()'s +stage ladder (raw → scoped → recovered → reconciled) but for the exemplar's own overlay (no remap). + +Usage: bank_exemplar.py +""" +import os, sys, subprocess, re +sys.path.insert(0, 'tools') +os.chdir('/home/musashi/bfm-decomp') +import jtbl_family_bank as fb +from scope_data_externs import fix as scope_data_fix +from canon_sig_reconcile import reconcile + +OV, FUNC, CRACK = sys.argv[1], sys.argv[2], sys.argv[3] + + +def sh(c): + return subprocess.run(c, shell=True, capture_output=True, text=True) + + +dirty = sh("git status --porcelain -- config/ src/").stdout.strip() +assert not dirty, "tree dirty:\n" + dirty[:300] +keep = fb.region_files(OV) + +print("== extract (committed config)") +assert sh(f"make --no-print-directory extract BINARY={OV}").returncode == 0 + +print("== carve") +r = sh(f"python3 tools/jtbl_carve.py {OV} --func {FUNC}") +if r.returncode and "NON-CONTIGUOUS" in (r.stdout + r.stderr): + print(" [lazy isolation]") + assert fb.isolate(OV, FUNC).returncode == 0, "isolate failed" + assert sh(f"make --no-print-directory extract BINARY={OV}").returncode == 0 + r = sh(f"python3 tools/jtbl_carve.py {OV} --func {FUNC}") +assert r.returncode == 0, (r.stdout + r.stderr)[-300:] + +print("== re-extract post-carve") +assert sh(f"make --no-print-directory extract BINARY={OV}").returncode == 0 + +cf = fb.stub_file(OV, FUNC) +print("== stub:", cf) +assert cf +orig = open(cf).read() +m = re.search(rf'INCLUDE_ASM\("[^"]*",\s*{FUNC}\);', orig) +assert m +body = open(CRACK).read() + +scoped, moved = scope_data_fix(body, orig, m.start(), FUNC) +base = scoped if moved else body +stages = [("raw", lambda: body)] +if moved: + stages.append(("scoped", lambda: scoped)) +stages += [("recovered", lambda: fb.recover(base, OV, cf, FUNC) or base), + ("reconciled", lambda: reconcile(FUNC, base, tu_path=cf))] + +last_err = "" +for name, make in stages: + try: + cand = make() + except Exception as e: + last_err = f"{name}: {repr(e)[:90]}" + continue + open(cf, 'w').write(orig[:m.start()] + cand + orig[m.end():]) + b = sh(f"make --no-print-directory build BINARY={OV}") + if b.returncode == 0 and "[ OK ]" in b.stdout: + print(f"== BANKED ×1 [{name}] — BYTE-IDENTICAL (tree left banked for R22 + commit)") + sys.exit(0) + errs = [l.strip()[:120] for l in (b.stdout + b.stderr).split('\n') + if re.search(r'conflicting|undeclared|parse error|redefinition', l) and 'built-in' not in l] + last_err = f"{name}: " + (errs[0] if errs else "byte-diff") + print(f" [{name}] FAIL — {last_err}" + (f" (+{len(errs)-1} more)" if len(errs) > 1 else "")) + open(cf, 'w').write(orig) + +fb.revert(OV, cf, keep_regions=keep) +print("== reverted; last:", last_err) +sys.exit(1)